从零搭建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-dev2. 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 \ ..常见问题解决方案:
内存不足错误:
- 添加交换空间:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
- 添加交换空间:
DGTSAM_BUILD_WITH_MARCH_NATIVE错误:
- 确保CMake命令中包含
-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF
- 确保CMake命令中包含
Boost版本冲突:
- 明确指定Boost路径:
cmake -DBOOST_ROOT=/usr/include/boost ...
- 明确指定Boost路径:
2.3 编译与安装
make -j$(nproc) sudo make install编译完成后验证安装:
pkg-config --modversion gtsam3. 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" # 时间戳字段改为t5. 实战运行与调试
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/data6. 性能优化技巧
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. 可视化与结果分析
推荐使用以下工具进行结果验证:
RViz配置:
- 添加
/lio_sam/mapping/odometry显示轨迹 - 添加
/lio_sam/mapping/map_global显示全局地图
- 添加
evo评估(安装:
pip install evo):evo_traj bag walk.bag /lio_sam/mapping/odometry -p --plot_mode xy关键指标监控:
- 使用
rqt_graph查看节点连接 - 使用
rostopic hz监控各Topic频率
- 使用
9. 常见问题深度解析
9.1 IMU时间同步问题
症状:出现Waiting for IMU data警告
解决方案:
- 检查IMU的
frame_id是否一致 - 确保IMU频率≥100Hz
- 添加时间同步节点:
<node pkg="message_filters" type="time_synchronizer" name="imu_sync" output="screen" args="/imu/data /points_raw 10" />
9.2 点云畸变校正失败
调试步骤:
- 确认雷达驱动是否正确发布
ring和time字段 - 检查
params.yaml中的timeField配置 - 验证IMU数据是否连续:
rostopic hz /imu/data
9.3 建图漂移问题
优化方向:
- 提高IMU标定精度
- 调整
imuAccNoise和imuGyrNoise参数 - 增加回环检测频率
- 检查雷达-IMU外参标定
10. 实际项目经验分享
在真实机器人平台上部署时,我们发现:
室外场景:GPS融合可显著改善长期稳定性,但需要:
- 设置合理的
gpsCovThreshold - 关闭
useGpsElevation(GPS高度数据不可靠)
- 设置合理的
室内场景:
- 关闭GPS相关配置
- 降低
surroundingKeyframeSearchRadius到20-30米 - 提高回环检测频率
计算资源受限时:
numberOfCores: 2 mappingProcessInterval: 0.3 downsampleRate: 2
经过多次实测验证,这套配置在NX Xavier上能保持10Hz以上的稳定运行频率。