ROS开源社区中有很多SLAM算法,可以直接使用或者进行二次开发,其中最为常用和成熟的是gmapping功能包。其他的还有hector–slam和谷歌的cartographer包等等。gmapping功能包集成了Rao–Blackwellized粒子滤波算法,为开发者隐去了复杂的内部实现。gmapping融合了深度信息、IMU信息、里程计信息实现在位置环境中的即时定位与地图建模,适用与面积较小的平缓地面封闭环境,大家也可以搜索一下gmapping、hector–slam、cartographer三种建图方法的区别与优缺点等,接下去我们在仿真环境中进行gmapping建图
迷你机器人附带的ROS2GO随身系统中已经安装好各种环境,如果大家在其他环境中未安装gmapping可以使用以下算法进行安装
sudo apt-get install ros-<ros 版本>-gmapping
首先需要配置配置Lanuch文件我们新建gmapping.launch和gmapping_demo.launch代码如下:
完成上述配置,我们就能在gazebo中仿真SLAM了,我这边建了一个1:1仿真智能车比赛的赛道地图并在本次仿真中使用,在终端中启动gazebo仿真环境和gmapping节点:
roslaunch mini_gazebo simulation_camera.launchroslaunch mini_nav gmapping_demo.launch
运行成功后,我们可以在rviz中看到红点深度信息
我们再打开键盘控制节点roslaunch mini_nav mini_teleop.launch就能用键盘控制小车跑地图实现slam地图构建了。
当小车跑完一圈建完图后,我们打开mini_gazebo/maps文件夹,并在此文件夹下打开终端,输入以下命令保存地图
rosrun map_server map_saver -f racetrack
我们发现建好的图命名为racetrack.pgm保存在该文件夹下了,racetrack.yaml是一个关于地图配置的文件,包含关联的地图数据文件、地图分辨率、起始位置、地图数据的阈值等配置参数,代码如下:
地图保存好后如果我们想要实现自主探索SLAM,我们需要引入move_base功能包,move_base主要用于小车路径规划的,我们在下一节会具体展开,在这里只做个简单介绍,我们新建exploring_slam_demo.launch文件,在文件中加入gmapping以及move_base,代码如下:
打开两个终端,依次敲入命令:
roslaunch mini_gazebo simulation_camera.launchroslaunch mini_nav exploring_slam_demo.launch
在rviz中点击2D Nav Goal,并在地图中设置目标点, 小车便能一边跑向目标点,一边建图了。
本节我们实现了键盘控制小车进行gmapping,下一节博主会配置move_base和AMCL,让小车在建好的图中设置路径点并自动避障导航。
参考资料
1.古月老师的<<ROS机器人开发实践>>
2.gmapping原理的分析
3.Gmapping、hector、Cartographer三种激光SLAM算法简单对比
https://blog.csdn.net/Jeff_Lee_/article/details/77869987