loam 算法个人总结

loam 简介

loam 是2014年lidar实现的 slam,经典的入门算法,kitti数据集排名始终靠前,代码开源过后来关闭了,但有人模拟出 A-loam、lego-loam

论文地址: www.ri.cmu.edu/pub_files/2014/7/Ji_LidarMapping_RSS2014_v8.pdf

代码:www.github.com/HKUST-Aerial-Robotics/A-LOAM

1.点云提取特征

用局部表面平滑度指标判断

根据c值对扫描点进行排序,c值最大的特征点即边缘点,c值最小的特征点即平面点。为了在环境中均匀分布特征点,将扫描分为四个相同的子区域。每个子区域最多可以提供2个边缘点和4个平面点。当点 i 的c值大于或小于阈值,且所选点个数不超过最大值时,点 i 才能被选为边点或平面点(特征点的均匀化)​​​​​​。

剔除异常点,如下图所示

a中,B点是平行点,橙色激光束与B所在平面平行,这种测量不准

b中,A点容易被遮挡,为遮挡点,也不采用

2.特征点匹配

这里目的是让第k帧和第k+1帧的边缘点匹配,

但雷达即便是一帧数据,不同时刻坐标原点也会随着雷达变动,

首先要统一坐标系,如图

上图把tk到tk+1这一帧之间的点云pk,投影到pk一横,再把橙色pk+1投影到tk+1时刻,也就是前一帧投影到结束时刻,后一帧投影到开始时刻,这样坐标系统一了。

怎么把pk投影到pk一横,用到雷达点云校正方法,有三种

1)用视觉里程计位姿校正

2)用imu计算旋转补偿

3)只有雷达时,用线形插值,假设雷达匀速运动,所以是线性插值,loam用此方法,右图球面插值更准确

要两帧匹配,在红色扫描线提取 i 和 与i距离最近的点 j,为了匹配,要用i到直线的距离,为了得到直线,用绿色扫描线的小写L点与j组成直线,这样i与小写L、j组成的直线距离最短时,说明两帧特征点重合,此时的两帧的转换矩阵才是最优的。

距离De的求法,平行四边形面积/小写Lj长度,两条相邻边向量叉乘得到平行四边形面积

平面点使用原理类似

算出Dh的长度,平面法线与平面交点,确定平面,当i到平面距离最短时,两帧间的位姿变换最优,每个点都这么做,会组成很多残差,用于优化。

建图部分:

如下图所示,目的是用绿色的地图对齐之前的黑色地图,在当前帧的位置取立体栅格,建立局部地图,黄色区域不能太靠边,范围在3-18之间,当lidar采集到的点落入某个block时,就用这个点去匹配这个block的特征点,与之前不同的是提取边缘点大于2个,平面点大于3个

程序中,一旦centerCubeI<3也就是黄色区域太靠左,就要把黄色区域往右移动,

I         I 五星 I          I         I         I   变为

I         I         I 五星  I         I         I

此处 i = laserCloudWidth - 1,从最大开始递减

角点 laserCloudCornerArray【 3 】= laserCloudCornerArray【 2 】,也就实现了右移一个block

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值