LOAM论文阅读笔记

目录

1.特征点的提取

2.特征点的匹配

3.运动估计

4.运动估计优化

5.建图

参考文章:


1.特征点的提取

         velodyne 16雷达每次返回的数据称为一帧(sweep),一帧由16条线组成(每条线称为一个scan),每个scan有很多点。velodyne 16线激光雷达返回的点云数据是按照先上下,后左右的顺序,如下面的动画所示。而且上下的顺序也是错杂的。因此在程序中需要先将其按照线号重新排列。

         一帧就是雷达扫描一次(垂直30°,水平360°)得到的点,由16条线上的点组成。一般每秒扫描10次,就是10帧。

        机械旋转式激光雷达虽然是连续旋转的,但是它的输出却是一帧一帧的。通过匹配每帧激光点云与上一帧点云,可以估计得到两帧之间机器人的相对位移,这就是激光里程计的工作方式。

        点云中的点都是按照一定顺序排列的(激光雷达返回的点就是这样的),如果点的排列顺序是杂乱无章的,再使用这个公式就没什么用了。原作者考虑激光雷达的每帧点云数据由很多独立的线组成。因此,在定义特征点时考虑的是单个线上的点与相邻点的关系。

        点也可看成一个向量,||X||表示向量的范数,也就是向量的长度,或者说点到雷达坐标系原点的距离。

        有人将定义的c称为曲率, c就是在计算平均点与中间点X的差距,点的排列越平直差距越小,反之点排列越弯曲差距越大c的值就越大。作者提出用曲率信息来区分激光点是角点还是面点,这显然是个非常大的创新点。根据曲率值大小,可以对点进行分类。论文中分成两类:曲率大的是角点,曲率小的是平面点。

        特征点的提取在每个区域只提取固定的几个。

 

2.特征点的匹配

        特征点分为两类,对于角点,一般在转折线上(例如卧室里的墙角),要计算它到折线的距离;对于平面点,一般在比较平坦的表面上(例如墙面),要计算它到平面的距离。

        LOAM使用了点到直线和点到平面来计算距离,这就意味着他适用于结构化比较好的室内环境。

        在计算点到直线的距离时,直线的两个点的选取应该在两个扫描线上,不能是同一扫描线上的两点。在寻找面时的三个点需要两个点在同一条线上,另外一个点在另外一条线上。

3.运动估计

        LOAM还解决了运动畸变问题(叫demotion或者distortion correction)。LOAM解决运动畸变的方法比较简单,就是根据每个点的相对时间进行补偿。雷达扫描一帧的时间是固定的,可以得到每个点的采集时刻,将所有点都统一到同一时刻,这里选择的是每完成一帧扫描的末尾时刻。论文中假设雷达做最简单的运动,即匀速运动,也就是说一次扫描过程中雷达的线速度和角速度都是不变的。在时间间隔不大时,例如100ms,可以认为这样的假设比较合理。当然如果是无人机这种做剧烈运动的,这个假设就不太合理了,此时可以用IMU补偿。

        假如器人或者无人车的运动速度是1m/s(这算慢的了),在完成一次360°扫描的过程中雷达的位置已经改变了10cm,所以说小车在运动的10cm过程的这段时间中,在不同时间接受到360度不同角度扫描到的点(假设同一点发出和接受在一瞬间,无时间变化)。估计100ms之间的运动(小车运动了10cm,100ms内的点都被统一到最后时刻了),假设某个点在40ms这个位置,可以通过插值来估计当前点的运动占整个运动的比例。

        注意是对点云中所有的点都补偿,不仅仅是特征点,因为后面会用所有的点来建图。

4.运动估计优化

        上面唯一的未知量就是相对位姿Tk+1,我们将它视为变量,求使距离d最小的Tk+1, 这个问题是个非线性优化问题。优化目标涉及距离,因此是一个最小二乘问题。(最小二乘问题的描述可以看参考csdn,为了防止结果被离群点污染,通常的做法是在求解前先剔除掉这些害群之马。)

        求解非线性最小二乘问题的常用方法有LM( Levenberg-Marquardt)方法和高斯牛顿法。作者在论文中声称采用了LM方法,但是在程序中却使用了高斯牛顿法。使用了权重、核函数等操作。

        作者在程序中就是直接求出导数并组装成雅克比矩阵的,他没有调用第三方的函数库。在改进版本ALOAM中,后人就图省事直接用了Ceres库,省去了计算雅克比矩阵的工作。

5.建图

        建图的过程就是不断地把匹配好的点云堆积在一起的过程。

        累计一定帧数目的点云数据才会进行建图,频率较低,但是精度很高。每扫描10次做一次建图的工作。LOAM缺少闭环检测,它建图的主要目的还是为状态估计服务的。

        把当前帧投到世界坐标系中需要去找匹配对,在mapping的算法里是通过周围的珊格来寻找匹配对,通过TD-tree的方式。

        计算匹配对的协方差矩阵,对协方差矩阵进行一个特征值分解,计算出特征值和特征向量。如果这个点是个边缘点,会对其进行一个检查,这个匹配点的特征值的特性是一个特征值明显大于其余两个特征值;面点的特征是有两个比较大的特征值,其余一个特征值比较小,第三个特征值所对应的向量是这个面的一个法向量。

        以下图示是自己目前的理解,可能有误,接下来一边学习一边继续理解修正。

 

参考文章:

LOAM论文和程序代码的解读_robinvista的博客-CSDN博客_loam解读

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jiqiang_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值