diff --git a/docs/source/index.rst b/docs/source/index.rst index 0ef490503edfe9e0a62d2550f1ff2bc0bf37f0bd..3c302e4c061c8ea8d934c4525ba67c3475fe98b6 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -55,6 +55,7 @@ openEuler ROS sig成立于2020年6月,主要目标是将ROS1/ROS2移植到open slam-nav/slam_gmapping_test_report.md slam-nav/slam_hector_test_report.md slam-nav/lidarslam_slam_installation.md + slam-nav/lio_sam_installation.md slam-nav/stage_ros.md slam-nav/cartographer.md slam-nav/orb_slam3_porting.md diff --git a/docs/source/slam-nav/image/lio_sam_1.png b/docs/source/slam-nav/image/lio_sam_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cd83de564908693a8db45832c020e0b63971c137 Binary files /dev/null and b/docs/source/slam-nav/image/lio_sam_1.png differ diff --git a/docs/source/slam-nav/image/lio_sam_2.png b/docs/source/slam-nav/image/lio_sam_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e797698b66667d98e3e74c61e79e736b9e3505 Binary files /dev/null and b/docs/source/slam-nav/image/lio_sam_2.png differ diff --git a/docs/source/slam-nav/image/lio_sam_3.png b/docs/source/slam-nav/image/lio_sam_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7e27c1e27dcede2de0ec0f987ca0755ec7e75f41 Binary files /dev/null and b/docs/source/slam-nav/image/lio_sam_3.png differ diff --git a/docs/source/slam-nav/lio_sam_installation.md b/docs/source/slam-nav/lio_sam_installation.md new file mode 100755 index 0000000000000000000000000000000000000000..45910f4b28db1777bc77b1eebf18e6337ff5a8d0 --- /dev/null +++ b/docs/source/slam-nav/lio_sam_installation.md @@ -0,0 +1,97 @@ +# LIO-SAM算法的源码安装与测试 + +LIO-SAM(Lidar-Inertial Odometry via Smoothing and Mapping)是一种紧耦合激光雷达与IMU的先进算法,通过因子图优化实现实时三维地图构建与定位。该算法融合激光扫描匹配、惯性导航预积分和回环检测,在ROS2框架下高效处理点云数据,广泛应用于自主导航和机器人地图绘制领域。 + +## 系统环境 + +操作系统: openEuler 24.03 + +ROS版本: ROS 2 Humble + +架构: x86 + +官方源代码: + +## 算法介绍 + +系统架构: + +![image](./image/lio_sam_1.png) + +核心模块 + +| 模块 | 主要功能 | 输入数据 | 输出数据 | 处理方法 | +| ---------- | ------------------------ | ------------------ | ----------------------- | ---------------------- | +| Lidar前端 | 点云预处理、特征提取 | 原始激光点云 | 去畸变点云、边线/面特征 | 去运动畸变、分类提取 | +| IMU预积分 | 惯性数据融合、状态预测 | IMU加速度、角速度 | 预积分因子、相对位姿 | 中值法积分、协方差传播 | +| 扫描匹配 | 点云配准、位姿估计 | 提取特征、历史地图 | 当前位姿估计 | ICP/KD树匹配 | +| 因子图优化 | 多源信息融合、位姿优化 | 各模块因子 | 优化后位姿、地图 | 非线性最小二乘求解 | +| 回环检测 | 重访位置识别、位姿图约束 | 点云特征、位姿历史 | 回环约束边 | 特征匹配、相似度判断 | +| 地图管理 | 全局地图维护、存储 | 优化点云 | 完整三维地图 | 分块存储、增量更新 | + +四个核心模块 + +| 模块名称 | 功能描述 | +| ------------------------- | ------------------------------------------------------------ | +| lio_sam_imageProjection | 利用IMU数据补偿运动畸变,将原始激光点云投影到范围图上并计算点的瞬时速度以实现前端去畸变。 | +| lio_sam_featureExtraction | 通过分析去畸变点云的局部曲率计算平滑度,标记遮挡点,提取边线和平面特征供后端匹配使用。 | +| lio_sam_imuPreintegration | 对相邻关键帧间的IMU测量进行因子预积分,估计IMU偏差并通过因子图优化输出IMU里程计。 | +| lio_sam_mapOptimization | 构建包含激光里程计、IMU预积分、GPS和回环检测因子的因子图,优化完整轨迹并生成全局一致地图。 | + +## 如何安装 + +首先下载以下依赖 + +``` +sudo dnf install ros-humble-perception-pcl \ + ros-humble-pcl-msgs \ + ros-humble-vision-opencv \ + ros-humble-xacro +``` + +源码编译gtsam() + +``` +git clone https://github.com/borglab/gtsam.git +cd gtsam +git checkout 4.2.0 +mkdir -p build && cd build +cmake .. +make -j$(nproc) +sudo make install +``` + +创建ros工作空间,下载lio-sam算法后放在src下 + +``` +git clone https://github.com/TixiaoShan/LIO-SAM.git +cd .. +colcon build +``` + +## 实机测试 + +在使用该算法的时候要注意时间戳和TF + +``` +ros2 launch lio_sam run.launch.py +#在另一个终端,用--clock参数回放bag +ros2 bag play walking_dataset_ros2/ --clock +``` + +便可以看到如下 +![image](./image/lio_sam_2.png) + +如何保存地图:使用如下命令,便可以在目录/Downloads/service_LOAM生成地图 + +``` +[openeuler@localhost ~]$ ros2 service call /lio_sam/save_map lio_sam/srv/SaveMap "{resolution: 0.2, destination: /Downloads/service_LOAM}" +requester: making request: lio_sam.srv.SaveMap_Request(resolution=0.2, destination='/Downloads/service_LOAM') + +response: +lio_sam.srv.SaveMap_Response(success=True) +``` + +![image](./image/lio_sam_3.png) + +‍