hdl_graph_slam及hdl_localization实践记录
激光雷达建图&定位开源方法hdl_graph_slam及hdl_localization实践记录
目的
使用激光雷达完成室内外环境中的地图构建以及全局定位。
方法
激光雷达SLAM方法为hdl_graph_slam, 链接如下hdl_graph_slam
激光雷达全局定位方法(重定位方法)为hdl_localization, 链接如下hdl_localization
软硬件配置
软件:
Ubuntu16.04
ros kinetic
pcl 1.7
eigen 3.2
g2o
硬件:
CPU Intel® Core™ i7-8700K CPU @ 3.70GHz × 12
内存 15.6 GiB
Velodyne 32线激光雷达
北斗星通IMU
使用流程
安装hdl_graph_slam
参考github页面即可,详情见博客Lachiven-hdl_graph_slam配置
注意:
- 对于Ubuntu16.04,pcl的安装方式非常简单:sudo apt-get install libpcl-dev
详情见博客pcl安装
不建议编译源码安装,本人出现过无法找到头文件的报错,只能重装系统解决。 - g2o在github的官方仓库在2020年四月进行过更新,更新后依赖Eigen3.3。 如果只有Eigen3.2,请使用其历史版本20170730_git
- 若采用单独编译某个包的方法,在编译hdl_graph_slam与hdl_graph_slam之前,首先需要编译ndt_omp
安装hdl_graph_slam
所有依赖与hdl_graph_slam相同,将git源码放在工作空间src下随后进行编译即可。
建图
首先打开雷达和imu驱动,随后录制数据包。
停止录包后,关闭雷达和imu节点。进入hdl_graph_slam工作空间,输入以下命令
rosparam set use_sim_time true
roslaunch hdl_graph_slam hdl_graph_slam_inin.launch
roscd hdl_graph_slam/rviz
rviz -d hdl_graph_slam.rviz
rosbag play --clock ***.bag
保存地图
输入以下命令
rosservice call /hdl_graph_slam/save_map "utm: false
resolution: 0.05
destination: '/home/junbo/Dataset/RobotDrive202009/hdl400.pcd'"
注意:以上utm resolution destination 三个选项之间回车隔开
重定位
为了实时运行,首先需要修改launch文件,将其中
<!-- in case you use velodyne_driver, comment out the following line -->
<node pkg="nodelet" type="nodelet" name="$(arg nodelet_manager)" args="manager" output="screen"/>
注释掉,变为
<!-- in case you use velodyne_driver, comment out the following line -->
<!--<node pkg="nodelet" type="nodelet" name="$(arg nodelet_manager)" args="manager" output="screen"/>-->
同时,需要将雷达和imu topic名字换为自己需要的
<launch>
<!-- arguments -->
<arg name="nodelet_manager" default="velodyne_nodelet_manager" />
<arg name="points_topic" default="/velodyne_points" />
<arg name="imu_topic" default="/imu" />
<arg name="odom_child_frame_id" default="velodyne" />
在这里我的topic名字为 /imu 和 /velodyne
打开雷达和imu节点,输入以下命令
rosparam set use_sim_time false
roslaunch hdl_localization hdl_localization_inin.launch
roscd hdl_localization/rviz
rviz -d hdl_localization.rviz
注意
- 如果进行纯定位时的初始位姿在地图坐标系附近,在launch文件中
可以将 “specify_init_pose" 设为 ”true“,这样,其默认的三维位置(0,0,0)和默认的表示旋转的四元数(0,0,0,1)就可以很好的给予点云一个初始状态,有利于其后续匹配和重定位。 - 如果想在地图中任意位置进行重定位,需要在开启
rviz -d hdl_localization.rviz
后,选择rviz上方的2D pose estimator,并在地图中左键点击和鼠标拖动,选择一个与真实位置相近的位置与航向。
效果

建图效果,下方为车道,右上为车库(使用pcl_viewer查看)

以上为重定位效果。注意:地图起点在下方道路中央,重定位初始位置在车库内,初始位姿估计由rviz给出,给出初始位姿五秒内点云可完成配准过程,即完成重定位。

局部特写。注意:黄色点云为地图点,绿色部分为地图中新出现的梯子和人员。可见该方法对地图变化具有一定的鲁棒性。
总结
在本项目的硬件配置和运行环境中,hdl_graph_slam的同时定位与建图与其他开源方法相比似乎没有明显优势,但其配套的hdl_localization却提供了相当方便与可靠的重定位功能。
更多推荐



所有评论(0)