(02)Cartographer源码无死角解析-(41) 2D栅格地图→ActiveSubmaps2D

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下:
(02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885
 
文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证 {\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证} 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX官方认证
 

一、前言

通过前面一系列的博客,PoseExtrapolator 进行了比较细致的分析。到目前为止,对于点云数据的预处理过程可以说时十分了解了,如:点云数据多传感器时间同步、运动畸变校正、重力校正、体素滤波等。做完这一系列的预备工作之后,实际上呢,就可以进行点云的扫描匹配了。

在讲解扫描匹配之前,先来看看 Cartographer 2D 的栅格地图,其不像3D点云地图有很多成熟的库可以调用,具有统一的标准。大多数 2D Slam 的栅格地图都是需要自己编写代码进行构建的。下面就来看看 Cartographer 中时如何构建的。

关于2D栅格地图的构建主要涉及到如下几个类,后续会分别对齐进行详细的讲解:

ActiveSubmaps2D

 

二、类间关系

先来看看源码中时如何把这些类,或者类对象关联起来的

1、ActiveSubmaps2D

在 LocalTrajectoryBuilder2D::AddAccumulatedRangeData() 函数中,可以找到如下代码:

  // 将校正后的雷达数据写入submap
  std::unique_ptr<InsertionResult> insertion_result = InsertIntoSubmap(
      time, range_data_in_local, filtered_gravity_aligned_point_cloud,
      pose_estimate, gravity_alignment.rotation());

该处对 InsertIntoSubmap() 函数的调用,起到了与类 ActiveSubmaps2D 的交互。因为 LocalTrajectoryBuilder2D::InsertIntoSubmap() 函数中,使用到类 LocalTrajectoryBuilder2D 的成员对象:

ActiveSubmaps2D active_submaps_;

该成员对象在 LocalTrajectoryBuilder2D 构造函数的初始化列表中被赋予初值,初始化列表可以看到如下代码:

active_submaps_(options.submaps_options())

其首先根据配置文件中的 submaps 信息,构建 ActiveSubmaps2D 对象,然后赋值给 active_submaps_。配置文件路径为:

src/cartographer/configuration_files/trajectory_builder_2d.lua
src/cartographer/configuration_files/trajectory_builder_2d.lua

2、Submap2D 与 Submap

在类

 
 
 

你可能感兴趣的:(机器人,Cartographer,增强现实,无人机,自动驾驶)