前言

最近在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数据集上的建图效果,也是一次实践吧,上面如有错误,恳请指正。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