news 2026/5/11 11:40:55

保姆级教程:在Ubuntu 20.04上从零搭建LIO-SAM(含GTSAM 4.0.2编译避坑指南)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 20.04上从零搭建LIO-SAM(含GTSAM 4.0.2编译避坑指南)

从零搭建LIO-SAM:Ubuntu 20.04实战指南与GTSAM 4.0.2编译全解析

1. 环境准备与系统配置

在开始LIO-SAM部署前,确保系统环境满足以下要求:

  • Ubuntu 20.04 LTS(推荐纯净安装)
  • ROS Noetic(完整桌面版安装)
  • 16GB以上内存(编译GTSAM时内存消耗较大)
  • 50GB可用磁盘空间

1.1 ROS Noetic安装

执行以下命令完成ROS基础环境配置:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc

提示:安装完成后建议执行rosdep update初始化依赖管理工具

1.2 必备依赖安装

LIO-SAM需要以下关键依赖包:

sudo apt-get install -y \ ros-noetic-navigation \ ros-noetic-robot-localization \ ros-noetic-robot-state-publisher \ libsuitesparse-dev \ libboost-all-dev \ libparmetis-dev

2. GTSAM 4.0.2编译与疑难解决

GTSAM作为LIO-SAM的核心依赖,其编译过程常遇到各种问题。以下是经过验证的编译流程:

2.1 源码获取与准备

wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.2.zip cd ~/Downloads && unzip gtsam.zip -d ~/Downloads/ cd ~/Downloads/gtsam-4.0.2/

2.2 关键编译参数配置

创建编译目录并配置CMake:

mkdir build && cd build cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF \ -DGTSAM_USE_SYSTEM_EIGEN=ON \ -DGTSAM_BUILD_TESTS=OFF \ -DGTSAM_BUILD_EXAMPLES_ALWAYS=OFF \ ..

常见问题解决方案:

  1. 内存不足错误

    • 添加交换空间:
      sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
  2. DGTSAM_BUILD_WITH_MARCH_NATIVE错误

    • 确保CMake命令中包含-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF
  3. Boost版本冲突

    • 明确指定Boost路径:
      cmake -DBOOST_ROOT=/usr/include/boost ...

2.3 编译与安装

make -j$(nproc) sudo make install

编译完成后验证安装:

pkg-config --modversion gtsam

3. LIO-SAM源码编译与配置

3.1 创建工作空间与源码获取

mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/TixiaoShan/LIO-SAM.git cd ..

3.2 依赖安装与编译

rosdep install --from-paths src --ignore-src -r -y catkin_make -DCMAKE_BUILD_TYPE=Release

编译问题排查表

错误类型解决方案
Eigen3找不到sudo apt install libeigen3-dev
PCL版本冲突确保使用ROS Noetic自带PCL 1.10
OpenCV链接错误检查OpenCV_DIR环境变量

4. 参数配置与传感器适配

4.1 params.yaml详解

关键参数配置示例(Velodyne雷达):

lio_sam: # Topics配置 pointCloudTopic: "points_raw" imuTopic: "imu_correct" # 雷达参数 N_SCAN: 16 # 激光雷达线数 Horizon_SCAN: 1800 # 水平分辨率 # IMU参数 imuAccNoise: 3.9939570888238808e-03 imuGyrNoise: 1.5636343949698187e-03 # 外参配置 extrinsicTrans: [0.0, 0.0, 0.0] extrinsicRPY: [1, 0, 0, 0, 1, 0, 0, 0, 1]

4.2 不同雷达型号适配

Ouster雷达配置调整

N_SCAN: 64 Horizon_SCAN: 1024 timeField: "t" # 时间戳字段改为t

5. 实战运行与调试

5.1 数据集测试

使用官方提供的walk数据集测试:

roslaunch lio_sam run.launch rosbag play walk.bag --clock

实时监控关键Topic

  • /lio_sam/mapping/odometry:优化后的里程计
  • /lio_sam/feature/cloud_corner:角点特征
  • /lio_sam/feature/cloud_surface:平面特征

5.2 实时数据接入

对于实时传感器数据,需要配置正确的Topic名称:

roslaunch lio_sam run.launch \ pointCloudTopic:=/velodyne_points \ imuTopic:=/imu/data

6. 性能优化技巧

6.1 系统参数调优

提升实时性配置

