留个笔记自用
Self-supervised Learning of LiDAR Odometry for Robotic Applications
做什么
Lidar Odometry激光雷达里程计,里程计作为移动机器人相对定位的有效传感器,为机器人提供了实时的位姿信息。移动机器人里程计模型决定于移动机器人结构和运动方式,即移动机器人运动学模型。
简单来说,里程计是一种利用从移动传感器获得的数据来估计物体位置随时间的变化而改变的方法
用建图的方式来理解,要实现机器人的定位与导航,就需要知道机器人走了多远,往哪走,也就是初始位姿和终点位姿,只有知道了里程计,才能准确将机器人扫描出来的数据进行构建。
做了什么
这里提出的方法是自监督学习的方法,不需要标注数据集,可以应用在各种数据集应用上
怎么做
整体框架的输入是一个连续的点云序列Sk∈Rnk×3和Sk-1∈Rnk-1×3,输出需要的是两帧的转换矩阵Tk-1,k∈SE(3)也就是
接下来是网络具体结构
首先也是对点云数据的输入处理,这里列举了几种处理方式,比如投影啊,体素(voxel)之类的,但最终还是选择了投影成2D图像的方式
这里没有展示具体的投影计算公式,仅做了文字说明图像的坐标(u,v)是通过在球面坐标中离散方位角和极角来计算的,最后得到点云的完全投影图像I
然后就是特征提取和特征处理层
在这里不是孪生输入图像,而是把两张投影图堆叠在一起后输入后面层,粉色模块是卷积层,棕色模块是最大池化层,蓝色模块是Resnet的残差块
然后是特征聚合和目标输出层
这里的绿色模块是自适应平均池化(AdaAvgPool)层,橙色模块是MLP,最后分为两分支,分别预测需要的输出平移向量t∈R3(其实三维向量就足够了)和旋转矩阵q∈R4(四元数),组成转换矩阵T
最后是自监督的LOSS,最值得设计和关注的地方
这里的LOSS由两个组成,第一个loss是Point-to-Plane Loss Lp2n,第二个loss是Plane-to-Plane Loss Ln2n,这两个loss的计算方法都是基于自监督的方式。
模型得到的转换矩阵是Tk-1,k,往往得不到这个矩阵的label,这里采用的方式是对源帧即t-1帧的点云集进行模拟转换
这里的S是点云集,N是法向量集
希望的是网络能根据序列生成转换矩阵Tk-1,k以满足用当前情况下这个T去转换源点云,转换得到的新点云S^和法向量集N ^能尽量接近真实情况(这里也是输入数据,所以是一个自监督的过程)
首先是Lp2n
这里的sb是目标点云即t帧点云中的某一点坐标,而sb^是由源点云中的同一点,经过模型预测得到的转换矩阵T进行转换得到,也就是
nb是目标帧的点法向量
简单来说,这个loss的含义就是利用网络预测的转换矩阵进行
然后是第二个损失,Ln2n
这里的nb就是某一点的法向量
简单来说,这个LOSS的函数就是希望网络得到的T转换得到的法向量尽量接近真实情况,而这个T是网络根据t-1帧得到的,t帧同时也是输入
总结
1.文章整体很短,方法也比较简单,这个loss跟DeepLO DeepLO的设计感觉没啥特别的地方,区别可能是求法向量的方法?这里采用的PCA求的,可能主要的好处就是不需要数据预处理?