一个雷达数据Bug引起的Karto SLAM建图混乱

在使用Karto SLAM进行地图构建时,遇到机器人位置被错误修正的问题,导致地图构建异常。通过调整雷达数据处理方式,将无效值设为无穷大,解决了scan_matching错误匹配及地图点云异常遗留的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在测试一款新的雷达,跑gmapping和cartographer都没有遇到问题,但是在跑Karto的时候出现无法正常建图,具体表现就是机器人运动一小段距离后就会在地图上都会被“拉回”到地图原点附近,如下图,建图效果一片稀烂,相同配置文件在思岚A1下是可以正常运行建图的。
在这里插入图片描述
既然是机器人实际位置在不断错误的被修正,首先怀疑的当然是scan_matching出了问题,关掉karto中的use_scan_matching选项,设置为false,再跑一下,图是好了点,但是奇怪的是机器人走过的位置都留下了零零散散的点,如下图,看起来就像边走边下蛋一样,绿色的线条是机器人大概的运行轨迹,可以看到图中机器人经过的位置留下了一堆点,连起来差不多就是机器人运行的轨迹了。
在这里插入图片描述其实到这里问题应该已经很清晰,然而我当时已经花了数小时来测试和思考这个问题,所以大脑基本浆糊了,直到晚上十一点多才想起来打印雷达数据看一下,截取一段,大概是这样的,可以看到,ranges数组中出现了大量的0.0的值,这样一来多有问题都能解释通了,机器人被不断的拉会原地,是因为这一堆0.0的值让scan_match做出了错误的判断,机器人经过的地方留下了点,是因为雷达给出的数据中机器人雷达中心位置就是有障碍的。
在这里插入图片描述
检查雷达驱动代码,将没有实际意义的值修改为无穷大,即 std::numeric_limits::infinity();编译后重新运行,一切正常,既不乱match了,也不边走边下蛋了。在这里插入图片描述
到这里问题也就解决了,中间走了很多弯路,因为来打在gmapping和cartographer以及用于导航时候是没有问题的,所以先是调整scan_match相关参数,最后才从机器人经过的位置留下的一堆点中找到了灵感,怀疑起了雷达数据问题,回头想想,如果scan_match中忽略掉0.0值或者小于某个阈值的值,这个问题也一样暴露不出来的。
经过测试,有一些品牌的雷达也存在相同的问题,例如LG的雷达,而思岚和EAI对于未测量到的点都是设置为无穷大,目前不清楚ROS下对雷达数据数组中没有测量到的点应该怎么样处理有没有规范,个人觉得应该是设置为无穷大更合理,至少不会像设置为0.0那样,让很多点聚集在雷达的中心点。
好啦,我要去diss一下雷达原厂的工程师去了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值