《论文阅读》LO-Net: Deep Real-time Lidar Odometry

留个笔记自用

LO-Net: Deep Real-time Lidar Odometry

做什么

Lidar Odometry激光雷达里程计,里程计作为移动机器人相对定位的有效传感器,为机器人提供了实时的位姿信息。移动机器人里程计模型决定于移动机器人结构和运动方式,即移动机器人运动学模型。
简单来说,里程计是一种利用从移动传感器获得的数据来估计物体位置随时间的变化而改变的方法
在这里插入图片描述
用建图的方式来理解,要实现机器人的定位与导航,就需要知道机器人走了多远,往哪走,也就是初始位姿和终点位姿,只有知道了里程计,才能准确将机器人扫描出来的数据进行构建。

做了什么

与大多数的激光雷达里程计不同,这里用多任务学习的方式来将目标分解,同时进行上述多任务的端到端学习,并且设计了一个建图模块
主要学习的任务有Normal Estimation法向量估计,Odometry Regression里程计回归
首先是法向量估计任务
在这里插入图片描述
点云法向量估计也是一个常见应用了,点云法向量是点云的一种特征表述,由空间变换可知,点云中每一点的法向量夹角及曲率值均不随物体的运动而改变,具有刚体运动不变性。
在这里插入图片描述
简单来说就像是找到该点的法线,但单独点打法线不好寻找,往往采用邻域曲线的曲面后再找法线,法向量的应用就很多了,比如点云渲染点云重建
在这里插入图片描述
然后是里程计回归任务,其实也可以称呼为动态区域估计
在这里插入图片描述
简单来说就是利用连续的点云序列判断出连续点云中有哪些部分是动态的哪些部分是静态的,这样能更好的估计点云物体的位姿等信息

怎么做

在这里插入图片描述
整体结构分为三个部分,对应了前面的多任务学习,第一部分法向量估计(Normal)子网络,第二部分运动估计(Siamese pose)子网络,第三部分掩码预测(Mask)子网络。整体输入是两次连续扫描的点云序列{st-1,st},输出是当前时间点云St的位姿信息,同时因为是多任务学习,这些子网络也能通过输入单独点云来进行各自任务的输出。
接下来是具体的细节
首先在这些子网络之前,先要对扫描的点云数据进行编码得到合法输入St,这里采用了根据坐标投影成矩阵的方式
在这里插入图片描述
假设某点坐标为(x,y,z),则构造一个巨大的矩阵,计算的α和β是该点在矩阵上投影的位置,∆α 和 ∆β 分别是激光雷达在水平和竖直⽅向上连续两束激光之间的平均⻆分辨率,得到该位置后用点云的强度值和角度值进行数值填充
在这里插入图片描述
然后就可以由扫描得到的点云数据的所有点得到一个输入矩阵∈RH×W×C
接下来就是网络结构的第一部分,Normal estimation法向量估计部分
在这里插入图片描述
这里采用的方法跟最上面所述相同,采用本点和邻域组成模拟曲面的方式估计法向量,也就是给定点Xi和它的邻域Xij,这里采用的邻域就是在矩阵上离点Xi位置相近的点
在这里插入图片描述
在这里插入图片描述
这里的Xi就是点Xi的位置向量,一个3D向量,wik是Xi这个点对于第k个邻居点的位置权重,这里是根据角度进行权重的设置
在这里插入图片描述
简单来说这里的权重就是根据两个点角度(深度)来进行计算,希望两个点深度相同,然后再深度权重的基础上根据三维向量坐标来直接减得到。
然后就是这k个邻居的求最小值,这里通常采用PCA(主成分分析法)的方法,但这里由于为了网络计算,采用的方法比较简单,在这里采用的式子为
在这里插入图片描述
跟上面的区别其实就是对于点Xi,邻居仅仅是上下左右四个位置,然后将其权重乘后累加作为最终该点Xi的法向量
在这里插入图片描述
在此基础上,为了保证序列的时空几何一致性,也就是顺序序列中两个顺序点它们所在各自矩阵的位置应该相对应,即
在这里插入图片描述
这里的T是两个点云的相对位姿变换,P是点云投影的过程,简单来说,对于Xtab和Xt-1ab也就是对于同一个点在t时刻和t-1时刻于各自点云嵌入矩阵的位置(a,b)上,都会存在一种转换方法使两者之间能进行转换,通过测量相应元素之间的相似性可以验证位姿变换的正确性,于是就可以定义变换约束
在这里插入图片描述
这里的∇r是这个位置的局部平滑度,为了最小化这个值,使得相对应元素的法向量值应相似
然后是第二部分,运动估计子网络,也就是位姿(Siamese pose)估计子网络
在这里插入图片描述
这里的输入是前面法向量估计得到的添加上法向量信息的点云矩阵,将序列中两个不同的点云矩阵叠加,然后经过几层简单的卷积核FC得到最后的点云之间的六⾃由度位姿变换。这里最末尾的两个紫色的FC的维度分别为3和4,分别代表平移向量和旋转变换(四元数)
绿色模块网络和第三部分掩码预测子网络部分相同
在这里插入图片描述
红色框线部分为绿色模块,为特征提取模块,将覆盖了法向量信息的点云矩阵进行encode,这里用到了论文《SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size》里提出的一个新的卷积模块,FireConv
在这里插入图片描述
简单来说这个卷积模块分为两个部分,第一部分squeeze是由1×1卷积核组成,第二部分expand是由多个1×1卷积核和多个3×3卷积核组成,这也很好理解,就是为了减少网络参数,利用1x1卷积核来降低输入到expand层中3x3卷积核的输入通道数,接下来就是定义这里的loss
在这里插入图片描述
这里的x是相对平移向量的GT,q是旋转向量的GT,后面两者就是前面网络的FC层所需要输出的预测三维平移向量和四元旋转组
在此基础上定义
在这里插入图片描述
这里的Lx和Lq与上述相同,sx和sq指的是两个可学习参数,为了权衡二者的重要性,也就是为了尽量同时保证两个位姿变换均正确。
最后是第三部分,掩码(mask)预测子网络
在这里插入图片描述
在这里插入图片描述
黑框部分就是掩码预测的完整网络,是前面那个子网络的延伸版,除了特征encode部分还添加了decode的FireConv以得到跟原矩阵相同维度的mask
在这里插入图片描述
这个mask的含义是因为实际的场景中通常包含动态物体,例如街道上⾏驶的汽⻋和⾏⼈,这些动态物体可能会⼲扰⽹络对运动估计的学习,所以这里设计了一个掩码预测来告诉网络内容的动态部分
添加了mask后将上上个子网络的几何约束修改
在这里插入图片描述

