第一章_3D激光里程计

Catalogue
  1. 1. 第1节
  2. 2. 激光雷达介绍
  3. 3. 前端里程计汇总
  4. 4. ICP理论
    1. 4.1. 最终求解
    2. 4.2. ICP汇总
  5. 5. NDT理论
    1. 5.1. NDT汇总
  6. 6. LOAM系列理论
    1. 6.1. LOAM汇总
    2. 6.2. LOAM部分代码
      1. 6.2.1. 线数分割
      2. 6.2.2. 计算曲率(粗糙度)
      3. 6.2.3. 特征点提取
      4. 6.2.4. 计算特征距离(残差)
  7. 7. KITTI数据集
  8. 8. evo使用

第1节

renqian:前端不要求精度,而对于平滑性要求较高

激光雷达介绍

前端里程计汇总

ICP理论

去质心(\(u_x,u_y\))目的:把旋转和平移进行解耦,然后先求解旋转R,再求解平移t

因为\(x_i'^T R y_i'\)是一个数,常量,因此,Trace就是它本身

最终求解

ICP汇总

NDT理论

NDT汇总

LOAM系列理论

renqian: 如果按这种思路进行分割,有可能会飞线(16线还好,32、64可能会出现这种问题),最好是激光雷达驱动把每个点对应的线束ID保留下来

scan-to-map: 因为合并地图的时候,把特征点都划分到对应的网格了,优化的时候直接从grid中索引特征,而不是从‘上一帧’点云中索引。

LOAM汇总

ALOAM使用四元数 自动求导:效率较低

FLOAM使用李代数

lego-loam: - 计算点到面的距离的时候,只计算地面特征,而计算点到线距离的时候,不再从地面提取特征 - 对环境中的点做了聚类,去除树冠等影响 - 分两次优化,但代码又回到了6自由度优化

LOAM部分代码

线数分割

计算曲率(粗糙度)

特征点提取

点分成了四类:

  • 曲率特别大的点(从中挑选点)
  • 曲率一般大的点(从中获取边缘线)
  • 曲率特别小的点(从中挑选点)
  • 曲率一般小的点(从中获取平面)

Trick:把360度分成6等份,即每60度分别提取,这是为了避免某些特征点聚集在某个角度上,引起后面求解的病态矩阵

计算特征距离(残差)

第k+1帧来了,按照估计的位姿,将k+1帧投影回第k帧,使用最近邻算法,找到投影点最近的一个点,然后再找一个其他线束的最近点,找到两个点可形成直线。

求点到线的距离

还需要求梯度

检验拟合的直线、平面是否正确: 找5个最近邻点 对5个点的方差,求特征值分解 1.线:最大特征值特别大 2.面:前两个特征值特别大

KITTI数据集

evo使用