激光SLAM--(8) LeGO-LOAM论文笔记

论文标题:LeGO-LOAM:Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain
应用在可变地形场景的轻量级的、并利用地面优化的LOAM

ABSTRACT

  1. 轻量级的、基于地面优化的LOAM实时进行六自由度位姿估计,应用在地面的车辆上。
  2. 强调应用在地面车辆上是因为在这里面要求雷达必须水平安装,而像LOAM和LIO-SAM的话对于安装点是没有要求的,并且运行中角度也可以改变。
  3. LeGO-LOAM是轻量级的,在嵌入式设备上也可以;并且LeGO-LOAM基于对面优化,在分割和优化的过程中利用地面的存在。
  4. 首先进行点云分类,并利用分类去除了一部分噪声点,通过特征获得面点和角点(这部分和LOAM一致)。
  5. 通过两步的LM优化,利用角点和面点进行相邻帧的位姿计算,LeGO-LOAM在更低计算量的情况下达到了想死或更好的精度。
  6. LeGO-LOAM中用关键帧的概念对后端进行一个管理,用回环检测的方法来消除累积误差(LOAM中无回环检测)。

INTRODUCTION

传统求解相邻两帧位姿的方法是通过迭代最近邻点的方式(ICP),当场景非常大时,会包含很多店,那么ICP会非常耗时。于是有几种变种,例如PL-ICP等。

本论文工作场景:在地面的小车上装一个3D的激光雷达,来获得实时可靠的6自由度位姿估计,并且将算法部署到小规模的嵌入式系统中。

loam在此工作场景中的问题
  1. 计算量问题:许多无人驾驶车辆上无法安装强大的计算单元
  2. 运动激烈时候的问题:
    当小车在多种场景下跑的时候,由于颠簸,运动并不是十分平滑,导致数据有运动畸变。(LOAM中是通过匀速模型去除运动畸变,这里不再适用),由于运动强烈也会导致联系两帧的特征点匹配也会出现异常。
    另外,大量的激光点云对于低功耗的嵌入式平台很难达到实时性。
  3. 噪点的问题:
    UGV的运行环境会有很多的噪点。比如雷达与地面接近,那地面上的噪声也会影响LOAM,例如在草地上跑,可能会把草提取成角点,但草不可靠,很难再找到匹配点或者错误。除此之外,树叶也不是好的特征点。
LeGO-LOAM中对上述问题的解决
  1. 解决噪点问题:点云的分类先通过地面分割后,去除不可靠的特征点。
  2. 解决计算量(轻量化)问题:由于是基于地面的优化,LeGO-LOAM通过两步的优化来进行位姿的估计。
    第一步:通过地面点中提取面点,然后进行 [ t z , θ r o l l , θ p i t c h ] [t_z, θ_{roll}, θ_{pitch}] [tz,θroll,θpitch] 的估计
    第二步:通过角点来进行 [ t x , t y , θ y a w ] [t_x, t_y, θ_{yaw}] [tx,ty,θyaw]的估计
  3. 修正位姿漂移:集成回环优化
LeGO-LOAM系统框架

在这里插入图片描述

整个系统分为五个模块:

  • 分割:获取单次扫描的点云,并将其投影到距离图像上进行分割
  • 特征提取:分割的点云被发送到特征提取模块
  • 激光雷达里程计:使用从先前模块中提取的特征来寻找与连续扫描相关的变换。
  • 激光建图部分:这些特征在激光建图部分被转换到全局点云地图中进一步处理。
  • 变换集成模块:融合来自激光雷达里程计和激光雷达建图的姿态估计结果,并输出最终的姿态估计

LeGO-LOAM系统

