Repository Summary
Description | Code for simplified LIO-SAM |
Checkout URI | https://github.com/zeal-up/simple-lio-sam.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2023-11-13 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
Name | Version |
---|---|
spl_lio_sam | 1.0.0 |
README
文章解读
本项目目的及特点介绍
[LIOSAM]源代码虽然不能说庞大,甚至可以说简单,因为整个代码库主要只要5个文件。
但是里面每个模块都通过ROS的topic与其他模块有紧密的联系。
整个的流程对新手十分不友好,下图是[LIOSAM]原本运行时的
rqt_graph
第二个复杂之处在与LIOSAM框架设计到的知识点和工具较多,至少要熟悉ROS,gtsam,pcl
几个库,算法层面需要熟悉点云匹配、IMU积分、因子图、三维转换
等。
对于熟悉SLAM的人来说可能较为简单上手,但是对于新入门的人来说则一开始会一头雾水。
基于上述这些原因,笔者进行了SPL-LIO-SAM项目,希望能够以最大幅度帮助初学者理解[LIOSAM]框架及里面的算法细节。 本项目对[LIOSAM]做了如下改进
基于ROS2-humble实现
虽然LIOSAM源码中有一个ros2分支,但该分支的维护者并不是原作者,而且已经长时间没有人维护,且该分支存在一些bug没有被修复。为了能够在进行本项目的学习过程中
熟悉最新的ROS2框架,笔者在LIOSAM的ros2分支基础上,修复了存在的bug,同时将功能较为独立的Transformfusion
类抽取成独立的类。
为了便于上手及部署,笔者同时准备了适配的docker镜像供学习者使用。
简化
话题发布的简化
[LIOSAM]原始代码中有很多中间结果的发布,这些中间结果可以用来可视化及调试程序,但是对于学习者和开发者而言不仅意义不大,而且会在初始学习源码阶段误导学习者。
本项目在话题发布上进行大幅度简化
,简化后的设计如下:
简化后运行时的rqt_graph
:
坐标系简化
[LIOSAM]中实用的坐标系并不复杂,但是作者提供的urdf
包含了太多为了兼容性考虑的坐标系,这些坐标系对于实际运行和理解并没有用。因此,本项目基于ROS对坐标系的约束,将
坐标系关系树简化为如下:
保留算法及定义完整性
虽然本项目去除了很多非必要话题,同时对于一些非必要代码也进行了简化,但对一些学习算法有帮助的细节依旧保留。比如激光里程计在发布的时候有mapping/odometry
和mapping/odometry_incremental
两个话题,两个话题虽然类似但是背后却有很不同的函数,但同时两者合一又不影响算法的运行。因此采取的做法时在代码中保留这部分代码,同时加以解释,但发布时只发布其中一个话题。
完善的注释及流程图
网上其实对[LIOSAM]源码的注释并不少,比如[LIO-SAM-note]和[LIO-SAM-DetailedNote],还有一些blog也对源码做了解释,但是都不太完美,同时缺少流程性的组织。本项目借鉴了一些开源项目的注释,并加以完善,可以说,本项目是目前对[LIOSAM]注释最完善的开源项目。
为了最为清晰的展示[LIOSAM]算法不同模块的流程,该项目还对各个模块流程进行梳理,建立了完善的流程图设计
运行环境搭建
本项目提供基于ROS2-humble
的镜像,并提供脚本可直接在镜像中启动可视化程序
数据
本项目同时提供转为rosbag2
格式的数据包
链接:https://pan.baidu.com/s/1hhHvn96uEsDYJNss3Z209Q
提取码:2478
export DATA_DIR=/path/to/download/ros2bag/dir
本项目中默认的配置文件params_default.yaml
可以直接运行下面的数据:
- park_dataset
- walking_dataset
- garden_dataset
环境部署
git clone git@github.com:zeal-up/Simple-LIO-SAM.git
cd Simple-LIO-SAM
./docker_run.sh -h # show help message
./docker_run.sh -c /path/to/code/repo -d $DATA_DIR
# ./docker_into.sh # enter the container next time
编译
cd Simple-LIO-SAM
./docker_into.sh
# 下面命令在镜像中执行
cd ~/ros_ws/
mkdir src && cd src &&ln -s /home/splsam/codes ./
cd ..
source /opt/ros/humble/setup.bash
colcon build --packages-select spl_lio_sam
运行
```bash
docker镜像下运行
cd ~/ros_ws source ./install/setup.bash ros2 launch spl_lio_sam run.launch.py
File truncated at 100 lines see the full file