cartographer的C++1.0的AddRangeData到submap和LBA过程

节点与submap

cartogrpher 在每一次添加节点的时候进行判断是否优化。cartogrpher 的全局优化算法在 sovle( 函数里面,在 PoseGraph2D::RunOptimization() 的判断 逻辑里面,调用堆栈到 AddNode 逻辑。

1. cartogrpher的AddNode与优化过程

2. range数据到submap的嵌入更新过程

cartographer并非使用3d或者视觉slam的经典poseLBA过程,而是通过网格优化来进行计算的。

range 数据添加过程: ros 端的数据添加,对接参考章节 1 Ros 端的数据添加过程。
Track 和定位: Track 过程参考章节 2 track 过程; Match real_time_correlative_scan_matcher _ . Match ceres_scan_matcher _ 过程。
submap 更新过程:使用了 votex 优化
时间分析 Filte 至多 消耗 1 毫秒之上, 1-2ms InsertIntoSubmap 可以消耗 18ms

3.优化过程

cartographer/mapping/internal/2d/local_trajectory_builder_2d.cc

std::unique_ptr<LocalTrajectoryBuilder2D::MatchingResult>
LocalTrajectoryBuilder2D::AddAccumulatedRangeData(
    const common::Time time,
    const sensor::RangeData& gravity_aligned_range_data,
    const transform::Rigid3d& gravity_alignment)
{
  if (gravity_aligned_range_data.returns.empty()) {
..............................
  std::unique_ptr<InsertionResult> insertion_result =
      InsertIntoSubmap(time, range_data_in_local, gravity_aligned_range_data,
                       pose_estimate, gravity_alignment.rotation());
........................
优化过程:
std::unique_ptr<LocalTrajectoryBuilder2D::InsertionResult>
LocalTrajectoryBuilder2D::InsertIntoSubmap(
    const common::Time time, const sensor::RangeData& rang..)
{
..................
 active_submaps_.InsertRangeData(range_data_in_local);
...................
const sensor::PointCloud filtered_gravity_aligned_point_cloud =
      adaptive_voxel_filter.Filter(gravity_aligned_range_data.returns);
....................}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值