作者丨小飞@知乎
来源丨https://zhuanlan.zhihu.com/p/404326817
编辑丨3D视觉工坊
本文主要介绍LOAM代码中有关lidar odometry一些相应的公式推导。包括特征点曲率计算公式、点到线和面距求取公式、里程计优化求解公式和一些坐标变换公式。LOAM代码版本为
相关代码:
通过求取这部分代码diffX * diffX diffY * diffY diffZ * diffZ 近似表示曲率,角点和平面点通过曲率小划分。其中 _config.curvatureRegion 设置为5,表示将该点左右各5个点作为邻域范围来获取曲率。因此pointWeight = -2 * _config.curvatureRegion = -10.将其带入循环公式:
diffX = -10*_laserCloud[i].x _laserCloud[i 1].x _laserCloud[i-1].x _laserCloud[i 2].x _laserCloud[i-2].x … _laserCloud[i 5].x _laserCloud[i-5].x
重组成如下公式:
diffX =(_laserCloud[i 1].x - _laserCloud[i].x) (_laserCloud[i-1].x - _laserCloud[i].x) … (_laserCloud[i 5].x - _laserCloud[i].x) (_laserCloud[i-5].x - _laserCloud[i].x)
最后得到左右各5个点邻域的该点diffX.
相关代码:
根据算法流程,需要根据提取的特征点建立点到线与点到面的约束关系,即点到线的距离 和 点到面的距离最小。代码中两个距离的原理公式如下:
根据上述内容,结合代码(x0,y0,z0)代表上图中的i点坐标,(x1,y1,z1)和 (x2,y2,z2)分别代表 j 和 l 点坐标。
同样,点到面的距离也可以通过法向量获取,相关代码如下:
将上述公式与代码结合,i 代码中有点坐标 (pointSel.x, pointSel.y, pointSel.z);j 代码中有点坐标(tripod1.x, tripod1.y, tripod1.z);l代码中有点坐标(tripod2.x, tripod2.y, tripod2.z);m 代码中有点坐标(tripod3.x, tripod3.y, tripod3.z)。
那么
在推导里程计求解公式之前,需要了解几个重用坐标系的转换。
注:感谢微信公众号「」整理。
其中transformToStart 对应论文中的公式
注意LOAM代码中point.intensity在预处理时被存储为(scanID relTime)
transformToEnd 函数是先做的transformToStart ,然后将所有点云转换为帧的结尾。
对于里程计看里程计的优化求解部分的整体思路:
LOAM利用建立点到线 以点到面的最小距离值作为约束方程,最后使用L-M解决这个非线性问题的非线性优化方法。L-M方法中使用的公式如下:
首先,坐标转换后的点云坐标是直接建立约束方程的X
然后,根据链法则,我们可以先通过约束方程偏导坐标,然后乘以坐标来转换变量rotX求偏导,即可得到最终的偏导求取结果。
首先,根据约束方程偏导坐标量,我们在上面建立了约束方程。
这里的la lb lc 点到线距离的函数X Y Z偏差导数可以通过导数的几何意义来理解,导数在几何意义上表示梯度。梯度方向是距离函数的单位向量,如下图所示De 方向。
代入后,您将获得代码中的代码 la lb lc ,但这里推导的公式正负号也不同于代码;同样,点到面约束方程求偏导也是这样得到的。
最后一个公式是里程积累,函数代码如下图所示:
以上具体内容可以关注本人完全理解LOAM框架的3D激光SLAM:课程视频从源码分析到算法优化,具体课程介绍可扫描以下二维码:
本文仅进行学术分享。如有侵权行为,请联系删除。
在「3D视觉工坊」微信官方账号后台回复:即可下载 3D干货的视觉相关数据涉及相机校准、三维重建、三维视觉、SLAM、深度学习、点云后处理、多视图几何等方向。
在「3D视觉工坊」微信官方账号后台回复:可下载包括等。
在「3D视觉工坊」公众号后台回复:独家下载即可学习课件和视频网站;背景回复:独家下载即可学习课件和视频网站。
扫码添加小助手微信,可
也可以申请加入我们的细分交流群。目前主要有、、、、、等微信群。
一定要备注:
▲长按加微信群或投稿
▲长按关注公众号
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、可答疑解惑、助你高效解决问题