3D激光SLAM总结及A-LOAM、LIO-SAM算法安装及运行


提示:以下是本篇文章正文内容,下面案例可供参考

一、三维激光SLAM总结

1.LOAM:Lidar Odometry and Mapping in Real-time

LOAM为清华自动化本科毕业的Zhang Ji博士在CMU读博期间,于2014年在RSS期刊发表的关于三维激光传感器的SLAM算法。

LOAM存在的问题:

  1. 没有回环检测;
  2. 计算时间复杂度较高,基于三维空间中的位姿进行优化;
  3. 户外可能受到各种噪声影响,例如树上摇晃的树叶,地上的杂草。而这些点未必会重复出现在前后两帧激光中。而错误的特征点将会影响位姿精度。
  4. LOAM需要提取平面点和边缘点,由于车体上下颠簸,竖直维度提取的平面点很容易造成误差。

2.LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain .

Lego-LOAM是TiXiao Shan发表在IROS2018的文章,文章叫:可变地形下的轻量级和地面优化的雷达里程计与建图。

其是以LOAM为框架衍生出的新算法,主要在于两点提升:轻量级 和 地面优化。
Lego-LOAM的contribution:1.着重于解决一些非城市化道路或非平整道路上LOAM存在的问题。2.轻量化,改进算法,使其在TX2上也可以实时运行。
Lego-LOAM有一个显著的缺陷——依赖地面。

3.LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

LIO-SAM是TixiaoShan在2020年IROS发表的Lego-LOAM续作。 实际上也是Lego-LOAM的扩展版本,添加了IMU预积分因子和GPS因子。

在这里插入图片描述
LOAM使用多传感器(三维激光、IMU、GPS)融合的方法,利用因子图优化,计算位姿;
特点:

  1. Odometry 以IMU的frequency(要收到雷达里程计信息后才发出),这样前端频率更高;

  2. IMU odometry提供初始估计值并做了预积分处理,同时IMU原始数据进行雷达进行运动补偿;

  3. 后端因子图优化包括四个因子,IMU预积分结合雷达里程计的帧间约束因子在预积分节点维护,其他三个在后端节点维护,分别是GPS因子、雷达里程计因子和回环检测因子。

  4. 紧耦合:IMU的零偏可以被估计,利用雷达里程计的帧间约束进行反馈,使IMU解算更加准确,提供更好的初值。

二、LIO-SAM算法安装

1.环境配和搭建

运行环境ubuntu18.04和ROS(melodic)

依赖1:下载GTSAM(也可以在github里面直接下载)

wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.2.zip

cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/

cd ~/Downloads/gtsam-4.0.2/

mkdir build && cd build

cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..

sudo make install -j4

在这里插入图片描述

安装过程若出现编译报错时,需将build文件删除,重新编译。

依赖2:下载Ceres(也可以在github里面直接下载)

sudo apt-get install -y libgoogle-glog-dev

sudo apt-get install -y libatlas-base-dev

wget -O ~/Downloads/ceres.zip https://github.com/ceres-solver/ceres-solver/archive/1.14.0.zip

cd ~/Downloads/ && unzip ceres.zip -d ~/Downloads/

cd ~/Downloads/ceres-solver-1.14.0

mkdir ceres-bin && cd ceres-bin
cmake ..

在这里插入图片描述

sudo make install -j4

2.lio-sam安装并运行

1. 下载源代码:(也可以在github里面直接下载)

cd ~/slam_ws/src
git clone https://ghproxy.com/https://github.com/TixiaoShan/LIO-SAM.git
cd ..
catkin_make

这里如果编译不通过,应该是环境配置问题,或者库版本问题

makdir -p ~/catkin_ws/src
cd ~/slam_ws
catkin_make
echo "source ~/slam_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

2. 进行lio-sam算法
LIO-SAM的作者提供了几个数据集进行测试,这里下载其中的walk数据集。作者提供地址是google云端硬盘,其下载速度感人,我这里只有十几kb/s,而这个数据集有3.7G。可以到我这里分享的百度网盘链接下载:https://pan.baidu.com/s/1cMc0EXhbiY2HWqkKlspzDg 提取码 gz7i

 运行launch文件并播放数据包
