Self-supervised Learning of LiDAR Odometry for Robotic Applications ICRA 2021
苏黎世联邦理工学院机器人系统实验室, 马克斯·普朗克学习系统中心,德国/瑞士
视频链接: https://www.bilibili.com/video/av287853798
代码链接: https://github.com/leggedrobotics/DeLORA
论文链接:https://arxiv.org/pdf/2011.05418.pdf
基于激光雷达的里程计已经有很多了, 包括传统几何方法(suma,loam)以及深度学习的方法(LO-net, deepLO等), 其中深度学习的方法又包括有监督和无监督两种.
但是,现有激光里程计都是基于自动驾驶场景的,而本文工作致力于提升激光里程计在通用场景下的泛化性, 如履带机器人、行走机器人等。此外,在网络的inference阶段不需要数据预处理(提取法向量等),网络小而轻(参数量10^7),可以运行在移动平台的CPU上。
无监督方法, 不需要真值标签,仅用了两个几何损失就达到了相当高的精度(超越现有无监督方法,加入建图模块后超越了无监督视觉里程计),说明了该基于法向量的几何损失的有效性。
论文方法:
网络输入:前后两帧点云的柱面投影, 四通道图像,(x,y,z,r),r表示深度。同时还有预先计算好的法向量(PCA特征分解)。
网络结构:conv + 8 * resnet blocks, 降采样使用circular padding,而不是zero padding
网络输出:四元数 + 平移量
损失函数:
通过计算两帧点云的对应点之间的点云误差和法向量误差。首先需要指导两帧点云之间的对应点关系:
根据预测的相对位姿将一帧点云转换到另一帧上,在3D空间使用KD树搜索得到对应点关系。(基于scipy实现)
- point to plane loss:
L p 2 n = 1 n k ∑ b = 1 n k ∣ ( s ^ b − s b ) ⋅ n b ∣ 2 2 \mathcal{L}_{\mathrm{p} 2 \mathrm{n}}=\frac{1}{n_{k}} \sum_{b=1}^{n_{k}}\left|\left(\hat{s}_{b}-s_{b}\right) \cdot n_{b}\right|_{2}^{2} Lp2n=nk1b=1∑nk∣(s^b−sb)⋅nb∣22
n是法向量,sb是点云。
没有对应法向量的点不参与计算。 - Plane-to-Plane Loss:
对应点之间可能不是完全重合,但是其法向量应该是同向的:
L n 2 n = 1 n k ∑ b = 1 n k ∣ n ^ b − n b ∣ 2 2 \mathcal{L}_{n 2 n}=\frac{1}{n_{k}} \sum_{b=1}^{n_{k}}\left|\hat{n}_{b}-n_{b}\right|_{2}^{2} Ln2n=nk1b=1∑nk∣n^b−nb∣22 - 总损失:
The final loss is then computed as L = L p 2 n + L n 2 n \text { The final loss is then computed as } \mathcal{L}=\mathcal{L}_{p 2 n}+\mathcal{L}_{n 2 n} The final loss is then computed as L=Lp2n+Ln2n
最后作者为了优化里程计误差,还实现了一个map模块,但是论文中没有提到,在实验环节出现了。(估计在appendix中有说明)
实验结果:
作者在多个数据集上进行了测试:ANYmal: Autonomous Exploration Mission; B. DARPA SubT Challenge Urban Circuit;KITTI: Odometry Benchmark。
这里仅展示在KITTI的结果:
对两个损失的消失实验: