Abstract
我们提出了一种轻量的, ground-optimized的lidar里程计和建图方案.
是ground-optimized, it leverages the presence of a ground plane in its segmentation and optimization step.
我们首先用点云分割来滤出噪声, 特征提取来获得有区分度的 planar / edge 特征.
一个two-step LM优化.
我们用LeGO-LOAM和LOAM比较, 发现LeGO获得了类似或者更好的精度, 但是计算力少.
1. Introduction
视觉办法在loop detection上有优势.
lidar在晚上也能工作. 一个经典的办法是ICP. 当点很多的时候, ICP的计算力需求很大. 有很多ICP的变种来提升它的效率. [3]使用了point-to-plane的ICP. [4] Generalized-ICP提出了两个scan的平面匹配.
Feature-based方法也得到了更多关注. 这些特征需要适合高效的匹配, 而且对视角有不变性. 很多detector, 比如Point Feature Histograms (PFH)和Viewpoint Feature Histograms(VFH)被提出. 一个提取一般目标的特征方案用Kanade-Tomasi角点在[11]中被引入. [12]提出了提取线和面特征.
很多用点云注册的方案也被提出了. [13]和[14]用点在局部的cluster计算的曲率来提特征点. [15]选择了有高曲率的点, 假设场景都是充满平面的. [16] 假设环境是由平面组成的, 用了plane-based registration的方法. 室外环境比如森林会限制它的应用.
[18]提出了segmentation-based registration方案. SegMatch是第一个用点云分割的. 一个特征vector会用每个segment的eigenvalue和shape histograms来计算. 随机森林会被用来匹配. 虽然它能提供在线的位姿估计, 但是只能1Hz.
一个低漂移的实时lidar里程计和建图方案(LOAM)在[19], [20]中被提出. LOAM做了point feature to edge/plane scan-matching来找scan之间的匹配. 特征在点和它的领域的roughness来计算. 有很高roughness度的特征是edge. 类似的, 有低roughness的点是planar feature. 实时的表现是通过把估计分体分成两块来做的. 一个算法跑高频率, 并且以低精度估计传感器速度. 另一个传感器跑低频率, 以高精度估计移动. 最后融合.
lightweight and ground-optimized (LeGO-LOAM).
- 平面feature会用来获得\([t_z, \theta_{roll}, \theta_{pitch}]\).
- 剩下的平移\([t_x, t_y, \theta_{yaw}]\)通过匹配edge特征来获得。
我们同时也集成了回环的能力。
2. System Hardware
VLP-16可以测100m,误差+-3cm. vertical FOV(30°)。horizontal FOV 360°。16线的resolution是2°。 horizontal angular resolution是0.1°到0.4°(根据旋转速度)。
在这个paper里,scan rate是10Hz,angular resolution是0.2°。
3. LightWeight LiDAR Odometry and Mapping
A. System Overview
B. Segmentation
\(P_t\) 是在\(t\)时刻的点云. \(P_t\)会首先被投影到一个range image. 被投影的range image的精度是1800x16. 每个点云就变成了一个像素. value \(r_i\)就是欧氏距离。 因为倾斜的地形(sloped terrain)很常见,我们不会假设地面是平的。用了【22】里的column-wise evaluation,也就是ground plane estimation。在这个处理之后,代表地面的电晕就不会用来分割了。
用了基于图像的segmentation【23】来把range image clusters。来自一个cluster的点被assign一个label。
假设机器人的场景是充满噪声的。e.g. 树叶就是琐碎而不可依赖的特征。我们会忽略少于30个点的cluster。
C. Feature Extraction
特征提取的过程跟【20】类似。但是,不是在raw point cloud中提取,我们从ground points和segmented points里提取。
\(c=\frac{1}{|S| \cdot\left\|r_{i}\right\|}\left\|\sum_{j \in S, j \neq i}\left(r_{j}-r_{i}\right)\right\|\)
为了平均的从各个方向来提取特征。我们把图像horizontally分为几个子图。然后我们把子图的每一行根据它的roughness排序。跟LOAM类似,我们用一个阈值\(c_{th}\)来区分。比阈值小的\(c\)就是平面特征。这样就有\(n_{\mathbb{F}_e}\)个edge特征点。我们把360°的range image分为6个子图。每个子图的分辨率是300x16.\(n_{F_{e}}, n_{F_{p}}, n_{\mathbb{F}_{e}},\) and \(n_{\mathbb{F}_{p}}\)分别是2,4,40,80.
D. Lidar Odometry
两个scal的平移是通过point-to-edge和point-to-plane的scan匹配。也是跟【20】一样。
但是我们也注意到一些提升。
1)Label Matching
没啥东西。
2) Two-step L-M Optimization
在【20】里,一系列的非线性表达式(edge和平面点的距离)被编译到一个单一的comprehensive distance vector.然后用LM来找到最小距离。
我们引入了一个2-step LM优化。
- \([t_z,\theta_{roll}, \theta_{pitch}]\) 使用平面做的。
- \([t_x, t_y, \theta_{yaw}]\) 是用edge做的,然后把z, roll, pitch作为约束。最后融合这6个自由度。我们认为这个两步走可以减少计算时间达35%。
E. Lidar Mapping
lidar mapping模块匹配特征(当前的,和点云图)来refine pose,但是是在很低的频率。这里也用了LM。
主要的区别是final点云图的存储。我们不是存储单个点云图,而是存每个特征组\(\{ \mathbb{F^t_e, \mathbb{F}^t_p} \}\)。
我们也可以集合pose-graph到LeGO里,然后调整位子。
4. Experiment
A. Small-scale UGV Test
5. Conlusions and Discussion
没啥。