二.激光SLAM框架学习之A-LOAM框架---介绍及其演示

专栏系列文章如下:

一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN博客

一. 框架介绍:

A-LOAM是香港科技大学、华为天才少年秦通博士对张绩的LOAM框架进行强化的一个激光SLAM框架。作为学习激光SLAM的入门框架,A-LOAM的代码可读性和框架思路都值得激光SLAM初学者仔细研读。这个框架使⽤Eigen以及Ceres-Solver对原始LOAM进⾏重构,在保证算法原理不变的前提下,对代码框架进⾏优化,使得代码变得⼗分简洁,更加容易被读懂。

二. 激光SLAM介绍:

激光SLAM即使用了激光雷达作为主传感器的SLAM。激光雷达的优点是包含了3d信息,探测距离远,同时不受光照条件和环境纹理等影响,缺点是⼏何特点会在部分非结构化场景下如⻓⾛廊,空旷的草原等失效,且价格还是比较昂贵,但目前价格处于逐渐下降的趋势,相信后面激光雷达的价格会降到一个比较低的价格。

为什么选择激光雷达?

激光雷达相⽐图像有着对光照、纹理不敏感的优点,激光雷达地图相⽐通⽤的视觉特征点加描述⼦地图有着更好的稳定性,在安全性⾄上的⾃动驾驶领域,激光雷达⽅案⽐视觉⽅案鲁棒性更优,⼏乎所有L4级别的⾃动驾驶解决⽅案都会带有激光雷达(像特斯拉这样的纯视觉⽅案应⽤并不多);因此,从实⽤性和安全性上来讲,激光雷达有着视觉难以⽐拟的优点。

⽬前性能最好使⽤最⼴的激光slam⽅案是基于LOAM的系列⽅案,主要是为多线机械式激光雷达设计的。基于LOAM的⽅案前端通常是对激光雷达当前帧提取特征(通常是⾯特征和线特征),后端通常结合其他传感器信息给当前帧到地图中的匹配提供⼀个良好的初值,或者是纯激光雷达情况下前端激光里程计提供初值。

目前基于LOAM方案的改进方案有我们这篇文章提到的A-LOAM,还有前端增加地⾯点提取,后端增加回环检测和回环位姿图优化的Lego-LOAM;与IMU紧耦合作为前端里程计且加入GNSS适配作为全局图优化的LIO-SAM;增加视觉传感器的LVI-SAM;以及使用混合固态激光雷达的Livox-LOAM。以上这些都是采用激光雷达作为SLAM主传感器,选择不融合或者融合其他传感器的激光SLAM框架。

三. A-LOAM运行演示

1. 首先要安装ROS

Ubuntu 64-bit 16.04 or 18.04. ROS Kinetic or Melodic

2. 安装Ceres Solver

http://ceres-solver.org/installation.html

官网有安装的教程

3. 安装PCL,使用ROS自带即可。

4. 编译A-LOAM,即下载源码建立ROS工作空间并编译。

cd ~/catkin_ws/src

git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git

cd ../

catkin_make

source ~/catkin_ws/devel/setup.bash

5.播放bag包运行

roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch

rosbag play YOUR_DATASET_FOLDER/nsh_indoor_outdoor.bag

效果如下图:

二.激光SLAM框架学习之A-LOAM框架---介绍及其演示_第1张图片

6.使用kitti数据,注意要将数据放置到kitti_helper.launch中说明的文件夹上,这部分下一章节介绍kitti_helper.cpp文件会介绍。

roslaunch aloam_velodyne aloam_velodyne_HDL_64.launch

roslaunch aloam_velodyne kitti_helper.launch

四. 项目代码工程介绍:

这部分分为五个章节介绍:

1.项目文件介绍(除主要源码部分)

2.scanRegistration.cpp介绍(前端雷达处理,特征提取)

3.laserOdometry.cpp介绍(前端里程计位姿粗估计,结合lidarFactor.hpp)

4.laserMapping.cpp介绍(后端建图和位姿优化、精估计,结合lidarFactor.hpp)

5.结合论文总结A-LOAM框架原理并具体解释下一些程序语句

你可能感兴趣的:(多传感器融合SLAM,导航研究和学习,自动驾驶,算法,slam)