当前位置: 首页 > news >正文

LIO-SAM 完整安装教程(Ubuntu 20.04 + ROS Noetic + GTSAM 4.0)

前言

LIO-SAM (LiDAR-Inertial Odometry via Smoothing And Mapping) 是 Tixiao Shan 等人于 2020 年提出的紧耦合激光-惯性- GPS里程计与建图系统。它在 LeGO-LOAM 的基础上加入了 IMU 预积分因子、GPS 因子和回环检测因子,使用 GTSAM 的 iSAM2 增量优化器进行联合优化,实现了全局一致的高精度3D地图构建

GitHub: https://github.com/TixiaoShan/LIO-SAM
论文:LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping, Shan et al., IROS 2020


1. 系统环境要求

项目要求说明
操作系统Ubuntu 18.04 / 20.04 LTS本文以 20.04 + ROS Noetic 为例
ROSMelodic / Noetic必须
编译器GCC 7.5+C++14
CMake3.3+
内存8GB+
GPU无要求纯CPU计算
依赖GTSAM 4.0+, PCL, Eigen3, OpenCVGTSAM 是最容易出错的依赖

2. 依赖库全景图

LIO-SAM ├── ROS Noetic(通信 + 可视化) │ ├── roscpp, sensor_msgs, nav_msgs │ ├── pcl_ros / pcl_conversions │ ├── tf / tf2 / tf2_ros │ ├── robot_localization(可选:GPS融合) │ └── rviz ├── GTSAM 4.0+ —— 因子图优化引擎(核心!) │ ├── iSAM2 增量优化器 │ ├── IMU 预积分因子 │ └── 各种因子类型 ├── PCL 1.10+ —— 点云处理 ├── Eigen3 —— 线性代数 ├── OpenCV 4.x —— 仅用于可视化 └── Ceres Solver —— 间接依赖(GTSAM可能用到)

⚠️最重要的坑:GTSAM 版本必须是4.0 或更高。Ubuntu 20.04 apt 源的 GTSAM 版本可能太旧,推荐从源码编译 GTSAM 4.0.2 或 4.1.0。


3. 第一步:安装 ROS Noetic

# 添加 ROS 源sudosh-c'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'sudoaptinstallcurlcurl-shttps://raw.githubusercontent.com/ros/rosdistro/master/ros.asc|sudoapt-keyadd-# 安装sudoaptupdatesudoaptinstall-yros-noetic-desktop-full# 初始化sudorosdep init rosdep update# 环境变量echo"source /opt/ros/noetic/setup.bash">>~/.bashrcsource~/.bashrc

4. 第二步:安装基础依赖

# PCL 点云库sudoaptinstall-ylibpcl-dev pcl-tools# ROS PCL 桥接包sudoaptinstall-yros-noetic-pcl-ros ros-noetic-pcl-conversions\ros-noetic-pcl-msgs# Eigen3sudoaptinstall-ylibeigen3-dev# OpenCVsudoaptinstall-ylibopencv-dev# robot_localization(GPS 融合需要)sudoaptinstall-yros-noetic-robot-localization\ros-noetic-geographic-msgs# 可视化sudoaptinstall-yros-noetic-rviz ros-noetic-rqt# 基础工具sudoaptinstall-ybuild-essential cmakegitlibboost-all-dev

5. 第三步:编译安装 GTSAM 4.0.2

这是最容易出错的步骤。GTSAM 是 LIO-SAM 的核心优化引擎。

# 下载 GTSAM 4.0.2gitclone https://github.com/borglab/gtsam.gitcdgtsamgitcheckout4.0.2# 安装编译依赖sudoaptinstall-ylibboost-all-dev libtbb-dev# 编译(关键:必须加以下 CMake 参数!)mkdirbuild&&cdbuild cmake..\-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF\-DGTSAM_USE_SYSTEM_EIGEN=ON\-DGTSAM_BUILD_EXAMPLES_ALWAYS=OFF\-DGTSAM_BUILD_TESTS=OFF\-DCMAKE_BUILD_TYPE=Releasemake-j$(nproc)sudomakeinstall# 更新库路径sudoldconfig# 验证安装ls/usr/local/lib/libgtsam.sols/usr/local/include/gtsam/

GTSAM 编译参数说明

参数含义为什么需要
GTSAM_BUILD_WITH_MARCH_NATIVE=OFF不针对本机CPU优化否则可能在不同机器上无法运行
GTSAM_USE_SYSTEM_EIGEN=ON使用系统 Eigen避免版本冲突
GTSAM_BUILD_TESTS=OFF不编译测试大幅减少编译时间
GTSAM_BUILD_EXAMPLES_ALWAYS=OFF不编译示例同上

