文章目录
一、整体介绍
hdl_graph_slam是使用3D LIDAR的实时6DOF SLAM的开源ROS软件包。它基于3D Graph SLAM,以及基于NDT扫描匹配的测距法估计和回路检测。它还支持多种图形约束,例如GPS,IMU加速度(重力矢量),IMU方向(磁传感器)和地板(在点云中检测到)。我们已经在室内和室外环境中使用Velodyne(HDL32e,VLP16)和RoboSense(16通道)传感器测试了此封装。
github地址在这里
学习的原因:研究一个开源的完整的SLAM软件包无疑是快速上手SLAM的最好方式。而之所以选择这个算法,主要是因为实验室的雷达就是Robosense 16线雷达,而这个算法的介绍里提到已用该雷达测试过封装。
如果大家对本文中遇到的问题有好的建议,欢迎留言。
二、 环境配置可能遇到的坑
1. 常规安装流程
- 安装依赖
首先按照README.md里的Requirements装需要的库和Ros packages。注意,g2o不可以使用最新的,至少Ubuntu16.04(ros-kinetic)不可以。解决方法同样在README里列出来了。在此,直接引用: 后来我在melodic上编译hdl,发现直接用最新的g2o就可以了,应该是做了适配了。照着官方的README做即可。
可选项个人感觉意义不大。
- git clone
运行如下代码即可。如果速度过慢,参考我的另一篇博客提速。
cd ~/catkin_ws/src
git clone https://github.com/koide3/hdl_graph_slam.git
source devel/setup.bash
cd ..
catkin_make
2. catkin_make时warning
这部分信息我没保存,大致是和Eigen有关的warning和note,这里主要的原因是Eigen版本不合适。可以自行去Issue里找解决方案。
系统自带的Eigen是3.2.92,我查到的是要降到3.2.1,但我没找到3.2.1的资源,所以把它升到了Eigen3.3.7,同样编译通过。
查询Eigen版本的方法如下:
cd /usr/include/eigen3/Eigen/src/Core/util
gedit Macros.h
#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 2
#define EIGEN_MINOR_VERSION 92
表示版本为3.2.92。
补充:后来我以3.2.92版本去编译,至少编译通过了,功能也没有什么影响,所以应该可以忽略。
三、代码解析
这部分可以参考知乎专栏里的解读,链接如下:
hdl_graph_slam源码解读
需要注意的是,大神的解读是针对slam算法的相关步骤,而关于ros的node、topic、tf、rviz等设置都是略过不提的。而实际上,真的想了解这个软件包的运行机制,了解其通信机制和调用也很重要。因此,我其实还需要花更多的功夫去解读这个软件包的ros相关设置。
1. vs code 头文件的配置
Ubuntu环境下使用vs code是需要自己写json文件的,默认情况下,只能检索项目文件夹里存在的头文件,这会导致pcl,ros相关的include全都飘红,而且函数跳转功能也无法使用。
解决方法如下:
在co