最近优化了cartographer中scan_match的得分计算方案,记录一下:
cartographer原方案针对激光匹配地图时没有考虑相似地图区域的问题;
例如图1中黄色线表示的区域会被误匹配到图2中黄色线表示的区域,实际观察cartographer计算的图1、图2两个位置叶子节点得分也是较为相似的;
但图2中位置的激光信息实际应为红色线表示的区域,图3、图4为原图;
解决方案就是获取地图中某一位置的实际障碍物信息(模拟当前位置激光扫描一圈得到的障碍物信息),与实际的激光信息进行匹配计算就可以判断定位位置是否准确了。
注意事项:
1.fast_correlative_scan_matcher_2d.cc中的地图是概率地图,操作数据时需要注意判断障碍物的标准;
2.由于激光存在误差,记得对提取后的障碍物信息作膨胀处理;
我所使用的激光为70元左右的三角测距激光,应该是最便宜的一种激光了,并且激光数据未做任何处理,该方案效改善定位精度效果明显;
工作繁忙未给出具体代码,有时间再更新,欢迎大家讨论,看到了会回复。
图1 图2
图3 图4
定位正确的匹配效果:
定位错误的匹配效果: