Ubuntu20.04+ROS Noetic运行A-LOAM适配KITTI数据集
前言
最近在ROS上用A-LOAM算法跑KITTI数据集,刚开始用的是ROS2 humble版本,然后发现A-LOAM与ROS2 humble不适配,要修改很多,比较麻烦,后来就在虚拟机上安装了ubuntu20.04 ,用ROS Noetic跑A-LOAM算法,比较顺利的得出轨迹。以下这篇文章主要介绍的就是如何安装到使用A-LOAM算法跑kitti数据集,得出轨迹。
1. 介绍
针对ROS2 Humble与A-LOAM的兼容性问题,提供Ubuntu 20.04+ROS Noetic保姆级部署方案。从Ceres 1.14.0版本锁定、OpenCV头文件修正KITTI数据接口改造,到解决rviz点云丢失,完整复现建图流程。提供10G精简版KITTI数据集直链及源码修改对比图,实测生成轨迹bag包并可视化。适合SLAM初学者学习,1天内完成算法部署。
2.环境准备
前提:所有的工作是基于linux的ubuntu20.04版本和ROS noetic版本上进行的,请先安装好该环境。推荐鱼香ros一键安装 ros noetic,根据提示安装就可以了。
wget http://fishros.com/install -O fishros && . fishros
2.1 下载Kitti/odometry数据集
可以进入kitti的官网下载kitti数据集,但是好像还挺麻烦的,这里我直接在网上找到了kitti数据集的压缩包,链接为:https://blog.csdn.net/qq_36814762/article/details/136634482 就可以下载完整的了,我下载的只是10g的序列,路径如下图所示

下载和准备KITTI数据集,这样就下载好了kitti数据集了,接下来就是安装a-loam了。
2.2 安装A-loam
A-LOAM源码不是一下载就可以安装到ubuntu了,主要分为四个部分,并且还需要修改一些参数配置。因为版本的原因,需要将ceres库与A-LOAM的版本对应起来。由于库一直在更新,为了避免发生错误,我建议这里ceres库安装 Ceres Solver 1.14.0 版本。

通过https://github.com/HKUST-Aerial-Robotics/A-LOAM可以进入到github界面,按上图指示安装,由于各种库的版本更新和其他的原因,难免会发生一些错误。而以下是我的编译安装过程,且最后编译安装成功。
安装a-loam的整个过程如下:
2.2.1 安装ceres库的依赖
sudo apt-get install -y cmake git g++ libgoogle-glog-dev libgflags-dev \ libatlas-base-dev libsuitesparse-dev libeigen3-dev
2.2.2 ceres库的源码编译安装
# 克隆 Ceres 仓库
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
# 切换到 1.14.0 版本
git checkout 1.14.0 # 确认输出是否成功:HEAD is now at 1.14.0
git checkout 1.14.0 一次不行就两次
# 创建编译目录
mkdir build && cd build
cmake ..
make -j4 # 根据 CPU 核心数调整也可以直接make
sudo make install # 安装到 /usr/local/
2.2.3 pcl库的安装
pcl库的安装超简单,直接通过apt安装就可以了
sudo apt-get install -y libpcl-dev
sudo apt-get install -y pcl-tools # 包含 pcl_viewer 等可视化工具
2.2.4 a-loam源码的编译安装
a-loam的安装方式也是通过源码方式安装,这里直接git下来,有个能够加速git clone的方法,就是在git clone命令中的github.com前面加上gitclone.com,如下面代码第三行。
mkdir -p catkin_ws/src
cd ~/catkin_ws/src
git clone https://gitclone.com/github.com/HKUST-Aerial-Robotics/A-LOAM.git
cd ../
注意事项:
先别急着catkin_make,直接catkin_make会发生错误。首先你需要进入A-LOAM中的CMakelists.txt中,改版本为cmake_minimum_required(VERSION 3.0)、 C++版本改成14;
其次还要将scanRegistration.cpp中的OpenCV头⽂件#include <opencv/cv.h>改成#include <opencv2/opencv.hpp>;最后还需要将kittiHelper.cpp中的 CV_LOAD_IMAGE_GRAYSCALE 替换为 cv::IMREAD_GRAYSCALE,kittiHelper.cpp修改如下图

接下来就可以在A-LOAM的工作空间下进行catkin_make编译了
catkin_make
source ~/catkin_ws/devel/setup.bash #刷新一下环境变量
不出意外的话,安装就成功了。
3.运行A-loam
运行a-loam分为两大步,第一步是配置数据集参数,第二步就是运行了
3.1 修改配置文件
这个kitti_helper.launch文件和kitti_helper.cpp是用于处理数据集的,首先需要修改的是kitti_helper.launch,下图为我修改后的kitti_helper.launch文件

<param name="dataset_folder" type="string" value="/home/petermi/dataset/kitti/odometry/dataset/" /> 这里的路径是kitti数据集的路径
<param name="output_bag_file" type="string" value="/home/petermi/catkin_ws/src/A-LOAM/out/kitti.bag" />这里的路径是a-loam运行输出的bag包所表示的轨迹路径
<param name="to_bag" type="bool" value="true" /> 为true时,将kitti数据集计算轨迹
的同时打包成bag输出
接下来需要修改kitti_helper.cpp文件
下图是我修改kitti_helper.cpp的三处地方:
(1)真值目录修改

(2)灰度 右目修改

(3)激光数据路径修改

以上就是kitti数据集在a-loam算法中的配置了,接下来就可以运行a-loam算法了。
3.2 运行a-loam算法
为了简单好看点,运行a-loam的时候,我不在vscode环境里运行,直接在终端环境中运行。注意在运行之前需要source刷新一下环境变量,一般先运行aloam,再处理数据集。
(1)运行aloam_velodyne_HDL_64.launch

(2)运行kitti_helper.launch

运行之后就会在相应的文件路径下产生bag包,如下图所示

Rviz可视化轨迹如下图所示:

4.rviz点云修复
如果发生没有点云的情况,可以将左侧cpp文件中所有的"/camera_init"的反斜杠"/"删掉。

结语
通过本次实践,复现了A-LOAM在KITTI数据集上的建图效果,也是一次实践吧,上面如有错误,恳请指正。
更多推荐

所有评论(0)