# CPU参数 numberOfCores: 4 # 使用核心数 mappingProcessInterval: 0.15 # 地图更新频率(秒) # 降采样参数 odometrySurfLeafSize: 0.4 # 前端面特征降采样尺寸 mappingCornerLeafSize: 0.2 # 后端角点降采样尺寸

6.2 内存管理策略

  • 关键帧数量控制

    surroundingKeyframeSize: 25 # 局部地图包含的关键帧数 historyKeyframeSearchNum: 25 # 回环检测搜索范围
  • 点云保存配置

    savePCD: false # 调试时可开启 savePCDDirectory: "/tmp/" # 存储路径

7. 高级功能配置

7.1 回环检测启用

修改params.yaml启用回环检测:

loopClosureEnableFlag: true # 启用回环 loopClosureFrequency: 1.0 # 检测频率(Hz) historyKeyframeFitnessScore: 0.3 # ICP匹配阈值

7.2 GPS融合配置

useGpsElevation: false # 通常关闭Z轴融合 gpsCovThreshold: 2.0 # GPS协方差阈值(m^2) poseCovThreshold: 25.0 # 位姿协方差阈值

8. 可视化与结果分析

推荐使用以下工具进行结果验证:

  1. RViz配置

    • 添加/lio_sam/mapping/odometry显示轨迹
    • 添加/lio_sam/mapping/map_global显示全局地图
  2. evo评估(安装:pip install evo):

    evo_traj bag walk.bag /lio_sam/mapping/odometry -p --plot_mode xy
  3. 关键指标监控

    • 使用rqt_graph查看节点连接
    • 使用rostopic hz监控各Topic频率

9. 常见问题深度解析

9.1 IMU时间同步问题

症状:出现Waiting for IMU data警告

解决方案

  1. 检查IMU的frame_id是否一致
  2. 确保IMU频率≥100Hz
  3. 添加时间同步节点:
    <node pkg="message_filters" type="time_synchronizer" name="imu_sync" output="screen" args="/imu/data /points_raw 10" />

9.2 点云畸变校正失败

调试步骤

  1. 确认雷达驱动是否正确发布ringtime字段
  2. 检查params.yaml中的timeField配置
  3. 验证IMU数据是否连续:
    rostopic hz /imu/data

9.3 建图漂移问题

优化方向

  1. 提高IMU标定精度
  2. 调整imuAccNoiseimuGyrNoise参数
  3. 增加回环检测频率
  4. 检查雷达-IMU外参标定

10. 实际项目经验分享

在真实机器人平台上部署时,我们发现:

  1. 室外场景:GPS融合可显著改善长期稳定性,但需要:

    • 设置合理的gpsCovThreshold
    • 关闭useGpsElevation(GPS高度数据不可靠)
  2. 室内场景

    • 关闭GPS相关配置
    • 降低surroundingKeyframeSearchRadius到20-30米
    • 提高回环检测频率
  3. 计算资源受限时

    numberOfCores: 2 mappingProcessInterval: 0.3 downsampleRate: 2

经过多次实测验证,这套配置在NX Xavier上能保持10Hz以上的稳定运行频率。

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

从像素到图像:深入解析ISP芯片的核心算法与协同架构

1. ISP芯片&#xff1a;从原始数据到高清图像的魔法引擎 当你用手机拍下一张照片时&#xff0c;可能不会想到传感器捕捉的原始数据就像一堆杂乱无章的乐高积木。ISP芯片就像一位经验丰富的建筑师&#xff0c;把这些零散的积木组装成精美的城堡。这块指甲盖大小的芯片&#xff0…

作者头像 李华
网站建设 2026/5/11 11:39:07

紧抱豆包大腿,开发了一个iOS实用小工具(二维码照片清理app)

手机相册里存了很多随身码&#xff0c;核算码啥的图片&#xff08;身在上海&#xff0c;经历过2020&#xff5e;2022年的都懂&#xff09;。一直没有耐心好好去清理。但总惦记着这个事情&#xff0c;想写个工具app来清理相册里这种图片。 身为一名非典型性程序猿&#xff0c;之…

作者头像 李华
网站建设 2026/5/11 11:38:59

新代数控数据采集实战:从API接口到状态解析的完整指南

1. 新代数控数据采集系统概述 第一次接触新代数控系统时&#xff0c;我被它独特的架构设计吸引了。作为基于WinCE平台的工业级控制系统&#xff0c;新代数控在近几年推出的机型都标配了网口和API接口&#xff0c;这为远程监控和数据采集提供了硬件基础。在实际项目中&#xff0…

作者头像 李华