news 2026/10/17 2:31:18

用LIO-SAM跑通第一份实时激光雷达惯性里程计:30分钟的完整路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用LIO-SAM跑通第一份实时激光雷达惯性里程计:30分钟的完整路径

用LIO-SAM跑通第一份实时激光雷达惯性里程计:30分钟的完整路径

【免费下载链接】LIO-SAMLIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping项目地址: https://gitcode.com/GitHub_Trending/li/LIO-SAM

机器人带激光雷达在户外行走,需要实时拿到它的六自由度位姿。LIO-SAM的做法是把激光点云与9轴IMU放进两张因子图里融合,里程计层按IMU频率输出。本文跑通这条最短路径。

能力边界:9轴IMU前提与双因子图架构

  • 能做:激光里程计与IMU的紧耦合融合,地图层还可以挂GPS因子。系统维护两张因子图:imuPreintegration.cpp是里程计层,负责估计IMU偏置,周期性重置以在IMU频率下保持实时;mapOptimization.cpp是地图层,对激光里程计因子做全局优化,官方实测运行速度可达实时的10倍。

  • 不能做:不支持6轴IMU,roll/pitch初始化依赖9轴姿态,GPS航向初始化也依赖yaw;Ouster内置的6轴IMU无法使用,必须外接9轴IMU。Livox Horizon这类固态激光雷达只是最小适配,未做充分测试。主仓库是ROS1实现(Kinetic/Melodic测试过),ROS2在另一个分支。

  • 依赖什么:点云必须带时间通道(扫描内的相对时间,10Hz旋转时应在0~0.1s之间)和环号,点类型定义在 src/imageProjection.cpp 开头;IMU建议不低于200Hz(作者的设备是500Hz);优化核心是GTSAM 4.0。

最小运行环境搭建

先装依赖。图优化求解器GTSAM 4.0必须从官方PPA装,自行源码编译新版会直接让mapOptimization崩溃;另外三个ROS包一个不能少:

sudo apt-get install -y ros-melodic-navigation \ ros-melodic-robot-localization ros-melodic-robot-state-publisher sudo add-apt-repository ppa:borglab/gtsam-release-4.0 sudo apt-get install -y libgtsam-dev libgtsam-unstable-dev

然后把仓库克隆进工作空间编译。这个包除了GTSAM没有别的第三方依赖,一次catkin_make就能过:

mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://gitcode.com/GitHub_Trending/li/LIO-SAM cd ~/catkin_ws catkin_make

最后用示例walking数据集(唯一能用默认参数直接跑的bag)起节点、放包,播放速率3用来检验实时性是否达标:

roslaunch lio_sam run.launch # 另开终端 rosbag play your-bag.bag -r 3

启动后RViz会自动弹出,确认 "Map (cloud)" 在持续累积、激光云轨迹连续不跳变,就算通过。

直接影响结果的三个参数:外参、downsampleRate、numberOfCores

  • extrinsicRot/extrinsicRPY→ 默认是 config/params.yaml 里作者设备的占位矩阵 → 符号错则重力方向反了,启动即上下跳变;传感器的加速度与姿态坐标系不一致时两个矩阵必须不同 → 你的硬件安装方式与作者设备(Microstrain 3DM-GX5-25)不同时必改。
  • downsampleRate→ 默认1,不降采样 → 从1改到4,每帧点数从16×1800=28800降到16×450=7200,特征提取与scan-to-map计算量降为约1/4;室内地图过稀再调回1 → CPU占用飙升或建图帧率掉的时候动它。
  • numberOfCores→ 默认4 → 改到8能加快周边地图优化,上限是物理核心数,双核机器保持4或以下;建图频率还受mappingProcessInterval(默认0.15s,约6.7Hz)钳制 → 点云量增大(64线以上)时动它。

踩坑实录:轨迹跳变与Z字形的三个高频问题

我放了自己的数据bag,base_link在RViz里立刻上下跳动。排查后发现根因是外参矩阵符号:重力读数方向反了。按激光雷达坐标系约定(x前、y左、z上)把extrinsicRot对应行翻号后,轨迹恢复平稳。

第二个问题,轨迹在直路上走出Z字形。点云与IMU格式都核对过,最后查到时间戳:雷达驱动的time通道给的是绝对时间,不是扫描内相对时间(10Hz旋转时应为0~0.1s)。换成相对时间版本后,Z字消失。

第三个,用Ouster的同学注意:它的内置IMU只有6轴,LIO-SAM无法用它初始化roll/pitch,姿态从第一帧就是错的。我换成外接9轴IMU固定在传感器上,问题才消失。

调优实验:一次回环播放速度调整记录

改动前:loopClosureEnableFlag: true,bag播放速率-r 3,ICP式回环跟不上,闭合后轨迹出现跳变。改动后:播放速率改-r 1,同一段1分钟bag的墙钟时间从20秒变为60秒。变化:回环修正平滑,可用Garden数据集复验这个设置。

下一步

这里的回环是从LeGO-LOAM改的ICP实现,召回率要求更高时可以去换ScanContext方案;建图结果用/lio_sam/save_map服务导出,分辨率参数传0.2得到PCD文件。先用示例数据集跑一遍,确认RViz中轨迹连续、地图不漂移,再接入自己的传感器数据。

【免费下载链接】LIO-SAMLIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping项目地址: https://gitcode.com/GitHub_Trending/li/LIO-SAM

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 2:30:44

SQL Server到MySQL迁移:完整方法论与避坑指南全解

从 SQL Server 说实话,2024 年了还有人在纠结要不要从 SQL Server 迁到 MySQL,我挺意外的。但更意外的是,居然还有人在网上分享所谓的“一键迁移工具”,点进去一看全是广告。数据库迁移这种事情,永远没有一键完成&…

作者头像 李华
网站建设 2026/10/17 2:28:45

LS3210:卫星 LNB 与射频前端的偏置“小管家”

一、产品概述LS3210 是绍兴芯谷科技(Silicore)推出的一款带极性切换功能的 FET 偏置控制电路,主要用于卫星接收 LNB、蜂窝电话、PMR(个人移动无线电)等领域,特别适合 C 波段及中星九号等 LNB 场合使用。该芯…

作者头像 李华
网站建设 2026/10/17 2:28:43

使用YOLOv8创建一个铁路轨道缺陷检测系统 从训练铁轨轨道缺陷检测数据集,数据集准备、模型训练、评估、结果可视化以及简易用户界面开发

使用YOLOv8创建一个铁路轨道缺陷检测系统 从训练铁轨轨道缺陷检测数据集,数据集准备、模型训练、评估、结果可视化以及简易用户界面开发 文章目录1. 环境设置2. 数据预处理3. 模型定义与训练4. 评估5. 结果分析与可视化6. 用户界面开发(Flask应用&#x…

作者头像 李华
网站建设 2026/10/17 2:28:31

基于MP2642GR-Z与STM32L151ZD的两串电池主动均衡方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华