一点Cartographer的调参心得:前端篇

2023-08-04 07:44:07 来源: 哔哩哔哩

上一篇文章介绍了 Cartographer 里和传感器有关系的参数调整(传感器篇),这次介绍一些前端部分里经常调的参数。


(资料图片)

Cartographer 前端部分比较简单,主要就是负责点云匹配和生成 Submap。

参数的配置文件是 trajectory_builder_。

调参整前端的参数之前,最好先关闭后端,方便观察参数调整后对建图的直接影响,可以将下面三个参数设置成 0 来关闭后端:

前端中最重要的一个参数就是 _range_data,这个参数决定了用多少帧点云来构造一副 Submap,取值非常有讲究,需要考虑到各个传感器的精度和运行平台的算力。通常可以直接考虑 30/60/90 三个值作为参数。

Submap 是基于图优化的 SLAM 算法的精髓,使用很多幅的 Submap 来构成一幅大地图,Submap 包含了若干个 Node,每个 Node 就是一帧点云。建图过程中的累计误差,就是通过后端的图优化算法调整每一副 Submap 的位姿来消除的,让整体地图形成最优。

_range_data 取值越小,每一副 Submap 内的累计误差就会越小,后端的参数调的合适,那最终得到的地图质量就是最好的。

我们可以从两个角度来考虑 _range_data 的取值,一个是累计误差,另一个是性能。

前端会带来累计误差的来源有两个,分别是点云匹配误差和传感器误差。

如果说传感器质量真的很差,会带来大量的误差,那最好把 _range_data 设置成 30,让前端生成尽可能多的 Submap,每一副 Submap 的累计误差尽可能少。但代价就是需要消耗更多内存,后端优化也会需要更多的算力,如果 CPU 性能不够,会让整个 SLAM 算法无法实时运行,建图和定位都出现延迟。如果传感器质量非常好,那可以毫不犹豫的把参数值设置成 90,既不影响建图质量,也能降低计算资源需求。

第二部分要介绍的是点云匹配器相关的参数,前端中有两个匹配器,一个是 Real Time Correlative Scan Match,另一个是 Ceres Scan Match。

Real Time Correlative Scan Match 是前端部分中的第一个匹配器,通过 use_online_correlative_scan_matching 来开关。在 Submap 构建的流程中该匹配器用于较大范围较粗略的搜索点云在 Submap 上的位置,目的是为了尽可能的消除传感器带来的错误。

在点云匹配前,carto 会利用先前的位姿加上 IMU 和里程计的角速度线速度来预测当前点云可能的位置,如果里程计和IMU的质量比较差,很可能会预测出错误的结果,导致第二个匹配器在有限的迭代步骤内无法匹配出正确的位姿,从而给 Submap 带来点云匹配的累计误差,这种因为匹配失败带来的误差是无法消除的,一旦插入了 Submap ,那就会永远出现在地图上了,看起来就是一面墙在地图上有两条黑线或者是很糊很厚。

在 IMU 和里程计的不可靠或者是没有这俩传感器的情况下最好打开 use_online_correlative_scan_matching 。RTCSM 匹配器的参数里,两个搜索窗口的参数是重点观察对象,real_time_correlative_scan__search_window 和 real_time_correlative_scan__search_window,这两个参数作用指定 RTCSM 在预测位置的平移半径和旋转角度范围内进行搜索,linear_search_window 的单位是米,angular_search_window 的单位是弧度。

设置这两个参数有一个比较直接好用的技巧,那就是先把两个值都设置的很大,例如 1 和 (90),然后修改 carto 的源码, 位置是 local_trajectory_builder_ 里的 AddAccumulatedRangeData 函数,把函数内的预测位姿 pose_prediction 和最终匹配位姿 pose_estimate_2d 都记录下来,建图完成后计算全部预测位姿和匹配位姿中的最大距离差和角度差,把这个差值作为两个搜索窗口的参数值。

如果IMU和里程计都非常可靠,精度非常高,预测位姿和匹配位姿的差很小很小,可以尝试关闭 RTCSM 匹配器,节约计算资源。当搜索窗口设置的太大的时候,会消耗大量的内存和算力,如果运行平台的性能无法支撑,可以考虑关闭 IMU 和 里程计数据的输入,只用激光雷达,同时保证机器人移动的尽可能慢和平滑,只有激光雷达的情况下 carto 会假设机器人是匀速移动,使用先前的两个匹配位姿计算预估位姿。

未完待续,等有空再更新

标签:

[责任编辑:]

最近更新