点击上方“计算机视觉工坊”,选择“星标”
干货第一时间送达
一、前言
LOAM[1]是Ji Zhang于2014年提出的使用激光雷达完成定位与三维建图的算法,即Lidar Odometry and Mapping。之后许多激光SLAM算法借鉴了LOAM中的一些思想,可以说学习LOAM对学习3D激光SLAM很有帮助。本文对LOAM算法,以及简化版的开源代码A-LOAM进行简单介绍。
二、LOAM算法
2.1 系统整体架构
LOAM主要包含两个模块,一个是Lidar Odometry,即使用激光雷达做里程计计算两次扫描之间的位姿变换;另一个是Lidar Mapping,利用多次扫描的结果构建地图,细化位姿轨迹。由于Mapping部分计算量较大,所以计算频率较低(1Hz),由Mapping校准细化Odometry过程中计算出来的轨迹。
2.2 Lidar Odometry部分
Lidar Odometry是通过Lidar的两次扫描匹配,计算这两次扫描之间Lidar的位姿变换,从而用作里程计Odometry。既然提到了两次扫描的匹配,自然而然想到了经典的ICP算法。然而LOAM并没有采用全部的激光点进行匹配,而是筛选出了两类特征点,分别是角点和平面点。
所谓角点,是当前激光扫描线束上曲率较大的点;而平面点,即曲率较小的点。在匹配时,首先提取当前扫描中的角点和平面点,对于角点,可以认为是物理世界中直线元素的采样,所以计算到上一次扫描中对应直线的距离;而对于平面点,认为是物理世界平面元素的采样,所以计算到上一次扫描中对应平面的距离。通过不断优化,使距离最小,从而得到最优的位姿变换参数。
2.2.1 角点到直线距离的计算
计算角点到对应直线距离时,需要确定对应直线的方程,才能够计算距离。作者认为,可以有如下假设:角点是雷达某个线束与物理世界两个平面夹角相交时的采样,那么这个线束相邻的雷达扫描线束也会与这个平面夹角相交,所以这个平面夹角的直线可以用前后两次扫描的角点进行标识。