在这里插入图片描述
简单来说就是利用mask来减少动态区域对网络的影响,做一个权重
最后再添加一个正则项
在这里插入图片描述
在这里插入图片描述
最后这里还设计了一个建图方式来优化位姿变换,这里的方法是通过历史多帧来构建一个全局地图,然后利用该地图和当前帧进行简单匹配来优化位姿变换结果,保证基本变换不会过大
在这里插入图片描述
设计的输入有两个,分别是前面两个子网络得到的结果,位姿变换Tt和点云数据矩阵St,这里的St是在法向量+本点信息的基础矩阵上又添加了掩码信息,所以这两者均是前面多任务子网络得到的输出结果
接下来是图中多个不同符号的解释
Π是计算激光雷达相对于起始位置的位姿初始估计值在这里插入图片描述
Ψ是利用前面Π得到的位姿变换减少空间自身运动所造成的失真
在这里插入图片描述
这里的p是当前t时间点位置,m是之前建图所得到的对应点位置,n是m点的法向量,简单来说这里的意思就是可以理解为,将当前的所有点根据时间位姿变换找到初始对应点后,尽量减少对应点之间的差距,这就是为了减少空间运动所产生的可能失真
Θ是将上一步得到的约束位姿变换记录到地图上
在这里插入图片描述
这里的Mk是总迭代次数也就是时间,以此得到当前帧t的最终位姿变换Mt
Φ是用简单的线性差值去矫正两帧点云之间的差别
Σ, N就是将得到的新点云加入地图

总结

1.文章最后提到了两个问题,第一个是点云的编码问题,这里采用了柱面映射的方式,这种方式太耗资源了,而且稀疏性太大,比较奇怪为什么不像pointnet和pct那样用embedding层来进行输入嵌入。第二个问题是这里是监督学习,训练的时候需要用到GT,在这几个loss中最需要用到GT的是在这里插入图片描述
也就是匹配点的位置变换和旋转变换,这里就是匹配问题常遇到的,不知道像做无监督一样用弱label来进行模拟行不行,感觉它主要在意的是局部区域性,不用特别精确到具体点
2.整体结构简单但好用,除了map模块看起来比较高级,而且由于是多任务,每个单独的优化均可以尝试,但由于学习方式的问题,各个子网络联系较少,缺少交互性,感觉可以尝试将掩码和法向量进行attention融合的方式

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值