目录
1、创建ros工程
(1)打开一个文件夹用来存放ros工程
在Ubuntu16.04系统中打开一个文件夹,用来创建ros工程。比如在Home文件夹中创建了awkp/myros文件夹,即文件夹路径如下
/home/hccmap/awkp/myros
(2)打开终端创建ros工程
在此文件夹中单击鼠标右键,选择打开终端窗口,此时命令行所处路径为当前窗口(这个路径与上面的路径相同),如下所示
hccmap@ubuntu:~/awkp/myros$
说明:这个路径是窗口自动显示的提示文字,表示当前命令行环境。我们只需要在提示符"$"后面输入命令即可。
创建ros工程文件夹(工程根目录)及其子文件夹,输入如下命令并按回车键。
mkdir -p test_sloam/src
进入到工程文件夹(工程根目录)中。
cd test_sloam
编译ros工程(完成)。
catkin_make
这三个步骤连续进行,在窗口中显示如下
创建后的工程目录如下
ros功能包都需要放到ros工程根目录的src文件夹中,然后才能编译运行。
2、编译S-LOAM源码
S-LOAM算法是一个ros功能包,因此需要将此源码放入ros工程根目录的src文件夹中。
S-LOAM源码地址为(https://github.com/haocaichao/S-LOAM)。
下载S-LOAM源码,如下图所示。
将S-LOAM-main.zip解压后,放入“test_sloam/src”目录中,即此时的路径如下。
/home/hccmap/awkp/myros/test_sloam/src/S-LOAM-main
切换目录,进入工程文件夹test_sloam中(工程根目录),在此处打开新终端,输入ros工程编译命令
catkin_make
如果依赖库安装齐全,则会显示编译成功,如下图所示。
S-LOAM的依赖库同lego-loam和a-loam。
即S-LOAM依赖gtsam和ceres库,这里需要注意版本问题及其与eigen库的兼容性。
3、准备点云数据
S-LOAM默认的点云数据是64线激光雷达数据。
在S-LOAM的头文件header.h中定义了扫描线数变量(如下),可以修改为16线(以velodyne激光雷达为参考)。
//int N_SCAN_ROW=16; // 激光雷达线数,16线
int N_SCAN_ROW=64; // 激光雷达线数,64线
程序之所以默认64线,是因为有一个64线测试数据slam闭环效果较明显(截取自kitti数据集)。
数据集如下。
kitti_loop_eloam.bag(6G,64线)
百度网盘地址(https://pan.baidu.com/s/1EUNOlCNct71_4_OF0STjuA)。
提取码(dydg)。
下载后将其放入Ubuntu16.04系统中的一个文件夹中,比如放到下面data文件夹中
/home/hccmap/awkp/myros/data
4、运行S-LOAM程序
切换目录,进入工程文件夹test_sloam中(工程根目录),在此处打开新终端。
先输入下面命令
source devel/setup.bash
回车后再输入下面命令,然后再回车。
roslaunch sloam run.launch
窗口如下
运行S-LOAM后会自动打开rviz,等待点云数据的输入。
现在需要运行点云数据kitti_loop_eloam.bag。
先切换目录,进入存放点云数据的文件夹中,在此处打开新终端,输入rosbag播放命令,如下。
rosbag play kitti_loop_eloam.bag
窗口如下图。
此时可以看到rviz中S-LOAM运行效果,如下。
5、S-LOAM优缺点说明
优点是代码量小,只有几百行代码,易于学习,方便修改试验。
缺点是代码量小,只使用了帧帧配准方法,极易在长廊环境中误匹配。
当然,每个slam程序都有适用环境(都不是万能的),我们需要根据使用目的去增加与改善代码,其中,S-LOAM是基础。
改进方法之一是增加帧图配准。
改进方法之二是融合IMU传感器数据进行激光SLAM。