LIO-SAM实战指南:激光雷达惯性里程计安装与避坑 LIO-SAM实战指南激光雷达惯性里程计安装与避坑【免费下载链接】LIO-SAMLIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping项目地址: https://gitcode.com/GitHub_Trending/li/LIO-SAM机器人拐角时轨迹猛地一跳跑远一点地图就叠出重影——这是激光雷达惯性里程计最让人头疼的两个毛病。LIO-SAM 是一个基于因子图优化的紧耦合激光雷达惯性里程计与建图系统IMU 和激光雷达数据融合后能以 IMU 频率输出实时轨迹跑完还能存出高精度的点云地图。架构不复杂IMU 预积分、点云投影、特征提取、地图优化四个节点串成一条流水线后面会逐层拆开看。30 秒跑通一键 Docker 启动仓库里自带 Dockerfile镜像基于 ROS Kinetic构建时会自动拉取项目源码并完成编译你只需要一个已有的 bag 文件没有的话可以从仓库 README 里的 Sample datasets 部分下载官方示例数据集 Walking / Park / Garden。进入仓库根目录执行docker build -t liosam-kinetic-xenial . docker run --init -it -e DISPLAY$DISPLAY liosam-kinetic-xenial bash roslaunch lio_sam run.launch rosbag play your-bag.bag -r 3这时候 RViz 会弹出来你应能看到机器人标记 base_link 跟着数据播放移动Map (cloud) 里的点云地图一帧一帧长出来。看到这一幕说明整条链路已经通了。环境搭建从零到可用Melodic GTSAM 4.0不用 Docker 的话先对一下机器配置组件推荐最低操作系统Ubuntu 18.04 LTSUbuntu 16.04 LTSROSMelodicKineticCPU四核八线程双核四线程内存16 GB8 GBGTSAM4.0 系列PPTA 源同左基础系统包LIO-SAM 依赖 ROS 的导航、状态发布这几个组件。sudo apt update sudo apt install -y ros-melodic-navigation \ ros-melodic-robot-localization \ ros-melodic-robot-state-publisher✅ 验证方式rospack find robot_state_publisher能输出包路径。核心库 GTSAM因子图优化全靠它必须装 PPA 源里的 4.0 系列。sudo add-apt-repository ppa:borglab/gtsam-release-4.0 sudo apt update sudo apt install -y libgtsam-dev libgtsam-unstable-dev✅ 验证方式ldconfig -p | grep gtsam能看到 gtsam 4.0.x 的库文件。⚠️ GTSAM 版本不对编译时会出现undefined reference to gtsam::Pose3或者运行时 mapOptimization 直接崩溃。另外这个仓库是 ROS1 原版实现Kinetic / Melodic 开箱即用Noetic 上需要手动修改源码中的 C 标准特性建议直接留在 Melodic。项目本体克隆、编译、写环境变量一条链搞定。mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://gitcode.com/GitHub_Trending/li/LIO-SAM.git cd .. catkin_make -j4 echo source ~/catkin_ws/devel/setup.bash ~/.bashrc source ~/.bashrc✅ 验证方式rospack find lio_sam输出包路径。配置解析params.yaml 里真正要改的 5 个参数所有参数集中在 config/params.yaml大部分有默认值真正不改就会出问题的就这几个sensor/N_SCAN/Horizon_SCAN— 告诉系统你用的是哪种雷达、多少线。推荐值按传感器实配16 线 Velodyne 用velodyne / 16 / 1800128 线 Ouster 用ouster / 128 / 1024Livox Horizon 用livox / 6 / 4000。改错后果点被塞进错误的矩阵格子地图变形或者缺角。imuTopic/pointCloudTopic— 数据入口必须和你的 bag 主题逐字对上。推荐值points_raw/imu_raw官方数据集的默认命名。改错后果节点收不到数据轨迹从头到尾不动。extrinsicRot/extrinsicRPY/extrinsicTrans— IMU 到激光雷达的外参见下面的提示框。mappingProcessInterval— 地图优化触发间隔默认 0.15 秒。推荐值配置弱就放宽到 0.2。改错后果调太小 CPU 打满、频率上不去调太大地图更新明显滞后。downsampleRate— 点云降采样倍率默认 1。推荐值64/128 线雷达直接改 2。改错后果点太多优化变慢甚至挤爆内存。# config/params.yaml 关键片段 sensor: velodyne # velodyne / ouster / livox N_SCAN: 16 # 雷达线数 Horizon_SCAN: 1800 # 水平分辨率 imuTopic: imu_raw # 必须与数据主题一致 downsampleRate: 1 # 点太多时改为 2⚠️ 外参是最容易翻车的参数。转换后的姿态加速度应该是正值约 9.8看到负值就说明extrinsicRot/extrinsicRPY装反了。官方做法是把 src/imageProjection.cpp 里imuHandler()中的调试行取消注释手动转动传感器读数应随动作同步变化。注意extrinsicRot和extrinsicRPY对部分 IMU 型号并不相同别想当然填一样的。数据接入你的传感器数据要满足什么数据格式不对参数调得再精也没用。采集前对照这份清单过一遍只支持机械式激光雷达Livox 需配修改版驱动单帧 10 Hz 左右即可每个点必须带帧内相对时间戳10 Hz 转动的雷达点的时间应从 0 变化到 0.1 秒点云去畸变靠它每个点必须带 ring 通道号点云按它组织成矩阵IMU 必须是 9 轴需要 roll / pitch / yaw 做姿态初始化6 轴和 Ouster 内置 IMU 不支持IMU 采样率至少 200 Hz官方数据集用的是 500 Hz频率越高精度越好激光雷达与 IMU 的时间戳必须同源同步偏差过大会直接导致轨迹锯齿手上有 KITTI 原始数据的话可以用仓库里的 kitti2bag 脚本转成 bag验证闭环从冒烟测试到实车建图单模块冒烟先不急着跑全流程确认传感器数据进得来。roslaunch lio_sam run.launch rostopic hz /imu_raw你应该看到 IMU 频率稳定在 200 Hz 上下、点云约 10 Hz。想更踏实一点就按上面提示框里的方法开 IMU 调试输出转一转传感器看读数。数据集回放用官方示例数据集走完整链路默认参数直接可跑。roslaunch lio_sam run.launch rosbag play walking.bag -r 3预期效果RViz 里 base_link 跟着数据平滑移动点云地图逐帧累积、没有撕裂。实车采集自己的硬件接好后录 bag 的同时让系统在线建图跑完保存地图。rosbag record -O my_run.bag /points_raw /imu_raw rosservice call /lio_sam/save_map 0.2 /Downloads/LOAM/预期效果调用保存服务后指定目录下生成 PCD 地图文件打开就是一个完整场景。踩坑记录三个最常见的翻车现场轨迹锯齿、高频抖动→ 大概率是激光雷达和 IMU 时间戳没对齐。修复确认两者同钟源 → 检查点云 time 字段范围 → 用-r 1慢速回放定位跳变帧。base_link 一启动就上下蹦→ IMU 外参错了重力变成负值。修复看姿态加速度符号 → 核对 extrinsicRot 与 extrinsicRPY → 开调试输出手动转动校验。mapOptimization 启动即崩→ GTSAM 不是 PPA 里的 4.0 版本。修复按前文命令重装 → 删掉 build / devel 重新编译 → 用 ldconfig 确认版本号。性能调优榨干你的硬件如果用的是 64/128 线雷达可以把downsampleRate改成 2点量直接减半这是 CPU 负载下降最明显的一处如果你的 CPU 超过 4 核可以把numberOfCores调到与物理核数一致官方默认 4机器偏弱时则把mappingProcessInterval从 0.15 放宽到 0.2 秒用一点地图更新频率换稳定性如果只保存地图不需要盯着看可以关掉 run.launch 里的 RViz 模块省下的显存和内存相当可观性能参考值官方系统在示例数据集上可跑到实时速度的 10 倍IMU 预积分里程计按 IMU 频率200 Hz持续发布地图优化默认约 6~7 Hz 触发一次0.15 秒间隔回到开头那个场景拐角丢定位、长距离叠影到这一步都有了着落。接下来可以拿自己硬件的数据跑一圈完整闭环确认轨迹干净后再把loopClosureEnableFlag打开试试回环检测地图质量还能再上一个台阶。【免费下载链接】LIO-SAMLIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping项目地址: https://gitcode.com/GitHub_Trending/li/LIO-SAM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考