目录
本次实验用到的是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数据集跑出来了!