cartographer点云匹配时为什么要重力对齐?

AddAccumulatedRangeData里面的这行代码的含义

在这里插入代码片
  const transform::Rigid2d pose_prediction = transform::Project2D(
     non_gravity_aligned_pose_prediction * gravity_alignment.inverse());```

表面上只是重力对齐以后再处理,其实这里面还为后续的匹配与查找减轻了查找范围,因为* gravity_alignment.inverse()这一乘使得与上一帧数据的角度变化缩小了(基本是同一角度),所以为后面的ScanMatch节省了角度的查找范围

  pose_estimate_2d =
      ScanMatch(time, pose_prediction, filtered_gravity_aligned_point_cloud);

最后再把角度乘回来

  transform::Rigid3d pose_estimate =
     transform::Embed3D(*pose_estimate_2d) * gravity_alignment;

这样就实现了角度的估计。gravity_alignment上下是同一数值,只是为了减少计算量,那么我们把他们都去掉行不行呢?答案是不行
因为点云数据也按这个gravity_alignment做了处理,所以这一步看似简单的重力对齐,其实感觉还有一些文章在里面。

你可能感兴趣的:(2d_slam,深度学习,自动驾驶,计算机视觉)