主题:Livox雷达LIO+闭环检测优化
开源地址:LiDAR SLAM
该开源为 Livox雷达实现了一个一体化且即用型的 LiDAR 惯性里程计系统。
前端基于基于开源里程计框架LIO-Livox获取里程计信息,另外添加了更多的约束和功能来增强建图的性能。
在另一个ros功能包Livox-Localization中提供了一个简单的基于激光雷达地图的定位模块。
总结:
LIO-Livox用于里程计部分, ScanContext 用于闭环部分和interactive_slam用于地图编辑部分
1 特点
1.1 闭环检测
在 LCD 部分,使用ScanContext 执行闭环检测,然后将闭环约束添加到优化求解器中。借助 LCD 模块,能够缩小差距并补偿大型环境中扫描匹配的累积平移误差。
1.2 地面约束
为了避免沿 Z 轴漂移,LOAM(激光雷达里程计和映射)算法中出现的一般问题,我们将地面约束(平面检测由 LIO-Livox 完成)作为 hdl_graph_slam 添加到优化求解器中。
1.3 来自多个 Rosbag 的地图合并
在实践中,我们通常会多次收集环境数据,因此我们需要一个功能来融合来自多个 rosbag 的地图信息。在这个实现中,我们使用 GPS 信息(可选)将不同时间采集的 LiDAR 扫描转换为一个坐标系,然后使用 ScanContext 和 ICP 找到精细匹配结果。同时,我们在后端维护一个终身优化向量来存储之前的关键帧。通过这种方法,我们能够连接不同集合中的扫描。
1.4 GPS 因素
我们还提供 GPS 因素来帮助进行地图绘制。这只是一种可选的选择。如果没有 GPS 信息,整个系统也可以工作。
1.5 兼容映射编辑器interactive_slam
interactive_slam是一个开源的基于 3D LiDAR 的映射框架。我们添加了一项功能,以与interactive_slam兼容的格式输出映射结果,通过此功能,您可以轻松编辑映射结果并获得更准确的 LiDAR 地图。同时,如果您在 Livox 旁边有一台摄像头,我们还提供了一项借助mmdection和简单的 LiDAR 点投影去除虚拟移动物体的功能。
2 编译运行
2.1 所需环境
Ubuntu (tested on 16.04 and 18.04)
ROS (tested with Kinetic and Melodic)
Eigen
Ceres Solver
PCL
livox_ros_driver
libsuitesparse
2.2 编译
cd ~/catkin_ws/src
git clone https://github.com/PJLab-ADG/LIO_Livox_SLAM.git
cd ..
catkin_make
2.3 运行
无 GPS data
cd ~/catkin_ws
source devel/setup.bash
roslaunch livox_mapping livox_mapping.launch save_path:="PATH_TO_SAVE_SLAM_POSE_RESULT"
有
cd ~/catkin_ws
source devel/setup.bash
roslaunch livox_mapping livox_mapping.launch useRTK:="true" save_path:="PATH_TO_SAVE_SLAM_POSE_RESULT"
另起终端:
cd ~/catkin_ws
source devel/setup.bash
roslaunch livox_odometry livox_odometry.launch save_path:="PATH_TO_SAVE_ODOM_RESULT_in_txt"
另起终端,播放bag:
rosbag play YOUR_ROSBAG.bag
2.4 多包合并
有多个bag包(同一个场景),可以在第一个 odometry 线程运行结束时重新启动 odometry 线程并播放下一个包。
在里程计线程的终端中,使用Ctrl+C关闭旧的里程计线程。
在里程计线程的终端中,使用以下命令启动一个新的里程计线程
roslaunch livox_odometry livox_odometry.launch save_path:="PATH_TO_SAVE_ODOM_RESULT_in_txt"
2.5作者的数据集
作者提供上海一个工业园区收集的几个测试 数据集,
百度网盘下载:
Link:https://pan.baidu.com/s/17ElBOWiFVr68975FtXY8ZA
Password:pjop
2.6 Docker 镜像
为了进行快速方便的测试,更推荐使用docker
拉取:
docker pull siyuanhuang95/livox_slam:release
执行 docker 运行命令。根据需要使用 -v 将 docker 绑定到本地计算机。
docker run --gpus all -it -p 3316:22 --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix --env="DISPLAY=$DISPLAY" siyuanhuang95/livox_slam:release /bin/bash
允许 Docker 中的 RVIZ 在主机 PC 中运行。在本地机器中:
xhost +
参考:https://github.com/PJLab-ADG/Livox-Mapping/blob/main/README.md