其实cartographer的地图更新,就是用新扫描的地图替换老地图,这里在加载老地图的时候,要加载TrajectoryState::FROZEN状态的地图,这样新地图就按照老地图为坐标系进行匹配和导航了。
cartographer里面自带的移除老地图的功能是考虑建图模式的情况,所以在导航模式时,我们不能任性移除老地图,因为这样会带来定位灾难(老地图可能因为移除局部而整体变形)
所以我们加载老地图的时候,加载模式为TrajectoryState::FROZEN状态,所以我们只要在结束导航的时候,自己写一个接口实现新老地图的比较然后移除老地图,保存新地图即可。(效果还可以哦)
talk is cheap , show my code
bool MapBuilder::SerializeStateToFileAfterUpdate(
bool include_unfinished_submaps,