hdl_graph_slam及hdl_localization实践记录

激光雷达建图&定位开源方法hdl_graph_slam及hdl_localization实践记录hdl_graph_slam及hdl_localization实践记录_第1张图片

目的

使用激光雷达完成室内外环境中的地图构建以及全局定位。

方法

激光雷达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配置
注意

  1. 对于Ubuntu16.04,pcl的安装方式非常简单:sudo apt-get install libpcl-dev
    详情见博客pcl安装
    不建议编译源码安装,本人出现过无法找到头文件的报错,只能重装系统解决。
  2. g2o在github的官方仓库在2020年四月进行过更新,更新后依赖Eigen3.3。 如果只有Eigen3.2,请使用其历史版本20170730_git
  3. 若采用单独编译某个包的方法,在编译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文件,将其中


  <node pkg="nodelet" type="nodelet" name="$(arg nodelet_manager)" args="manager" output="screen"/>

注释掉,变为



同时,需要将雷达和imu topic名字换为自己需要的

<launch>
  
  <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

注意

  1. 如果进行纯定位时的初始位姿在地图坐标系附近,在launch文件中
    可以将 “specify_init_pose" 设为 ”true“,这样,其默认的三维位置(0,0,0)和默认的表示旋转的四元数(0,0,0,1)就可以很好的给予点云一个初始状态,有利于其后续匹配和重定位。
  2. 如果想在地图中任意位置进行重定位,需要在开启
    rviz -d hdl_localization.rviz
    后,选择rviz上方的2D pose estimator,并在地图中左键点击和鼠标拖动,选择一个与真实位置相近的位置与航向。

效果

hdl_graph_slam及hdl_localization实践记录_第2张图片
建图效果,下方为车道,右上为车库(使用pcl_viewer查看)

hdl_graph_slam及hdl_localization实践记录_第3张图片

以上为重定位效果。注意:地图起点在下方道路中央,重定位初始位置在车库内,初始位姿估计由rviz给出,给出初始位姿五秒内点云可完成配准过程,即完成重定位。
hdl_graph_slam及hdl_localization实践记录_第4张图片
局部特写。注意:黄色点云为地图点,绿色部分为地图中新出现的梯子和人员。可见该方法对地图变化具有一定的鲁棒性。

总结

在本项目的硬件配置和运行环境中,hdl_graph_slam的同时定位与建图与其他开源方法相比似乎没有明显优势,但其配套的hdl_localization却提供了相当方便与可靠的重定位功能。

你可能感兴趣的:(激光雷达SLAM,github,c++,ubuntu,linux)