GTSAM 版本不匹配的典型报错

error: 'class gtsam::PreintegratedImuMeasurements' has no member named '...' error: no matching function for call to 'gtsam::ISAM2::update(...)'

如果遇到这些错误,说明 GTSAM 版本不对。卸载重装:

sudomakeuninstall# 在 GTSAM build 目录下sudorm-rf/usr/local/include/gtsamsudorm-f/usr/local/lib/libgtsam*

6. 第四步:创建工作空间并编译 LIO-SAM

# 创建工作空间mkdir-p~/catkin_ws/srccd~/catkin_ws/src# 克隆 LIO-SAMgitclone https://github.com/TixiaoShan/LIO-SAM.git# 安装 ROS 依赖cd~/catkin_ws rosdepinstall--from-paths src --ignore-src-r-y# 编译catkin_make -j$(nproc)# 设置环境变量echo"source ~/catkin_ws/devel/setup.bash">>~/.bashrcsource~/.bashrc

7. 第五步:下载测试数据集

官方示例(Walking Dataset)

# LIO-SAM 作者提供的示例数据wgethttps://drive.google.com/uc?id=1A8HNL3BHYo8oQrDzFXrkYxHx46GSJStR\-Ocasual_walk.bag

KITTI 数据集

LIO-SAM 也支持 KITTI 数据集(需自行转换为 ROS bag 格式)。

自定义数据集要求

自己的 bag 文件需要包含以下话题:

  • /velodyne_points/ouster/points:LiDAR 点云
  • /imu/data:IMU 数据(加速度计 + 陀螺仪)
  • /gps/fix(可选):GPS 数据(sensor_msgs/NavSatFix)

8. 第六步:运行测试

# 终端1:启动 LIO-SAMroslaunch lio_sam run.launch# 终端2:播放数据包rosbag play YOUR_BAG.bag--clock-r1

运行成功后,RViz 中会显示:

  • 白色点云:当前帧的角点
  • 彩色点云:全局地图
  • 红色线条:里程计轨迹(lio_sam/path)
  • 坐标轴:当前位姿
  • 绿色线条:GPS 轨迹(如果有GPS数据)

9. 配置文件参数说明

# config/params.yaml 核心参数# ─── 传感器配置 ───lio_sam/imu_topic:"/imu/data"# IMU 话题lio_sam/lidar_topic:"/velodyne_points"# LiDAR 话题# ─── LiDAR 参数 ───lio_sam/N_SCAN:16# 扫描线数(VLP-16=16, HDL-64=64, Ouster OS1=128)lio_sam/Horizon_SCAN:1800# 每条线的水平点数lio_sam/edgeThreshold:1.0# 角点曲率阈值lio_sam/surfThreshold:0.1# 面点曲率阈值lio_sam/lidarMinRange:1.0# 最小有效距离(m)lio_sam/lidarMaxRange:100.0# 最大有效距离(m)# ─── IMU 参数 ───lio_sam/imuAccNoise:3.993957088e-03# 加速度计噪声密度lio_sam/imuGyrNoise:1.563634394e-03# 陀螺仪噪声密度lio_sam/imuAccBiasN:6.435665935e-05# 加速度计随机游走lio_sam/imuGyrBiasN:3.564031869e-05# 陀螺仪随机游走lio_sam/imuGravity:9.80511# 重力加速度(m/s²)# ─── 外参 ───lio_sam/extrinsicRot:[-1,0,0,0,1,0,0,0,-1]# LiDAR→IMU 旋转lio_sam/extrinsicRPY:[0,1,0,1,0,0,0,0,1]# LiDAR→IMU RPY# ─── 回环检测 ───lio_sam/loopClosureEnableFlag:true# 启用回环检测lio_sam/loopClosureFrequency:1.0# 回环检测频率(Hz)lio_sam/historyKeyframeSearchRadius:15.0# 回环搜索半径(m)lio_sam/historyKeyframeSearchNum:25# 回环搜索关键帧数# ─── GPS ───lio_sam/gpsUseFlag:false# 是否使用GPS

10. 常见问题排查

问题1:GTSAM 编译失败

error: 'tbb/tbb.h' file not found

解决

sudoaptinstall-ylibtbb-dev

问题2:LIO-SAM 找不到 GTSAM

Could not find a package configuration file provided by "GTSAM"

解决

# 确保 GTSAM 安装正确ls/usr/local/lib/cmake/GTSAM/# 如果目录不存在或内容为空,重新编译安装 GTSAM# 如果存在但 CMake 仍找不到exportGTSAM_DIR=/usr/local/lib/cmake/GTSAM

问题3:运行时崩溃 “bad_alloc”

