听说过给删减版的gmapping装上“纠偏外挂”吗?我的TX2搭配RPLIDAR跑了个大直走廊,结果地图建得直得让我都怀疑人生了!这一步其实挺顺理成章的,毕竟之前已经手撕过SLAM算法,还搞定了运动畸变,这次直接把这两块功能塞进那个瘦身版的gmapping里,机器人瞬间就像换了条腿似的,跑得又快又准。 先简单讲讲怎么动手术。我只改动了三个关键点:把激光雷达畸变纠正模块给主流程“镶”进去,每条扫描线进来之前都要先“正骨”;然后把一些没用的文件和功能全都删掉,给my_slam_gmapping减减肥;最后再把注释里以前可能弄混的地方都改明白,好让新手一看就懂。 咱们先看效果吧。TX2在Ubuntu16.04上配了RPLIDAR A2M8,这玩意儿本来也就10Hz的刷新率。你看左侧那个是原版gmapping的样子,右侧加上我改进后的代码,简直就是用尺子量出来的直线误差几乎看不见。 这改动到底有多大作用?效果很直接:帧率没变,精度却翻了一倍;同样是跑十米长的直走廊,直线偏差从±5厘米降到了±2厘米;而且代码也变小了,删了些没用的东西后,从8MB瘦到4MB,加载速度提高了大约30%。 至于其他功能嘛,跟原版gmapping基本一致。它还是输出那种Occupancy Grid Map类型的地图;还是能估计机器人的位姿x、y、theta;还是支持ROS Kinetic系统,只要你输入一条catkin_make指令就能编译起来;发的话题和收的主题都跟以前一模一样,上层节点根本不用改。 想试试怎么上手?环境准备上很简单:ROS版本用Kinetic,Ubuntu系统也得是16.04,你拿个TX2或者普通电脑都能跑。操作步骤更简单:把功能包复制到工作空间的src目录里,输入那一串指令就能启动:cd catkin_ws,接着catkin_make一下,最后roslaunch my_slam_gmapping.launch。 如果你用的是其他版本的ROS也没关系,自己建个包手动复制文件就行,原理都差不多。启动之后默认就会听/scan话题的消息,发/map和/odom的话题。 最后说一句很重要的事:代码我都上传到GitHub上去了!点下面的链接就能直接下载最新版。以后要是有更新我也会同步推送上去,大家也可以顺手给个Star、Fork一下或者提个Issue给我提提意见。