A.点云分割
  1. P t P_t Pt是t时刻的一帧点云数据( P t = { p 1 , p 2 , … , p n } P_{t}=\left\{p_{1}, p_{2}, \ldots,p_{n}\right\} Pt={p1,p2,,pn}),首先把 P t P_t Pt映射到深度图像上去。
  2. 进行地面点分类:因为UGV可能会在斜坡上运动,所以没有假设地面点是一个水平面,具体操作是:通过深度图像的每一列进行地面点的提取,然后作点云分类,在后面的点云分类中,地面点将不再参与,因为已经分了。
  3. 其他点分类及过滤:后续的点云基于图像的分割方法,将点云分成很多簇,同一簇的点云配上唯一的标签(地面点是一种特殊类型的簇,对点云进行聚类分割可以提高处理效率和特征点提取精度),为了实现快速和可靠的特征提取,把小于30个点的聚类进行过滤,即不会在这些点中进行特征提取
  4. 在这里插入图片描述做完聚类之后,去除聚类小于30的点后保留的点,其中红色点是地面点;其余代表比较大的目标,比如建筑物,树干等
  5. 同时也会把这些点存储到深度图像中去,过滤的点则会被深度图像删除
  6. 保留的点会存储三种属性:是否是地面点的标签、在深度图像的行嘞索引、距离(点到雷达中心的距离)

补充–深度图像
在这里插入图片描述图像分辨率如图,为1800x16,1800是一帧激光雷达点云里面每一个scan上有1800个点,16就是有16个scan,每个点对应在自己的位置,其像素值就是该点到雷达中心的距离,即 pix ⁡ = x 2 + y 2 + z 2 \operatorname{pix}=\sqrt{\mathrm{x}^{2}+\mathrm{y}^{2}+\mathrm{z}^{2}} pix=x2+y2+z2

在这里插入图片描述

B.特征提取

这部分和LOAM差不多,区别在于LeGO-LOAM不是从原始点云中提取特征,而是从地面点和分割点中提取特征。
具体过程:

  1. 先算一个曲率 c = 1 ∣ S ∣ ⋅ ∥ r i ∥ ∥ ∑ j ∈ S , j ≠ i ( r j − r i ) ∥ c=\frac{1}{|S| \cdot\left\|r_{i}\right\|}\left\|\sum_{j \in S, j \neq i}\left(r_{j}-r_{i}\right)\right\| c=Sri1 jS,j=i(rjri)
  2. 这个曲率会和一个阈值进行比较,大于阈值就是角点,小于阈值就是面点。
  3. 把每个scan分成6段子图,则每个子图就是300*16,在每个子图中分别选取角点2个、面点4个、弱角点40个和弱面点80个。
C.前端里程计

任务还是估计相邻帧之间的位姿估计,估计的方法是在相邻帧之间做点到线的约束和点到面的约束,与LOAM一致。
在这里插入图片描述

在LOAM上的改进:

  1. 基于标签的匹配:在特征提取部分提取的特征点都会有个标签(分割的时候分配的),
    因此在找对应点时,标签必须一致;
    对于面点,仅在上一帧中找地面点与之匹配;
    对于角点在上一帧对应的标签中找对应角点;这样会提高精度。
  2. 两步LM优化:首先做地面点优化,再做角点优化
    第一步:通过当前帧地面点和上一帧匹配的地面点估计出 [ t z , θ r o l l , θ p i t c h ] [t_z, θ_{roll}, θ_{pitch}] [tz,θroll,θpitch]
    第二步:通过当前帧角点和上一帧匹配的角点估计出 [ t x , t y , θ y a w ] [t_x, t_y, θ_{yaw}] [tx,ty,θyaw],并利用第一步得到 [ t z , θ r o l l , θ p i t c h ] [t_z, θ_{roll}, θ_{pitch}] [tz,θroll,θpitch]
    虽然第一步中就可以估计出 [ t x , t y , θ y a w ] [t_x, t_y, θ_{yaw}] [tx,ty,θyaw],但是精度不高,不能用于第二步的估计,最后两步估计的结果加起来及时6自由度结果
  3. 通过这种方式的优化,计算时间比原始LOAM减少35%
D.激光雷达建图

与LOAM的区别:

  • 存储地图
  • loam是通过栅格地图进行局部地图管理,LeGO-LOAM是通过关键帧概念进行局部地图管理,保存了激光雷达一些帧,和该帧的位姿。
  • 局部地图建立是通过根据当前帧的位置,提取与当前帧位置小于100m的关键帧拼接在一起作为局部地图。
E.回环检测~回环优化

回环检测方法:就是通过检测历史帧的位姿和当前帧的位姿比价接近,则认为形成一个回环。(因为激光雷达里程计在短时间内漂移比较小)
优化方法:就是通过ICP计算历史帧和当前帧的位姿变换,然后通过LM优化方法(GT-SAM)

对应的代码逻辑梳理会在后续博客笔记中呈现

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值