ROS SLAM 1 | 使用Gmapping雷达建图

2D SLAM – 使用Gmapping雷达建图

地图是导航必要的节点,在ROS上面常见有四种二维SLAM建图方式,它们分别是gmapping、谷歌cartographer、hector、Karto,每种算法都有不同的优缺点,感兴趣可以看看这里的SLAM算法对比

对于硬件要求我们使用灵遨科技灵风底盘,这款底盘电机采用光电编码器方案,为里程计提供精确的位置。

Gmapping算法优缺点

优点:是在构建小场景地图所需的计算量较小且精度较高,相比Cartographer在构建小场景地图时,Gmapping不需要太多的粒子并且没有回环检测因此计算量小于Cartographer而精度并没有差太多。并且CPU资源消耗比Cartographer小。

缺点:随着场景增大所需的粒子增加,因为每个粒子都携带一幅地图,因此在构建大地图时所需内存和计算量都会增加。因此不适合构建大场景地图。并且没有回环检测,因此在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价。

测试gmapping程序发现:采用同样的数据集,生成5cm的地图没压力,3cm地图就会扭曲;在生成5cm地图时,增加粒子数量,生成的地图非但没有变好,反而不能成图。

问题的关键在计算量,gmapping为单线程程序,多核cpu不起作用。计算量与地图分辨率、粒子数成正比,分辨率越大、粒子数越多,cpu占用率越高。cpu的高负荷导致一次数据处理的时间变长,从而导致部分数据得不到处理。cpu负荷越高,遗漏的数据越多,造成状态估计的不连续。这就是为什么随着粒子数的增加或地图分辨率的提高,会出现地图扭曲、未知区域变大、直接拼图失败等现象。

启动底盘通讯与雷达节点

在主控节点启动与底盘的通讯与雷达,同时程序会将IMU姿态与位置融合发布odom位置信息

 roslaunch lingao_bringup robot.launch


等待IMU校准后出现First IMU message received并且没有错误基本上就是启动成功

启动Gmapping建图

在主控节点启动雷达与Gmapping节点

roslaunch lingao_slam slam.launch

通过图片可看到下图无错误既是启动成功,有时候Rplidar因为电流问题会启动失败,需要重新执行命令。

启动本地可视化rviz

在本地PC主机启动rviz在窗口内可看到机器人tf位姿数据、激光节点、地图数据

roscd lingao_slam/rviz/
rviz -d slam.rviz


现在开始建图,使用航模手柄或者键盘控制小车走进行建图。

保存地图

保存地图使用以下命令(在主控节点输入),以下任选一个

  • 快捷保存地图
roslaunch lingao_slam save_map.launch 

默认地图名为map

  • 快捷保存地图为其他名字
roslaunch lingao_slam save_map.launch map_name:=map2

保存名字为map2的地图

  • 或者直接使用map_server服务保存在目录下:
roscd lingao_navigation/maps/
rosrun map_server map_saver -f map

-f map,参数map为地图名

保存地图后可看到map.pgm和map.yaml文件就是本次建的地图

结束建图在开启建图的终端下ctrl+c取消即可

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。
电子工坊 » ROS SLAM 1 | 使用Gmapping雷达建图

发表评论

提供最优质的资源集合

立即查看 了解详情