背景
传统的激光雷达里程计常依赖 ICP(Iterative Closest Point)算法来匹配连续帧点云,计算刚体变换。虽然 ICP 能解决帧间对齐问题,但在大角度运动或点云畸变严重时容易发散。因此,结合 IMU 等传感器的紧耦合融合方案成为主流,通过因子图优化实时生成整体状态,显著提升精度与鲁棒性。
LIO-SAM 算法原理
点云去畸变处理
激光雷达扫描存在时间差,高速运动下会导致点云倾斜。LIO-SAM 利用 IMU 数据修正每个点的时间偏移,还原真实几何结构。关键步骤包括提供相对扫描点的时间戳以及环号(Ring ID),将点组织成矩阵结构以便后续处理。
因子图优化
算法核心基于因子图建模,主要包含变量类型与四种因子:
- IMU 预积分因子:推断机器人运动,补偿 IMU 噪声与偏置。
- Lidar 里程计因子:负责特征提取、关键帧选择及相对位姿估计。
- GPS 因子:引入绝对测量值消除长时漂移。
- 回环闭合因子:基于欧几里得距离检测环路,优化全局一致性。
环境准备与配置
依赖安装
编译前需确保系统内存充足,建议设置 Swap 防止编译崩溃。在终端执行以下命令创建 4GB 虚拟内存:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
free -h
随后下载并编译 GTSAM 4.1.1。解压源码后移至主目录并构建:
cd ~/Downloads
mv gtsam-4.1.1 ~/gtsam
cd ~/gtsam
mkdir build && cd build
cmake -DGTSAM_USE_SYSTEM_EIGEN=ON ..
make -j$(nproc)
sudo make install
验证安装是否成功可检查 /usr/local/include/gtsam 是否存在相关文件夹。
ROS2 环境配置
添加 ROS2 密钥源并更新软件列表:
sudo apt update && sudo apt install curl gnupg lsb-release -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo /etc/apt/sources.list.d/ros2.list > /dev/null
apt update

