关于cartographer的回环的一些理解

在cartographer中,constraints表示计算出的node到submap(与node有关的且已经finished的)原点之间的约束,在代码里在pose_graph_2d.cc与pose_graph_3d.cc中ComputeConstraint函数中实现:

  • 当在同一条trajectory上时,即初次建图时,始终以add_local的方式添加。
  1. add_local会进行筛选,筛选方式为node与submap原点的距离小于阈值(默认为15米),且不被采样率略过,并且Match的分数高于min_score,具体的参数为POSE_GRAPH.constraint_builder.sampling_ratio和POSE_GRAPH.constraint_builder.max_constraint_distance和POSE_GRAPH.constraint_builder.min_score;
  2. add_local会使用位姿初值,此处的初值即前端(LocalSlam)得来的;
  3. 关于第一点,为何不用是否在submap范围以内进行筛选而使用距离,我认为是因为在submap外部亦可得出与submap的grid地图匹配分数较高的constraint,这就好比远处和近处看同一个事物,亦可得出其是同一个事物的结论。
  • 当不在同一条trajectory上时(即利用已有地图进行定位时),add_local与add_global同时作用。
  1. 首先判断是否在POSE_GRAPH.global_constraint_search_after_n_seconds内,如果在时间内则add_local,否则继续判断是否被采样率(POSE_GRAPH.global_sampling_ratio)略过,如果不略过则add_global;
  2. add_global则进行MatchFullSubmap,高于POSE_GRAPH.constraint_builder.global_localization_min_score的则add成功;

关于优化optimization:

  1. 当新增的node超过POSE_GRAPH.optimize_every_n_nodes时,则开始optimize;
  2. 这里注意,一个node可能有很多个constrains(constraints为每一个node与每一个finished的submap进行match计算得出的约束),因为一个node可能与多个submap相关;
  3. LocalSlam给PoseGraph带来的是node和node的点云所插入的两个active的submap(LocalSlam始终只维护两个submap),在PoseGraph里判断如果submap的状态为finished后,则加入到计算约束的行列中。

关于optimization_problem:

(待补充)

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值