前言
首先,参考了以下链接,感谢这位博主详细的分享,如有需要请直接移步。
传送门:Click
关于Gazebo物理仿真平台与Rviz可视化工具,
urdf
和
xacro
这里不再多做介绍。本文主要讲解如何利用开源Turtlebot3机器人模型和Gmapping算法,基于自己在Gazebo上building editor上构建的地图进行仿真实验。 后续考虑利用在此基础上进一步提升。
1、实验环境
Ros-Noetic
Gazebo 11
2、Turtlebot3功能包准备
urtlebot3功能包中继承了了TurtleBot3的机器人文件、SLAM和导航功能包、遥控功能包和bringup功能包等,另一个功能包turtlebot3_simulations中包含了更丰富的仿真文件(如一些rviz和gazebo的launch文件)。后面将从这两个包中复制出我们需要的文件来集成,并进行仿真。
turtlebot3包下载地址:https://github.com/ROBOTIS-GIT/turtlebot3
turtlebot3_simulations包下载地址:https://github.com/ROBOTIS-GIT/turtlebot3_simulations
turtlebot3 wiki简介:http://wiki.ros.org/turtlebot3
主要是两种型号:Burger 和 Waffle Pi
下面是关于他们的主要规格列表(略),主要参考其传感器:
可以看到Waffle Pi传感器主要包括机械激光传感器(采样频率5hz以上)、树莓派摄像头模组 v2.1和三轴陀螺仪和三轴加速度计的IMU。
3、创建workspace和功能包
相关命令如下:
mkdir -p catkin_turtlebot3/src
cd ~/catkin_turtlebot3/src
catkin_init_workspace
catkin_create_pkg turtlebot3_sim_test urdf xacro gazebo_ros ##添加urdf xacro gazebo_ros依赖
在turtlebot3_sim_test功能包下创建
urdf
(存储urdf模型文件)、
meshes
(存储模型渲染文件)、
worlds
(存储gazebo仿真环境文件)、
models
(用来存储gazebo仿真环境配置文件)、
rviz
(用来存储rviz环境下机器人配置文件)、
launch
(用来存储启动文件)文件夹。
将上面github项目中clone下来的文件:
1、turtlebot3项目中turtlebot3_description/urdf目录下
turtlebot3_waffle_pi.urdf.xacro
文件拷贝到turtlebot3_sim_test功能包下urdf文件夹中;turtlebot3_description/meshes文件夹下
所有文件
拷贝到turtlebot3_sim_test功能包下meshes文件夹中。
2、turtlebot3_simulations 项目中turtlebot3_gazebo/worlds目录下
turtlebot3_house.world
、
turtlebot3_world.world
两文件到turtlebot3_sim_test的
world
文件夹;turtlebot3_gazebo/models/文件夹下
turtlebot3_house
和
turtlebot3_world
两个文件夹拷贝到turtlebot3_sim_test的models文件夹下。
3、rviz和launch的配置文件后续再写
完成后turtlebot3_sim_test功能包目录如下:
4、在Rviz可视化工具下加载出机器人模型
在turtlebot3_sim_test/launch文件夹下添加turtlebot3_sim_rviz.launch文件。
<launch><argname="model"default="waffle_pi"/><!-- 在参数服务器载入xacro文件 --><paramname="robot_description"command="$(find xacro)/xacro $(find turtlebot3_sim_test)/urdf/turtlebot3_$(arg model).urdf.xacro"/><!-- 启动rviz --><nodename="rviz"pkg="rviz"type="rviz"/><!-- 启动机器人状态和关节状态发布节点 --><nodepkg="robot_state_publisher"type="robot_state_publisher"name="robot_state_publisher"/><nodepkg="joint_state_publisher"type="joint_state_publisher"name="joint_state_publisher"/></launch>
注意载入xacro文件路径写法,这里加载了
turtlebot3_waffle_pi.urdf.xacro
文件。
保存之后我们可以编译功能包。如果你的工作空间还有其他功能包,我们选择单独编译,相关代码如下:
cd ~/catkin_turtlebot3
catkin_make -DCATKIN_WHITELIST_PACKAGES="turtlebot3_sim_test"source devel/setup.bash ##每新开终端都需要source,可以考虑把这个写入.bashrc中
之后,运行rviz的launch文件可以加载出机器人的模型
$ roslaunch turtlebot3_sim_test turtlebot3_sim_rviz.launch
初始加载没有调整好接收数据,Rviz没有数据
右上角map改成base_link,同时,右下角Add中添加RobotModel,机器人就可以正常显示出来了。加上TF可以显示机器人上存在的不同坐标系(包括不同传感器、左右轮等)。
因为每次运行该机器人模型的launch文件时,Rviz会自动处于一种初始化状态,这时我们可以将配置信息保存,这样下次运行launch就不需要再重新配置。配置信息主要保存在turtlebot3_sim_test功能包下
rviz
文件夹中。点击右上角file->save config as,然后取一个文件名称,这里命名为turtlebot3_pi。
这个时候还没有结束,因为要修改launch文件中自动加载该配置文件,所以需要修改功能包下launch文件夹中
turtlebot3_sim_rviz.lanch
。
将启动rviz的代码修改如下:
<nodename="rviz"pkg="rviz"type="rviz"args="-d $(find turtlebot3_sim_test)/rviz/turtlebot3_pi.rviz"/>
## 注意这里的turtlebot3_pi.rviz以自己命名为准
5、在Gazebo中加载出机器人模型(非自定义仿真环境)
首先,我们需要修改turtlebot3_sim_test下的package.xml文件。因为原项目文件turtlebot3_house.world默认加载地址为gazebo下的地址(/usr/share/gazebo-11/models),而不是我们功能包下models文件夹中的地址。因此可以在package.xml中加入如下代码:
<gazebo_rosgazebo_model_path="${prefix}/models"/>
同时,在功能包的launch文件夹中加入启动gazebo的launch文件,命名为
turtlebot3_sim_gazebo.launch
,内容如下:
<launch><argname="model"default="waffle_pi"/><argname="x_pos"default="-2.0"/><argname="y_pos"default="-0.5"/><argname="z_pos"default="0.0"/><includefile="$(find gazebo_ros)/launch/empty_world.launch"><argname="world_name"value="$(find turtlebot3_sim_test)/worlds/turtlebot3_house.world"/><argname="paused"value="false"/><argname="use_sim_time"value="true"/><argname="gui"value="true"/><argname="headless"value="false"/><argname="debug"value="false"/></include><paramname="robot_description"command="$(find xacro)/xacro $(find turtlebot3_sim_test)/urdf/turtlebot3_$(arg model).urdf.xacro"/><nodepkg="gazebo_ros"type="spawn_model"name="spawn_urdf"args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description"/></launch>
这时,我们可以启动launch文件了,但第一次加载时间较长,注意耐心等待。第二次启动后加载速度很快。终端命令:
$ roslaunch turtlebot3_sim_test turtlebot3_sim_gazebo.launch
新开终端,利用rostopic list查看话题节点如下,通常我们比较关注的包含cmd_vel、tf 和一些传感器信息话题节点
利用rostopic info /cmd_vel查看该话题节点,可以看到gazebo订阅了这一话题节点,这样我们可以终端发布控制信息控制机器人的运动
6、键盘对机器人的控制
ros提供通用键盘控制包来操控机器人的运动。我们先安装相关命令:
sudo apt-get install ros-noetic-teleop-twist-keyboard
完成后可以通过键盘控制机器人运动,终端命令如下(已开gazebo仿真环境)
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py
7、利用gazebo、rviz工具及开源Gmapping进行定位和建图
先启动gazebo仿真环境
$ roslaunch turtlebot3_sim_test turtlebot3_sim_gazebo.launch
启动Rviz可视化工具
$ roslaunch turtlebot3_sim_test turtlebot3_sim_rviz.launch
rviz启动以后,我们调整好相关配置。
其中map的topic暂时为空,因为我们还没有运行Gmapping节点,并没有发布地图节点信息。因此,我们需要新开终端运行开源Gmapping节点。在此之前先安装turtlebot3相关的slam算法包ros包,命令如下:
$ sudo apt-get install ros-noetic-turtlebot3-slam
完成之后,运行gamapping算法
roslaunch turtlebot3_slam turtlebot3_gmapping.launch
此时,我们在rviz中调整map接受/map的话题,可以看到gmapping算法已经正常运行
新开终端实现键盘控制机器人,完成初步建图工作。
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py
经过一番操作之后,建出地图如图所示……效果有点一言难尽。
关于节点间流转关系,可以用rqt_grap命令查看计算图,后续再将机器人模型移植到自定义地图环境中。
版权归原作者 小朱不秃 所有, 如有侵权,请联系我们删除。