环境:Ubuntu18.04+Ros Melodic+北科天绘R-Fans16M激光雷达
一、环境准备
可以参考下列教程,完全解决ros安装过程中会遇到的所有问题。ubuntu系统安装过程略,可自行搜索。
ubuntu18.04 LTS安装ROS图文教程_u014453443的博客-CSDN博客
ROS安装中sudo rosdep init和rosdep update失败的终极解决方法(最新版本)_何为其然的博客-CSDN博客
二、依赖安装
A-Loam依赖于Ceres Solver2.0与PCL-1.8.1,安装过程有诸多困难。
2.1 Ceres安装
首先在Ceres官方提供的下载链接里下载源码。
Ceres官方提供详尽的安装步骤。按照官网步骤实践,编译A-Loam时报找不到Ceres路径,说明未安装成功或者别的原因。按照如下步骤安装成功:
#依赖库安装过程略,参照官网即可 tar zxf ceres-solver-2.0.0.tar.gz cd ceres-solver-2.0.0 mkdir build cd build cmake .. make -j3 make test sudo make install
上述步骤与官网步骤区别只是build文件夹位置不一样而已,不知为何没有安装成功,重新安装后没有报错了,默认装在usr/local/include下。
2.2 PCL1.8安装
PCL库可以从Ubuntu的官方仓库用apt命令安装1.7版本,也可以自己下载源码编译安装,我选的是源码安装,一方面是不小心把libvtk(PCL的依赖库)版本升级了,退回到旧版本需要付出比较大的代价(apt安装的PCL库是1.7版本,依赖旧版本libvtk);另一方面为将来学习PCL源码做准备。所以apt安装的过程我就不写了。
首先进入PCL的git仓库主页,不要傻乎乎的把master分支拉下来(和我一样),master分支是最新的版本(当时好像是1.12),在ubuntu18.04下编译会通不过。
按tag找到1.8.1版本,下载。
安装依赖:
sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get install cmake cmake-gui sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev sudo apt-get install mpi-default-dev openmpi-bin openmpi-common sudo apt-get install libflann1.8 libflann-dev sudo apt-get install libeigen3-dev sudo apt-get install libboost-all-dev sudo apt-get install libvtk7.1-qt libvtk7.1 libvtk7-qt-dev sudo apt-get install libqhull* libgtest-dev sudo apt-get install freeglut3-dev pkg-config sudo apt-get install libxmu-dev libxi-dev sudo apt-get install mono-complete sudo apt-get install openjdk-8-jdk openjdk-8-jre
libvtk安装过程可能会遇到一点阻碍,会报有一些依赖没有升级所以无法安装,遇到该类问题,直接选择apt安装那些依赖,如此尝试安装到最下层,报安装成功后,再从最后一个库逐层往上安装,就可以解决。
libvtk7.1对应pcl1.8版本。
编译安装:
cd pcl mkdir release cd release cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_GPU=ON-DBUILD_apps=ON -DBUILD_examples=ON \ -DCMAKE_INSTALL_PREFIX=/usr .. make sudo make install
经过漫长的等待,没有报错信息即为安装成功。
2.3 pcl_conversions安装
pcl1.8缺失了两个pcl1.7中所包含的库:pcl_conversions和pcl_ros,A-Loam需要用到pcl_conversions,所以我就只安装了这个库。
apt也可以直接安装pcl_conversions这个库,但是记得需要卸载libvtk7,重新安装libvtk6。担心卸载后会造成什么不可言说的错误,我还是选择了源码安装。
仓库地址:ros-perception/perception_pcl: PCL (Point Cloud Library) ROS interface stack (github.com)
还是按tag选择1.7.1版本下载。
在工作目录新建一个ros工作空间ros_ws,在其中新建一个src文件夹,然后对ros_ws目录进行初始化使之成为ros工作空间。将pcl_conversions放入ros_ws/src下,执行:
sudo su source /opt/ros/melodic/setup.bash catkin_make install --cmake-args -DCMAKE_INSTALL_PREFIX=/opt/ros/melodic
至此依赖安装工作完成。
三、A-Loam运行
创建ROS工作空间
mkdir -p ~/aloam_ws/src cd ~/aloam_ws/ catkin_make //至此你会发现aloam_ws下自动生成了多个文件夹和文件 cd src/ //此处在src文件夹中放入解压后的A-LOAM源码,地址在文章开头 cd ../ catkin_make
如果依赖安装没有出什么问题,这里就能顺利编译通过。相反如果提示找不到某个库,说明依赖安装有问题。
从工作空间目录打开两个终端,分别运行以下两个命令以启动A-Loam:
终端一:
source ~/aloam_ws/devel/setup.bash roscore
终端二:
roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch
会有rviz窗口弹出,但没有任何数据,这是因为A-Loam要订阅一个发布PointCloud2格式数据的话题,这个话题的名称写在scanRegistration.cpp的第478行,默认是velodyne雷达发布的话题名称。因此如果是velodyne雷达,直接运行驱动或者播放录制好的bag包就可以建图。
如果使用的是其他品牌的激光雷达,则需要找到对应的话题名称,并修改此处。
四、R-Fans16M激光雷达
按要求连接好主机与雷达(或播放录制好的pcap数据)
将驱动包源码复制到aloam_ws工作空间的src目录下,并对工作空间进行编译,编译后添加环境变量
cd ~/aloam_ws/ source ~/aloam_ws/devel/setup.bash
运行驱动
roslaunch rfans_driver node_manager.launch
然后打开一个新终端,使用rostopic list命令查看驱动运行时发布的topic,可以看到这个驱动的节点发布的PointCloud2话题名称应该为/rfans_driver/rfans_points。
按上节末尾修改A-Loam代码中的话题名称,如下图
然后启动A-Loam,开始建图
效果如下
之前系统计算图如下
现在计算图如下
可以看到A-Loam的ascanRegistration节点订阅了/rfans_driver的相关话题。
部分参考资料
Ubuntu16.04 多版本pcl 1.11与pcl_ros pcl_conversion冲突错误_u010838619的博客-CSDN博客