ROS上利用turtlebot3对navigation和gmapping进行仿真
对于网上各种花式仿真包,我只能说这些要么没有对新版ros进行维护,要么直接源码就是错误的。最后在苦苦寻找下找到了一个维护比较积极的仿真包:turtlebot3(好像和ros官方有很好的关系,支持度很不错)
里面已经包含了一些仿真地图,和已经写好的机器人的模型。 我觉得这是对新手最友好的了。
环境:ROS melodic
第一步:下载安装turtlebot3:
cd ~/catkin_ws/src/
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
cd ~/catkin_ws && catkin_make
也可以手动到github上下载解压到自己的工作空间的src目录下。
官方提供了3中形态:burger
, waffle
, waffle_pi
我们仿真就挑个waffle来使用就行了。(你非要挑其他的也可以用。这里随意都行)
第二步:把turtlebot的包添加到环境支持里面:
打开终端,先运行这一句话(当然你也可以在/home目录下修改bashrc文件一劳永逸)
export TURTLEBOT3_MODEL=waffle
然后运行gazebo,对整个仿真建立地图数据:
roslaunch turtlebot3_gazebo turtlebot3_world.launch
会自动打开gazebo,并会加载一张地图:
第三步:在仿真地图数据中,跑slam_gmapping,对仿真地图数据建图:
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
运行之后,会自动打开rviz,并且开始建图了:
可以在上面看到机器人的形状和位置这些。
第四步:运行teleop节点或者自动移动节点(二选一),让机器人到处跑,来完成建图:
teleop节点:
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
可以利用wasdx键对机器人进行移动。并且终端上会提示你每个键的作用。
自动移动节点:
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_gazebo turtlebot3_simulation.launch
运行之后机器人开始自己乱动了hhh。
同时可以发现 gazebo里的机器人和rviz里的机器人都在同步运动,同时建图的完成度也在rviz里直观可见。
等建图完成得差不多的时候(每个障碍都被记录下来),运行map_server保存地图。
rosrun map_server map_saver -f ~/Desktop/map
其中:-f表示我们的希望输入保存的路径,保存完有两个文件map.pgm
和map.yaml
,yaml里面调用了map.pgm
。
第五步:在建好的地图之上,跑navigation。
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=(地图的路径)
利用rviz中的 2D Pose Estimate
按钮,调整机器人位姿信息,并将其雷达信息与地图信息对其,然后就可以利用2D Nav Goal
来进行导航了。
rviz和gazebo里的机器人都在一起运动。
至此仿真完成。
注意事项:运行navigation节点的时候,要保持gazebo的打开状态,不然就会导致没有map话题,最后在rviz里就会报错。