在kitti数据集上运行A-LOAM进行SLAM建图

发布时间:2024年01月14日

目录

一、准备好kitti数据集

二、从github上克隆A-LOAM代码

三、Ceres库的安装

四、源码修改

五、编译运行

六、运行结果显示


本次实验用到的是Ubuntu20.04 ROS1 noetic版本

一、准备好kitti数据集

首先下载好kitti_2011_09_30_drive_0027_synced_SELF.bag该文件的压缩包(本文章最上面的那个包),由于Ubuntu解压缩对于文件大小有限制,故我是将压缩包由第三方app转发到windows,用7zip解压缩后即可得到数据包kitti_2011_09_30_drive_0027_synced_SELF.bag,再传回Ubuntu,可将该bag放入catkin_ws中

注意:一定要先下载好数据集,不然会像我一样运行到最后发现报错找不到文件,另外解压缩这个工作也可以借助第三方工具(如7zip),这些问题也曾经困扰我一个晚上,不过经过努力都overcome了

二、从github上克隆A-LOAM

在主目录中新建一个工作空间catkin_ws,在工作空间里面再建一个src文件夹

新建终端,在终端中依次输入:

    cd ~/catkin_ws/src

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

    cd ../

    catkin_make

注意:克隆A-LOAM时,会出现克隆失败,连接超时等问题,不要灰心,多来几次(我重复了6次才成功)

三、Ceres库的安装

catkin_make时可能会报错,不要怕,接着解决问题。

我们需要安装Ceres1.14版本,以下为步骤:

(1)添加源

新建终端,输入:

sudo gedit /etc/apt/sources.list

将下面的源粘贴到source.list的最上方 ,保存退出

deb http://cz.archive.ubuntu.com/ubuntu trusty main universe

(2)安装依赖库

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev

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

(3)下载Ceres1.14版本并解压(推荐下载最新版)

wget ceres-solver.org/ceres-solver-1.14.0.tar.gz

tar -zxvf ceres-solver-1.14.0.tar.gz

(4)编译安装

cd ceres-solver-1.14.0

mkdir build

cd build

cmake ..

make -j4

sudo make install

安装完成后,在catkin_ws的终端输入:

mkdir build

cd build

cmake ..

make

即开始执行编译,build中生成可执行文件

到这里,感觉自己已经完成了一项大工程,颇有成就,继续执行catkin_make命令,可能还是会报错,没关系,我们鼓足干劲,继续加油。

四、源码修改

修改一下源码:

//改A-LOAM下的CMakeLists.txt

c++11 改为 c++14


//改A-LOAM/src/kittiHelper.cpp

CV_LOAD_IMAGE_GRAYCALE 改为 cv::IMREAD_GRAYSCALE       //91行和93行


//改A-LOAM/src/scanRegistration.cpp里的

#include <opencv/cv.h> 改为 #include <opencv2/imgproc.hpp>


//改A-LOAM/src/三个cpp文件laserMapping.cpp和scanRegistration.cpp和laserOdometry.cpp

//使用Ctrl+H快捷键快速替换

/camera_init 改为 camera_init

修改完成后保存,重新执行catkin_make命令,我们惊奇地发现,终于成功了!

五、编译运行

运行A-LOAM前先source一下:????

source ~/catkin_ws/devel/setup.bash

运行A-LOAM:

roslaunch aloam_velodyne aloam_velodyne_HDL_64.launch

运行kitti数据集(在数据集所在的文件夹下新建一个终端):

rosbag play kitti_2011_09_30_drive_0027_synced_SELF.bag

可能还是会报错:Error reading from file: wanted 4 bytes,read 0 bytes

没事儿,接着解决,输入:

rosbag reindex kitti_2011_09_30_drive_0027_synced_SELF.bag

重新运行一次rosbag :

play kitti_2011_09_30_drive_0027_synced_SELF.bag

运行后发现Rviz界面没有任何显示:

可以重新打开一个终端查看节点情况,查看节点运行指令:

rqt_graph

发现数据集的节点没有接入到A-LOAM中,可能是数据集的topic和aloam的不对应

在数据集所在的文件夹下输入:(查看节点的topic)

rosbag info kitti_2011_09_30_drive_0027_synced_SELF.bag

//将scanRegistration.cpp中的sub接口改一下

ros::Subscriber subLaserCloud = nh.subscribe<sensor_msgs::PointCloud2>("/velodyne_points", 100, laserCloudHandler);

//改为

ros::Subscriber subLaserCloud = nh.subscribe<sensor_msgs::PointCloud2>("/points_raw", 100, laserCloudHandler);

//改完后保存

至此,距离成功只差一步之遥……

六、运行结果显示

在kitti数据集所在位置打开终端,重新编译运行:

rosbag play kitti_2011_09_30_drive_0027_synced_SELF.bag

rviz中即可显示如下界面:(开始建图)

最终结果如下:

可以看出,成功地将kitti数据集跑出来了!

文章来源:https://blog.csdn.net/qq_71861772/article/details/135566522
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。