terminate called after throwing an instance of 'std::bad_alloc'

解决

  • 减小historyKeyframeSearchNum(从 25 降到 10)
  • 增加surroundingKeyframeSearchRadius(减少局部地图大小)
  • 确保系统有 8GB+ 内存

问题4:IMU 话题无数据

  • 检查params.yamlimu_topic是否正确
  • 使用rostopic list查看所有话题
  • IMU 话题中的frame_id需要与 launch 文件中的一致

问题5:回环检测不触发

  • 确保运动中有实际的重访场景
  • 检查loopClosureEnableFlag: true
  • 减小historyKeyframeSearchRadius以放宽搜索范围

11. LIO-SAM 与 A-LOAM / Fast-LIO 安装对比

对比项LIO-SAMA-LOAMFast-LIO
传感器LiDAR + IMU + GPS(可选)LiDARLiDAR + IMU
核心优化库GTSAM 4.0+Ceres 1.14Eigen(手写IESKF)
GTSAM 编译需要手动编译(~20min)不需要不需要
ROS 依赖多(robot_localization等)少(基础)中(Livox SDK)
安装难度★★★★★★★★
编译时间~20分钟~5分钟~5分钟
代码量~15000行~2000行~5000行

总结

步骤操作时间
安装 ROS Noeticapt install10-20分钟
安装基础依赖apt install5分钟
编译 GTSAM 4.0.2git clone + cmake20-40分钟
编译 LIO-SAMcatkin_make5-15分钟
下载测试数据取决于网速10-30分钟

整个流程约50分钟至2小时。核心坑点只有一个——GTSAM 版本和编译参数。掌握 CMake 参数-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF -DGTSAM_USE_SYSTEM_EIGEN=ON,安装基本不会出问题。

http://www.cnnetsun.cn/news/2649882.html

相关文章:

  • A51汇编器预定义宏在8051开发中的应用与技巧
  • 如何快速上手MindSpore-Lab/bert-base-uncased:从安装到第一个掩码语言模型的完整教程
  • 解锁本地AI语音识别的革命性体验:OBS LocalVocal插件深度解析
  • 无人机集群分布式模型预测控制技术解析
  • GPU性能优化:硬件感知LLM技术SwizzlePerf解析
  • 机器学习本质探析:从数据拟合到模型泛化的认知边界
  • 给嵌入式新手的保姆级指南:手把手教你用设备树配置i.MX6ULL的引脚(pinctrl实战)
  • 告别默认布局:在UE4.27中为你的本地多人游戏打造专属分屏体验(C++/蓝图混合教程)
  • AI可控性实战:编译规则引擎如何驯服大模型输出
  • Llama-medx_v2社区贡献指南:如何参与医疗AI开源项目的开发与改进
  • MODBUS、USB、XMODEM...一文搞懂CRC16的7种标准到底怎么选(附C代码实测对比)
  • GovernanceBERT-base API完全指南:10个实用调用示例
  • HVV期间,红队最爱打的漏洞Top 10:从告警日志看实战攻击手法(附CVE编号)
  • QuickBMS终极指南:轻松提取游戏资源的开源利器
  • RapidIO网络实战:在Linux 5.4下用rionet.ko搭建板间高速以太网通道
  • 2019网页设计趋势实战复盘:从暗黑模式到3D交互的深度解析
  • 如何快速搭建个人数字书库:Talebook完整安装指南
  • 避开WS2812B的时序坑:STM32F103C8T6用PWM+DMA驱动的实测避坑指南
  • 立体视觉拯救者:用3Dmigoto彻底修复游戏破碎3D效果
  • D2RML终极指南:暗黑破坏神2重制版一键多开神器
  • 终极指南:简单三步让Mac触控板在Windows上完美工作
  • SAP MDG工作流配置避坑指南:手把手教你搞定物料主数据的任务代理分配
  • 雀魂AI辅助工具Akagi:3分钟学会实时麻将策略分析
  • 告别传统电容表:用STM32F103和PCAP01芯片,DIY一个高精度数字电容测量模块(附开源PCB)
  • YOLOv5/v8实战:用这个交通场景数据集,快速提升你的模型识别红绿灯灯色能力
  • 解决Keil MDK中SD卡高速模式硬件兼容性问题
  • gfn-gssm-xor-parity高级应用:零样本迁移解决复杂逻辑推理问题的完整方案
  • GuangxiAICC/domain-classifier:26个领域文本智能分类的终极解决方案 [特殊字符]
  • bert-base-multilingual-cased性能优化:提升推理速度的7个关键技巧
  • DC综合避坑指南:从.synopsys_dc.setup到report_lib的常见错误排查