目录
引言
LOAM: Lidar Odometry and Mapping in Real-time(RSS2014),是常年位于KITTI上前列的激光雷达SLAM算法,作为该领域发表时间较早的论文,启发了后续很多类似的工作。理解LOAM有助于初学者理解激光雷达SLAM的基本原理和整体流程。本系列文章将为各位同学系统梳理LOAM算法论文和代码中涉及的重点和难点。
图1 LOAM在KITTI上的排名
传送门:
论文:www.ri.cmu.edu/pub_files/2014/7/...
原味代码:github.com/laboshinl/loam_velodyne
改进代码:github.com/HKUST-Aerial-Robotics(使用Ceres_Solver库做非线性优化,简化了代码结构)。
论文亮点:
- 雷达运动畸变的补偿;
- 特征提取减小了点云配准的数据量;
- ICP使用了非线性迭代优化(LM方法),而不是传统的SVD分解。
符号定义
在正式讲解算法之前,首先要搞清楚原文中的两个名词——scan和sweep。由于时间较为久远,原作者使用的激光雷达型号为Hokuyo(北阳) UTM-30LX,是一个2D激光线扫设备,一次只能获取一条的视角范围为间距的激光线。作者将其连接到一个旋转电机上,使其可以在竖直方向做的旋转,一秒钟可以生成40条扫描线,因此在竖直方向上的分辨率为。原文中,scan代指水平方向上的一条扫描线,sweep代指雷达完成一次半球旋转后得到的扫描面。
将第k次扫描sweep记作k,。第k次扫描内获取的点云数据记为。雷达坐标系满足右手坐标系,坐标系原点位于雷达的几何中心,x轴正方向向左,y轴向上,z轴向前,表示为。第k次扫描的雷达观测坐标系表示为, 中的一个点,在中表示为。世界坐标系表示为,与初始位置的观测坐标系重合, 中的一个点,在