【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
前面我们的测试大部分都是基于仿真来实现的。但是很多时候,我们其实希还是望自己的算法能够跑在真实场景的数据上。可问题来了,此刻我们自己既没有钱买机器人,也没有时间采集那么多数据,那么应该怎么办呢。所以,为了解决这个问题,我们想到一个很简单的办法,那就是去网上找符合格式的数据集来进行离线制图。这和我们当初为了学习opencv图像处理、深度学习,去网上找测试集是一个道理。
当然,这么做还有一个好处,那就是可以基于同一份传感器数据来制图,这样根据图的质量来评判不同算法的好坏。不然,不同的算法本身运行在不同的数据集上,这其实并不太好判断的。
1、下载数据集
网上rosbag的数据集还是有一些的。比如github上就有很多我们需要的数据集。这里给出一个示例地址,
https://github.com/MST-Robotics/MST_ROS_Catkin_Packages/blob/master/basic_localization_stage.bag
2、启动roscore
所有的程序启动都需要依赖于roscore,这是也我们一开始学习ros就知道的知识点。
3、设置重放数据时间
这里需要通过rosparam的设置告诉ros系统,当前数据的时间不是本地时间,而是历史时间。对应的命令为rosparam set use_sim_time true。
4、启动gmapping运行
为了方便验证,这里直接给出了ros gmapping的操作命令,直接输入rosrun gmapping slam_gmapping scan:=base_scan。注意这里的scan为base_scan,因为数据包里面的topic就是base_scan,所以要修改一下。
5、开始播放rosbag数据
直接输入rosbag play --clock basic_localization_stage.bag即可。输入之后,我们就可以看到类似这样的打印,
6、打开rviz验证效果
所有工作都准备好之后,就可以用rviz订阅base_scan和map这两个topic了,直接输入rosrun rviz rviz即可。为啥会订阅两个topic,主要有两个目的。订阅map肯定是为查看制图效果,而订阅base_scan则可以看到当前的lidar的扫描轮廓出现在什么地方,这样也能大致推断出机器人当前走到了哪里。过了一段时间之后,不出意外的话,我们就会看到这样的图片效果,
如果需要保存地图的话,可以直接输入rosrun map_server map_saver即可。相信大家对这一点都已经非常熟悉了。这样不仅仅是gmapping,我们还可以用hector slam、cartographer等多种算法来进行测试和评比,最后选出适合我们的slam算法。