一、问题描述
自己在运行 Gmapping 时候遇到如下问题:
一旦自己运行数据集,就报如下错:
[ INFO] [1615126357.797909859, 1607495981.113536673]: Laser is mounted upwards.
[mapping-4] process has died [pid 26559, exit code -11, cmd /home/wong/catkin_ws/devel/lib/gmapping/slam_gmapping scan:=/r2000_node/scan __name:=mapping __log:=/home/wong/.ros/log/2a1cf17a-7f4f-11eb-bcb2-2c6e85a86894/mapping-4.log].
log file: /home/wong/.ros/log/2a1cf17a-7f4f-11eb-bcb2-2c6e85a86894/mapping-4*.log
二、解决方法
1.结论和解决方法
Gmapping 只适用于 单帧二维激光点数小于1440的点,如果单帧激光点数大于1440,那么就会出现[mapping-4] process has died
这样的问题。
所以把单帧二维激光点数配置为1440,就可以正常进行建图了。
2.Debug过程
刚开始是以为自己没有写参数 <param name="use_sim_time" value="true"/>
,但是当自己加上这个参数依旧报上面的错误。
后来自己使用 “控制变量法”,一步一步调试,一步一步修改数据集文件配置,发现依旧会出现这样的问题。后来换了另外一个激光的数据集,竟然可以正常运行!!!
然后查看单帧激光的点数,发现两个数据集的单帧激光点数不同,也就是激光分辨率不同。
所以能够运行 Gmapping
的数据集单帧激光点数是1440,不能运行Gmapping
算法的数据集对应的单帧激光点数是3600。 所以以后对于这种情况,要么配置激光单帧激光点数为1440,要么编写一个 二维激光点降采样的程序,将单帧激光点数高于1440的topic降采样为单帧激光点数低于1440的topic。