目的/用例
点云建图旨在根据传感器数据构建环境的 3D 点云图,该数据传达有关感知代理周围环境的 3D 信息,可以像激光雷达一样直接或间接(如 2D 视觉 SLAM 的情况)。
输入用例
在线数据
这是一个用例,其中地图是在车辆运行时构建的,收集数据并实时定位自身。在此用例中,点云建图旨在匹配来自在线数据源的测量值,这些数据源可能包括原始或处理过的传感器数据,并构建环境地图以进一步定位自身。
根据配准算法,建图器可以利用额外的定位源在映射过程中提供机器人姿态的初始估计。
在在线地图生成中,可能需要以下组件:
- 匹配的观测源。
- 辅助定位源。
输出格式如下:
- 每个匹配的输入消息变换/姿态。
- 地图文件。
- 关联的元数据文件。
关联的元数据文件可以包含给定地图的相关 earth -> map 变换,以及基于接收到的扫描、姿态估计和映射器当前系统时钟的时间戳的时间戳,具体取决于实现的时间戳策略。
离线数据
预录数据
另一个常见用例是重放与要映射的位置相关的预先记录的数据包。当使用预先记录的数据时,可以像在线数据一样进行点云建图。唯一的例外是建图器应该注意地图创建的实际时间与数据的时间原点不同。
离线运行映射开启了运行更大的优化算法以校正建图和匹配输入点云的可能性。
模拟数据
在某些情况下,模拟环境的地图可能无法直接获得,可能需要手动建图。在这种情况下,模拟器应该具有与在线数据相同的数据源。在这种映射模式下,如果模拟器提供地面实况数据,环境可以获得精确的映射。
输出用例
定位
建图器的匹配部分有效地用作本地化的在线源,因此可以满足定位设计文档中指定的定位器的输出用例。
或者,在创建和导出区域的准确地图(在线或离线)后,该地图可用于稍后在给定区域中实现相对定位,而无需从头开始绘制环境地图。
可视化
可视化点云地图可以有各种用例,包括调试或定性评估定位性能。
点云变换
为映射过程匹配的点云在匹配后转换为地图框。可以发布此数据来为需要地图框中数据的组件提供服务。此过程可以节省稍后由转换器节点重新转换原始点云的时间。
建模
环境地图可以用于定位或可视化以外的目的。环境的 3D 模型可用于许多领域,例如建筑、城市规划或建筑模拟和视频游戏。
要求
根据列出的用例,建图应满足以下功能:
- 将观察结果匹配 到正在进行的地图上。
- 通过将匹配的点云附加到地图中来扩展地图。
- 检测闭环并校正地图或轨迹表示。
- 触发地图导出标准后,将地图对象连同与之关联的任何元数据写入文件。
要求 2. 意味着将数据附加到容器。为了保持系统在内存中的可预测性和静态性,地图的容量应该是固定的和预先分配的。根据地图表示,可以使用像体素网格这样的结构来减少冗余或重叠点。
要求 4. 意味着定义地图创建策略以确定输出地图的内容和生成率。
要记住的另一件事是在传入的点云与原点偏离太多时防止标量溢出。在这种情况下,应移动地图框以保持与原点的偏移合理。
映射器应该是模块化和可配置的,以允许在实时在线配置和离线设置之间切换,配置对在线建图系统的运行时约束更宽松。
设计
输入
- 观测匹配
- 在 /tf 话题中的变换。
输出
- 匹配观测的变换/姿势。
- 变换更新放置地图框的位置。
- 转换后的点云。
- 实现定义格式的地图文件。
- 实现定义形式的元数据文件
- 将地图作为 PointCloud2 消息进行可视化。
内部运作
鉴于用例和要求,点云建图根据以下工作流程执行。
在前端:
- 为容器分配内存。
- 对于每个收到的观测:
- 验证消息。
- (可选)在此步骤中选择关键帧。
- 将其匹配到现有地图。
- 将匹配/重建的点云附加到轨迹/地图表示
- (可选)检查闭环:
- 退出回调。
- 执行轨迹修正。
- 检查出口标准:
- 退出回调。
- 导出地图。
- 验证消息。
- 发布地图和/或过程的副产品,例如匹配输出。
为了使地图创建灵活和可扩展,映射器应该允许以下结构和功能的灵活性和自定义:
- 输入类型
- 地图表示
- 轨迹表示
- 匹配
- 闭环检测
- 轨迹修正
- 输入预处理
- 输出后处理
- 地图导出
- 副产品处理