cartographer从入门到精通 cartographer

Cartographer调参 技术标签:Cartographer
根据Cartographer_ros文档翻译
Cartographer是一个复杂的系统,调整它需要很好地理解其内部工作 。此页面试图直观地概述Cartographer使用的不同子系统及其配置值 。如果您对Cartographer的介绍不仅仅感兴趣,还应参考Cartographer论文 。它仅描述了2D SLAM,但它严格定义了此处描述的大多数概念 。这些概念通常也适用于3D 。
W. Hess, D. Kohler, H. Rapp, and D. Andor,Real-Time Loop Closure in 2D LIDAR SLAM , inRobotics and Automation (ICRA), 2016 IEEE International Conference on . IEEE, 2016. pp. 1271–1278.
Cartographer可以看作是两个独立但相关的子系统 。第一个是 LocalSLAM (有时也称为 前端 或 局部轨迹构建器 ) 。它的工作是建立一系列 子图。每个子图都是本地一致的,但我们接受LocalSLAM随着时间的推移而漂移 。大多数地方SLAM选项中可以找到 install_isolated/share/cartographer/configuration_files/trajectory_builder_2d.lua为2D和 install_isolated/share/cartographer/configuration_files/trajectory_builder_3d.lua 为3D 。(对于本页的其余部分,我们将参考TRAJECTORY_BUILDER_nD作为常用选项)
另一个子系统是 全局SLAM (有时称为 后端 ) 。它在后台线程中运行,其主要工作是找到 回环约束。它通过对子图的扫描匹配来实现 。它还结合了其他传感器数据,以获得更高级别的视图,并确定最一致的全局解决方案 。在3D中,它还试图找到重力方向 。它的大多数选项都可以在 install_isolated / share / cartographer / configuration_files / pose_graph.lua中找到 。
在更高的抽象上,LocalSLAM的工作是生成良好的子图,而全局SLAM的工作是将它们最一致地结合在一起 。
测距传感器(例如:LIDAR)提供多个方向的深度信息 。但是,有些测量与SLAM无关 。如果传感器部分被灰尘覆盖或者如果它被引向机器人的一部分,则一些测量距离可被视为SLAM的噪声 。另一方面,一些最远的测量也可能来自不需要的源(反射,传感器噪声),并且也与SLAM无关 。为解决这些问题,Cartographer首先应用带通滤波器,并仅将范围值保持在某个最小和最大范围之间 。应根据机器人和传感器的规格选择最小值和最大值 。
注意
在2D中,Cartographer将比max_range更换范围 TRAJECTORY_BUILDER_2D.missing_data_ray_length。它还提供了将3D点云过滤为2D切割的值 max_z 和 min_z 值 。
注意
在Cartographer配置文件中,每个距离都以米为单位定义
距离是在一段时间内测量的,而机器人实际上正在移动 。但是,距离是由大型ROS消息中的“批量”传感器提供的 。Cartographer可以独立考虑每个消息的时间戳,以考虑机器人运动引起的畸变 。Cartographer进行测量频率越高,测量结果组合成一个可以立即捕获的单个相干扫描就越好 。因此,强烈建议通过扫描提供尽可能多的 rangedata (ROS消息) 。
Rangedata通常从机器人上的单个点测量,但是以多个角度测量 。这意味着靠近的表面(例如道路)经常被击中并提供许多点 。相反,远处的物体不常被击中并且提供较少的点数 。为了减少点处理的计算权重,我们通常需要对点云进行下采样 。然而,简单的 随机抽样 将从我们已经具有低密度测量的区域移除点,并且高密度区域仍将具有比所需更多的点 。为了解决这个密度问题,我们可以使用一个 体素滤波,将原始点下采样为一个恒定大小的立方体,并只保留每个立方体的质心 。
较小的立方体大小将导致更密集的数据表示,从而导致更多计算 。较大的立方体大小会导致数据丢失,但会更快 。
在应用了固定尺寸的体素滤镜后,Cartographer还应用了 自适应体素滤镜。此过滤器尝试确定最佳体素大小(在最大长度下)以实现目标点数 。在3D中,两个自适应体素滤波器用于生成高分辨率和低分辨率点云,它们的使用将在 LocalSLAM中 阐明 。
惯性测量单元可以是SLAM的有用信息源,因为它提供精确的重力方向(因此,地面)和机器人旋转的嘈杂但良好的整体指示 。为了过滤IMU噪声,在一定时间内观察到重力 。如果您使用2D SLAM,则可以实时处理范围数据而无需额外的信息来源,因此您可以选择是否要让Cartographer使用IMU 。使用3D SLAM,您需要提供IMU,因为它用作扫描方向的初始猜测,大大降低了扫描匹配的复杂性 。
【cartographer从入门到精通 cartographer】 注意
在Cartographer配置文件中,每次定义值都以秒为单位
一旦扫描组装并从多个范围数据中过滤,就可以为LocalSLAM算法做好准备 。LocalSLAM 使用来自 位姿估计器 的初始估计通过 扫描匹配 将新扫描插入其当前子图构造中 。位姿估计器背后的想法是使用除测距仪之外的其他传感器的传感器数据来预测下一次扫描应该插入子图的位置 。

秒懂生活扩展阅读