制图师调整参数
据制图员_ros文档翻译
制图员是一个复杂的系统,调整它需要很好地了解其内部工作。本页试图直观地总结制图师使用的不同子系统及其配置值。如果你不仅仅是对制图员的介绍感兴趣,你也应该参考一下制图员论文。它只描述了2D SLAM,但是它严格定义了这里描述的大多数概念。这些概念通常适用于3D。
W.Hess,D. Kohler,H. Rapp和D. Andor,2D激光雷达SLAM中的实时环路闭合,机器人与自动化(ICRA),2016 IEEE国际会议。IEEE,2016。第1271–1278页。
制图员可视为两个独立但相关的子系统。第一个是LocalSLAM(有时称为前端或局部轨迹生成器)。它的工作是构建一系列子图。每个子图都是局部一致的,但是我们接受LocalSLAM随时间漂移。可以找到install _ isolated/share/cartoon/configuration _ files/trajectory _ builder _ 2D。Lua是2d和install _ isolated/share/cartoon/configuration _ files/trajectory _ builder _ 3D。Lua是3d的。(在本页的其余部分,我们将把trait _ builder _ nd称为一个公共选项。)
另一个子系统是全局SLAM(有时称为后端)。它运行在后台线程中,主要工作是寻找循环约束。它是通过扫描匹配子图来实现的。它还结合其他传感器数据来获得更高层次的视图,并确定最一致的全局解决方案。在3D中,它还试图找到重力的方向。它的大部分选项都可以在install _ isolated/share/carto grapher/configuration _ files/pose _ graph . Lua中找到。
在更高的抽象层次上,LocalSLAM的工作是生成好的子图,而global SLAM的工作是最一致地组合它们。
测距传感器(如激光雷达)提供多个方向的深度信息。但是,有些测量与SLAM无关。如果传感器部分被灰尘覆盖或者如果它被引导到机器人的一部分,一些测量的距离可以被认为是SLAM的噪声。另一方面,一些最远的测量也可能来自不需要的源(反射、传感器噪声),并且与SLAM无关。为了解决这些问题,制图师首先应用带通滤波器,并且仅将范围值保持在某个最小和最大范围之间。应根据机器人和传感器的规格选择最小值和最大值。
注意
在2D,制图师将改变轨迹_构建器_ 2d的范围。Missing _ data _ ray _ length超过最大范围。它还提供了将3D点云过滤为2D切割的max_z和min_z值。
注意
在制图员配置文件中,每个距离都以米为单位定义。
距离是在一段时间内测量的,机器人实际上是在移动的。然而,距离是由大ROS消息中的“批次”传感器提供的。制图员可以独立考虑每条消息的时间戳,以考虑机器人运动造成的失真。制图员的测量频率越高,就越能更好地将测量结果组合成可立即捕捉的单一相干扫描。因此,强烈建议通过扫描提供尽可能多的范围数据(ROS消息)。
范围数据通常从机器人上的单个点测量,但是从多个角度测量。这意味着封闭的表面(如道路)经常被击中,并提供许多点。相反,远处的物体不经常被击中,提供的点数更少。为了降低点云处理的计算量,我们通常需要对点云进行降采样。但是,简单的随机采样会从已经有低密度测量值的区域中移除点,而高密度区域仍然会有比所需更多的点。为了解决这个密度问题,我们可以使用体素过滤器将原始点下采样到一个大小不变的立方体中,并且只保留每个立方体的质心。
较小的立方体大小将导致更密集的数据表示,这将导致更多的计算。较大的多维数据集会导致数据丢失,但速度会更快。
在应用固定大小的体素过滤器后,制图员还应用了自适应体素过滤器。该过滤器试图确定最佳体素尺寸(在最大长度)以实现目标点数。在3D中,两个自适应体素过滤器用于生成高分辨率和低分辨率的点云,它们的使用将在LocalSLAM中阐明。
惯性测量单元可以是SLAM的有用信息源,因为它提供了重力(因此是地面)的精确方向以及机器人旋转的嘈杂但良好的总体指示。为了过滤IMU噪声,对重力进行了一定时间的观测。如果您使用2D SLAM,您可以实时处理范围数据,而无需额外的信息源,因此您可以选择是否让制图员使用IMU。使用3D SLAM,需要提供IMU,因为它作为扫描方向的初始猜测,大大降低了扫描匹配的复杂度。
注意
在制图仪配置文件中,该值每次都以秒为单位定义。
一旦从多个范围的数据中扫描、组合和过滤,您就可以为LocalSLAM算法做准备了。LocalSLAM使用来自姿态估计器的初始估计,通过扫描匹配将新扫描插入到其当前子图构造中。姿态估计器背后的思想是使用除测距仪之外的其他传感器的传感器数据来预测子图在下一次扫描中应该插入的位置。
有两种扫描匹配策略:
无论哪种方式,CeresScanMatcher都可以配置为给每个输入一个特定的权重。权重是对数据信任度的度量,可以看作是静态协方差。重量参数的单位是无量纲量,不能相互比较。数据源的权重越大,制图师在扫描和匹配时就越重视这个数据源。数据来源包括占用空间(扫描点)、姿态外推器(或RealTimeCorrelativeScanMatcher)的平移和旋转。
注意
在3D中,占位_空间_重量_0和占位_空间_重量_1的参数分别与高分辨率和低分辨率的过滤点云相关。
CeresScanMatcher得名于Ceres Solver,以Google为库求解非线性最小二乘问题。扫描匹配问题被建模为问题的最小化,其中两次扫描之间的运动(变换矩阵)是待确定的参数。Ceres使用下降算法来优化给定迭代次数的运动。Ceres可以根据自己的需求进行配置调整收敛速度。
RealTimeCorrelativeScanMatcher可以根据你对传感器的信任程度进行切换。其工作原理是在搜索窗口中搜索相似扫描,搜索窗口由最大距离半径和最大角度半径定义。在此窗口中使用扫描执行扫描匹配时,可以为平移和旋转分量选择不同的权重。例如,如果你知道机器人不会旋转太多,你可以使用这些重量。
为了避免在每个子图像中插入太多的扫描,一旦扫描匹配器发现两次扫描之间的运动,它将通过运动过滤器。如果引起它的运动不够重要,扫描将被删除。只有当扫描的运动高于某个距离、角度或时间阈值时,才会将扫描插入到当前子图中。
当本地SLAM已经接收到给定数量的范围数据时,认为子图构建完成。LocalSLAM会随时间漂移,GlobalSLAM就是用来解决这个漂移问题的。子图必须足够小,使得子图内部的漂移低于分辨率,这样子图才是局部正确的。另一方面,子图应该足够大,以便循环闭包能够正常工作。
子图可以在几种不同的数据结构中存储它们的范围数据:最广泛使用的表示方法称为概率网格。然而,在2D,你也可以选择使用截断的有符号距离场(TSDF)。
概率格网将空间划分为2D表或3D表,其中每个像元都有固定的大小,包含被障碍物占据的概率。根据“命中”(测量范围数据)和“未命中”(传感器和测量点之间的自由空间)更新赔率。命中和未命中可以计算占用概率中不同的权重,给予或多或少的信任。
在2D,每个子图中只存储一个概率网格。在3D中,两个混合概率网格用于扫描匹配性能。(术语“混合”仅指内部树数据表示,对用户来说是抽象的)
扫描匹配首先将低分辨率点云的远点与低分辨率混合网格对齐,然后通过将高分辨率点与高分辨率混合网格对齐来细化姿态。
注意
CartographerROS提供了一个用于可视化子图的RViz插件。您可以从编号中选择要查看的子图。在3D中,RViz只显示3D混合概率网格的2D投影(灰度)。RViz的左侧窗格提供了在低分辨率和高分辨率混合网格可视化之间切换的选项。
TODO:记录TSDF配置
当LocalSLAM生成其连续子图时,全局优化(通常称为“优化问题”或“稀疏姿态调整”)任务在后台运行。它的功能是重新排列子图,使它们形成一个连贯的全局图。例如,优化负责改变当前构建的轨迹,以正确对齐关于循环闭合的子图。
一旦插入了一定数量的轨迹节点,优化将分批运行。根据运行它的频率,您可以调整这些批处理的大小。
注意
设置pose _ graph。optimize _ every _ n _ nodes为0是禁用全局SLAM并专注于局部SLAM行为的便捷方式。这通常是调整制图员的第一件事。
全局SLAM是“GraphSLAM”的一种,本质上是一种姿态图优化。它的工作原理是在节点和子图之间构建约束,然后优化约束图。约束可以直观地看作是将所有节点捆绑在一起的小绳子。稀疏的姿态调整完全固定了这些绳索。生成的网络称为“姿势图”。
注意
约束可以在RViz中可视化,调整全局SLAM非常方便。您还可以切换pose _ graph . constraint _ builder . log _ matches,以获得直方图格式的约束生成器的常规报告。
注意
事实上,全局约束不仅可以在单个轨迹上找到循环闭包。它们还可以对齐多个机器人记录的不同轨迹,但我们将保留这种用法以及与全局定位相关的参数,这超出了本文的范围。
为了限制约束(和计算)的数量,制图师只考虑构建约束的所有闭合节点的子采样集。这由采样速率常数控制。采样太少的节点可能会导致错过约束和无效的循环闭包。对太多节点进行采样会降低全局SLAM的速度,并阻止实时环路关闭。
当考虑节点和子图建立约束时,它们将通过名为FastCorrelativeScanMatcher的第一个扫描匹配器。扫描匹配器是专门为制图员设计的,可以实现实时闭合扫描匹配。在FastCorrelativeScanMatcher中,我们依靠“分支定界”机制在不同的网格分辨率下工作,有效地消除了不正确的匹配数字。在本文前面介绍的制图文章中广泛介绍了这种机制。适用于深度可控的勘探树。
一旦FastCorrelativeScanMatcher有了足够好的建议(高于最低匹配分数),那么就输入到Ceres扫描匹配器来改进姿势。
Ceres用于在制图员运行优化问题时根据多个残差重新排列子图。使用加权损失函数计算残差。全局优化有一个代价函数来考虑大量数据源:全局(循环闭合)约束、非全局(匹配器)约束、IMU加速度和旋转测量、局部SLAM粗略姿态估计、测距源或固定框架(如GPS系统)。您可以配置权重和Ceres选项,如LocalSLAM部分所述。
注意
通过切换,可以找到优化问题中使用的残差的有用信息:pose _ graph。最大数量最终迭代次数。
作为其IMU残差的一部分,优化问题为IMU姿态提供了一定的灵活性。默认情况下,Ceres可以自由优化IMU和跟踪框架之间的外部校准。如果你不相信你的IMU姿态,你可以记录Ceres全局优化的结果,并用它来改善你的外部校准。如果Ceres没有正确优化您的IMU姿态,并且您完全信任您的外部校准,您可以保持这个姿态不变。
在残差中,异常值的影响通过具有Huber标度的Huber损失函数来处理。Huber标度越大,(潜在)异常值的影响就越大。
一旦轨迹完成,制图师将运行一个新的全局优化,通常比以前的全局优化多得多。这样做是为了提高制图师的最终结果,通常不需要实时,因此大量迭代通常是正确的选择。