LIO-SAM 算法在 Ubuntu 22.04 与 ROS2 Humble 环境下的仿真部署实战
1. 背景与原理
传统的激光雷达里程计通常依赖 ICP(Iterative Closest Point)算法来匹配连续帧点云。虽然 ICP 能计算刚体变换,但在大角度运动或点云畸变严重时容易发散。因此,现代方案倾向于多传感器融合,将 IMU、GPS 等数据纳入状态估计。
融合方式主要分为:
- 松耦合:各传感器独立输出结果后加权融合,实现简单但精度受限。
- 紧耦合:底层原始数据直接参与联合优化,鲁棒性更高,是 LIO-SAM 的核心思路。
1.1 点云去畸变处理
激光雷达扫描过程中存在时间差,导致点云几何畸变。LIO-SAM 利用 IMU 的高频数据对每个点进行时间补偿,还原真实空间位置。
1.2 因子图优化
算法基于因子图框架,主要包含以下变量与因子:
- 变量类型:机器人位姿状态。
- IMU 预积分因子:处理 IMU 噪声与偏置,推断短时运动。
- Lidar 里程计因子:提取特征并计算相对变换。
- 回环闭合因子:检测闭环以消除累积漂移。
2. 环境准备与配置
本教程基于 Ubuntu 22.04 + ROS2 Humble + GTSAM 4.1.1 环境。请确保系统已安装基础开发工具。
2.1 编译环境搭建
增加虚拟内存
编译大型 C++ 项目时内存占用较高,建议设置 Swap 防止中断。
# 创建 4GB Swap 文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 验证
free -h
安装 GTSAM 4.1.1
从官方仓库下载源码并编译:
cd ~/Downloads
git clone https://github.com/borglab/gtsam.git
cd gtsam && git checkout tags/4.1.1 -b 4.1.1
mkdir build && cd build
# 使用系统 Eigen 库
cmake -DGTSAM_USE_SYSTEM_EIGEN=ON ..
make -j$(nproc)
sudo make install
安装 ROS2 依赖
sudo apt update
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-pcl-conversions ros-humble-xacro ros-humble-robot-localization ros-humble-tf-transformations ros-humble-gazebo-ros-pkgs ros-humble-gazebo-ros ros-humble-gazebo-plugins ros-humble-gazebo-ros2-control -y
/opt/ros/humble/setup.bash

