其实cartographer的地图更新,就是用新扫描的地图替换老地图,这里在加载老地图的时候,要加载TrajectoryState::FROZEN状态的地图,这样新地图就按照老地图为坐标系进行匹配和导航了。
cartographer里面自带的移除老地图的功能是考虑建图模式的情况,所以在导航模式时,我们不能任性移除老地图,因为这样会带来定位灾难(老地图可能因为移除局部而整体变形)
所以我们加载老地图的时候,加载模式为TrajectoryState::FROZEN状态,所以我们只要在结束导航的时候,自己写一个接口实现新老地图的比较然后移除老地图,保存新地图即可。(效果还可以哦)
talk is cheap , show my code
bool MapBuilder::SerializeStateToFileAfterUpdate(
bool include_unfinished_submaps,
本文探讨了Cartographer中如何实现地图更新,强调在导航模式下保持老地图以避免定位问题。通过设置TrajectoryState::FROZEN状态加载旧地图,并在导航结束后自定义接口删除旧地图并保存新地图,解决了地图更新的问题。分享了TrimSubmapIdByManual和TrimBeforeUpdate两个关键函数的使用,以及在保存地图时的注意事项,使得SLAM系统具备了地图更新功能,减少了重复建图的需求。
订阅专栏 解锁全文
1722

被折叠的 条评论
为什么被折叠?



