实现原理:
- 在纯定位时,检测当前Trajectory和之前的Trajectory的匹配状态(约束的匹配情况),对于变化大的子图,在其区域添加新的子图,对于完全变化的区域,移除其子图。
- 在前端可以写个定时保存功能;
- 对于原地图和添加子图部分,我选择了对2者进行合并,合并的方式就是先找到原先地图最后submap的index,然后在后面把新增的submap加上去。
定义几个重要变量
struct ConstraintData{
int total_num;/*whole data try to match*/
int valid_num/*valid match*/;
};
//用于显示当前导航时,地图与原有地图的匹配情况
MapById<SubmapId, ConstraintData> constraints_in_nav_submaps;
//MapById<SubmapId, int> all_constraints_in_submap;
//MapById<SubmapId, ConstraintData> constraints_in_map_submaps;
//patch submap for environment change;
//用于保存与原有地图变化大的子图
MapById<SubmapId, ConstraintData> constraints_in_patch_submaps;
//around patch submap for environment change;
//这个变量很重要,保存的是constraints_in_patch_submaps左右两边的子图,为什么?它的作用是把constraints_in_patch_submaps通过约束固定住,并纠正回来。
MapById<SubmapId, ConstraintData> constraints_around_patch_submaps;
环境变化之前
对变化区域添加子图,状态截图
对于单台车,这样一边运行,一边对动态环境进行子图优化
2022-11-16更新:代码已上传update_map分支,有bug,先下架
2022-11-23更新:连续测试一周,暂时ok,运行中误差不超过2cm,可以自动纠正,代码已上传update_map分支
评论(0)
您还未登录,请登录后发表或查看评论