资讯动态

LIO-SAM 上手指南:激光雷达惯性里程计如何又快又稳

发布时间:2026/10/17 10:32:14 来源:尧图企业网站定制
LIO-SAM 上手指南激光雷达惯性里程计如何又快又稳【免费下载链接】LIO-SAMLIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping项目地址: https://gitcode.com/GitHub_Trending/li/LIO-SAMLIO-SAM 是一个开源的紧耦合激光雷达惯性里程计与建图 ROS1 包通过平滑与映射Smoothing and Mapping方法融合激光雷达和 IMU 数据输出实时里程计与全局点云地图。本文带你从零梳理它的系统架构、两种部署方式、关键参数调优、数据校验和常见坑点目标是让你尽快在自己的传感器平台上把 LIO-SAM 跑起来。 能力速览先看懂 LIO-SAM 强在哪你一定遇到过这类问题纯激光雷达做里程计轨迹跑越远漂得越离谱改用 ICP 逐帧配准计算量又跟不上数据频率。LIO-SAM 的做法是把 IMU 直接拉进优化框架用因子图统一求解而不是事后拼接。它的核心机制是双因子图全局因子图贯穿整段轨迹融合激光雷达里程计因子和可选的 GPS 因子负责全局位姿与建图实现在 mapOptmization.cpp。IMU 预积分因子图周期性重置在 IMU 频率上融合 IMU 与激光雷达里程计因子同时在线估计 IMU 偏置实现在 imuPreintegration.cpp。得益于这套设计系统优化速度最高可达实时频率的 10 倍手持平台也能稳定运行。LIO-SAM 系统架构激光雷达里程计、IMU 预积分、地图优化三大模块协同工作提前说明两个边界LIO-SAM 目前只支持机械式激光雷达且需要 9 轴 IMU 参与姿态初始化选型时就要考虑到。 快速跑起来两种部署方式各取所长源码编译推荐给想改代码的开发者先装好依赖ROS官方在 Kinetic / Melodic 上验证过、navigation、robot-localization、robot-state-publisher以及 GTSAM 4.0 优化库。然后按 README 的流程编译mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://gitcode.com/GitHub_Trending/li/LIO-SAM.git cd .. catkin_makeDocker 容器推荐给想先跑通效果的新手仓库自带 Dockerfile已经内置 ROS Kinetic 与 GTSAM 环境不用一个个装依赖docker build -t liosam-kinetic-xenial .构建完成后用docker run启动容器即可。环境冲突多、或者只想快速验证 demo 的读者走这条路最省心。⚙️ 参数调优params.yaml 里最该动的 5 个参数核心参数全部集中在 config/params.yaml挑 5 个对效果影响最大的讲清楚。sensor / N_SCAN / Horizon_SCAN声明激光雷达型号、线数与水平分辨率。Velodyne 常见 16 / 32 / 64 线Ouster 需按 128 线配置Livox Horizon 则是 6 线、4000 水平分辨率。换传感器时这是第一处要改的地方。downsampleRate点云抽稀步长。默认 1 表示保留全部点64 线雷达计算压力大时改成 2 或 4计算量减半细节损失很小。extrinsicTrans / extrinsicRotIMU 相对激光雷达的外参是精度第一决定因素。建议先用标定工具求初值再手工验证转动传感器看加速度读数方向是否符合直觉。numberOfCores / mappingProcessInterval前者给地图优化模块分配的 CPU 核数后者是建图间隔秒。核多就调大核数卡顿就加大间隔两者配合着调。loopClosureEnableFlag回环检测开关。测试长轨迹时设为 true能直观看到轨迹被闭环修正的过程。 数据准备与校验这些是硬性门槛跑包之前按下面清单核对输入数据激光雷达点云包含每点的相对时间戳字段一般为 time10Hz 扫描下数值在 0~0.1 秒之间IMU 去扭曲依赖它。包含激光环号ring系统靠它在矩阵中组织点。话题名与pointCloudTopic一致默认是 points_raw。IMU 数据9 轴 IMU输出频率建议 200Hz 以上频率越高精度越好。坐标系遵循 ROS REP-105 约定x 前、y 左、z 上。在 params.yaml 中填入两组外参extrinsicRot给加速度extrinsicRPY给姿态。注意它们可能不一样取决于 IMU 厂商对内部坐标的定义。IMU 与激光雷达坐标系关系LIO-SAM 数据融合精度的关键就是这组外参标定特别提醒Ouster 的内置 IMU 只有 6 轴不满足要求必须外挂一颗 9 轴 IMU 再采数据。Ouster 激光雷达实物内置 IMU 不满足 9 轴要求需外接九轴 IMU另外仓库配有多组默认参数即可运行的样例数据集建议先用样例数据确认环境正常再切到自己的数据。手上是 KITTI 原始数据的话可以用 config/doc/kitti2bag/ 里的脚本转换成 bag 文件。✅ 验证与调优确认系统是健康的启动后按模块逐个确认起主节点roslaunch lio_sam run.launch回放数据rosbag play your-bag.bag -r 3在 Rviz 中依次查看点云地图Map (cloud)、轨迹Odometry日志里确认 IMU 数据先于点云稳定流入。一切正常后可以开始针对性调优。两个典型场景案例一CPU 扛不住。把numberOfCores调成实际核数同时把downsampleRate提到 2观察帧率是否恢复、地图细节是否可接受。案例二户外大场景轨迹漂移。开启loopClosureEnableFlag: true回放降速到-r 1回环跑 ICP比较耗时然后在 Rviz 里切换查看 Map (global)对比修正前后的地图差异。建图完成后可导出结果rosservice call /lio_sam/save_map 0.2 ~/LIO-SAM_map/服务会把全局地图保存为 PCD 文件。Livox Horizon 传感器下的 LIO-SAM 实时建图演示可直观验证里程计跟踪与建图质量 高频问题速查现象 → 原因 → 解法现象轨迹呈 Z 字形抖动。原因激光雷达与 IMU 数据时间戳不同步。解法检查驱动的时间戳模式核对点云内相对时间字段是否正确。现象回放一开始 base_link 就上下跳动。原因IMU 外参错误重力加速度方向反了。解法重新核对extrinsicRot与extrinsicTrans用手持旋转传感器验证读数方向。现象mapOptimization 节点崩溃。原因GTSAM 库版本不兼容。解法按 README 指引安装指定版本的 GTSAM4.0 PPA。现象GPS 里程计话题出不来。原因imu_frame_id、gps_frame_id与base_link之间缺少 TF 变换。解法按 robot_localization 的文档补齐坐标系变换关系。 进阶方向跑稳之后往哪走回环检测增强内置回环是 LeGO-LOAM 风格的 ICP 演示版追求长时高精度闭环的读者可以研究 ScanContext 系方案替换。GPS 融合已有 GNSS 数据源的室外场景接上 navsat 模块做长距离漂移校正跑车辆级场景的读者必配。ROS2 迁移官方仓库提供ros2分支需要在新版 ROS 平台上落地的开发者可以参考其移植方式。建议的下一步下载一组官方样例数据集用roslaunch lio_sam run.launch完整走一遍流程先确认全链路跑通。为你自己的传感器标定 IMU 外参并用 IMU 调试输出验证方向是否正确。分别调整downsampleRate与numberOfCores记录不同配置下的帧率与地图质量找到你这台机器的最佳组合。【免费下载链接】LIO-SAMLIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping项目地址: https://gitcode.com/GitHub_Trending/li/LIO-SAM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