roslaunch lio-sam run.launch
rosbag play ~/catkin_ws/src/data/casual_walk.bag

开始播放数据包后,rviz即可自动显示当前动态建图画面。
在这里插入图片描述

3. 保存pcd建图结果
首先,需要修改params.yaml中的参数。params.yaml在~/catkin_ws/src/LIO-SAM/config文件夹下。修改该文件中SavePCD:true 和保存地址。

然后,为了避免保存还没完成,ros就已经关闭了节点,需要设置_TIMEOUT_SIGINT的值。按如下命令打开文件:

sudo gedit /opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/nodeprocess.py

在文件中找到_TIMEOUT_SIGINT,并设置为100秒。
这样,在命令窗口中按下Ctrl+C来结束run.launch的运行时,便会自动将pcd文件保存到指定地址。
最后打开最终点云地图
再次roslaunch lio-sam,等待bag跑完全程,系统会自动生成一个1210.pcd文件,这就是最终的点云地图。

pcl_viewer 1210.pcd

3.ALIOM安装及运行

  • ALIOM安装
cd ~/slam_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git
cd ..
catkin_make
source ~/.bashrc
  • 使用NSH indoor outdoor数据集运行项目
    nsh_indoor_outdoor.bag下载地址
    链接: https://pan.baidu.com/s/1psN_qIht28uyyks5AVnhmA密码: tec7

  • 使用Kitti数据集运行项目

    Kitti数据下载路径(请将以下文件下载下来)
    链接: https://pan.baidu.com/s/1ruXQ0pfifktpoU-Fr_x0QQ 密码: o2jl
    只放入kitti数据集中的序列号为00的部分,包括
    data_odometry_gray
    data_odometry_poses
    data_odometry_velodyne
    全量数据集请自行下载

  • 数据集目录结构(以下只放入序列为00的部分)

			data_odometry
			├── results(放入ground_truth即data_odometry_poses)
			├── sequences(放入灰度图data_odometry_gray)
			│…└── 00
			│…├── image_0
			│…└── image_1
			└── velodyne(放入点云data_odometry_velodyne)
			…└── sequences
			… └── 00
			… └── velodyne
  • 修改kitti_helper.launch文件

    以下为例,主要修改项为:
    将dataset_folder修改为数据集目录位置
    自行决定将to_bag是否修改为true,若为true则会打包生成数据集的bag文件
    将output_bag_file修改为要输出的bag文件路径

<node name="kittiHelper" pkg="aloam_velodyne" type="kittiHelper" output="screen"> 
    <param name="dataset_folder" type="string" value="/home/tony/tmp/data_odometry/" />
    <param name="sequence_number" type="string" value="00" />
    <param name="to_bag" type="bool" value="false" />
    <param name="output_bag_file" type="string" value="/home/tony/tmp/kitti.bag" /> <!-- replace with your output folder -->
    <param name="publish_delay" type="int" value="1" />
</node>
  • ALIOM运行
#16线激光雷达
roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch
rosbag play YOUR_DATASET_FOLDER/nsh_indoor_outdoor.bag

#64线激光雷达
roslaunch aloam_velodyne aloam_velodyne_HDL_64.launch
roslaunch aloam_velodyne kitti_helper.launch

4.解决编译报错的问题:

1.安装Ceres 出现Can’t find Google Log (glog). 需要安装glog,

https://github.com/google/glog/releases/tag/v0.4.0

先从Github下载源码,然后解压进入文件夹,命令行敲下:

mkdir build

cd build

cmake ..

sudo make install -j4

然后重新编译ceres,发现编译通过了。

2.编译LVI-SAM源码出现错误:GTSAM was built against a different version of Eigen.

因为GTSAM的eigen版本跟系统版本冲突了,需要修改GTSAM的eigen依赖库的版本,改为系统的eigen。

在CMakeLists.txt文件中if(GTSAM_USE_SYSTEM_EIGEN)前面添加如下代码:

set(GTSAM_USE_SYSTEM_EIGEN ON),重新编译就可以了。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值