【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
前面我们介绍了hector slam建图。相对而言,hector slam建图对数据的要求比较低,只需要lidar数据就可以建图了。但是hector slam也有它自己的问题。那就是如果robot行走在走廊上面,特别是长走廊上面,那么hector slam是很难建图的。这主要的原因就是,hector slam算法会觉得前后两帧lidar frame没有发生改变,小车根本没有移动。基于这个原因,人们又设计出了一种新的制图方法,那就是gmapping制图。和hector slam相比较,gmapping还依赖于robot的里程计数据。
1、打开仿真地图
和之前打开wpb_stage_slam.launch不同,这一次打开的wpb_stage_corridor.launch。用roslaunch wpr_simulation wpb_stage_corridor.launch打开,效果是这样的,
2、开启gmapping
仿真环境准备好了,这个时候就可以准备用gmapping开始绘图了。输入的方法就是rosrun gmapping slam_gmapping即可。不出意外的话,可以看到这样的打印,
feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/catkin_ws$ rosrun gmapping slam_gmapping
Warning: TF_REPEATED_DATA ignoring data with redundant timestamp for frame odom at time 137.641000 according to authority unknown_publisher
at line 278 in /tmp/binarydeb/ros-noetic-tf2-0.7.6/src/buffer_core.cpp
[ INFO] [1696080880.129716402, 137.739000000]: Laser is mounted upwards.
-maxUrange 5.99 -maxUrange 5.99 -sigma 0.05 -kernelSize 1 -lstep 0.05 -lobsGain 3 -astep 0.05
-srr 0.1 -srt 0.2 -str 0.1 -stt 0.2
-linearUpdate 1 -angularUpdate 0.5 -resampleThreshold 0.5
-xmin -100 -xmax 100 -ymin -100 -ymax 100 -delta 0.05 -particles 30
[ INFO] [1696080880.212790260, 137.789000000]: Initialization complete
update frame 0
update ld=0 ad=0
Laser Pose= 1.7082e-07 1.78246e-07 3.20824e-08
m_count 0
Registering First Scan
3、用rviz开启绘图效果
直接执行rosrun rviz rviz,依次打开RobotModel、Map、LaserScan之后,我们就可以看到这样的效果,
4、继续打开rqt_robot_steering
这个时候虽然已经看到图形了,但是车还没有办法动起来。所以,这个时候,我们还需要用rosrun rqt_robot_steering rqt_robot_steering把小车启动起来。这样一顿操作之后,就可以把所有的场景绘制完毕了。如果仅仅使用hector slam,这个时候就没有什么办法继续绘图了,
但是,此时我们使用的是gmapping的建图方法,所以小车可以一直向前建图下去,
5、保存和显示地图
等地图做好了,就可以使用map_server保存地图了。直接输入rosrun map_server map_saver。ls一下,就可以看到map.yaml和map.pgm两个新文件。把map.pgm拷贝到windows平台,用gimp打开,就可以看到这样的图片效果,