从零构建FAST_LIO_SAM:Ubuntu 18.04环境下的SLAM系统实战指南
在机器人自主导航领域,激光雷达惯性里程计(LIO)系统正成为高精度定位与建图的核心技术。FAST_LIO_SAM作为FAST-LIO2与LIO-SAM的融合方案,通过引入GTSAM后端优化模块,显著提升了系统的全局一致性。本文将带您从零开始,在Ubuntu 18.04系统中完整部署这套先进的SLAM解决方案。
1. 环境准备与依赖安装
1.1 系统基础配置
推荐使用纯净的Ubuntu 18.04.6 LTS系统,确保默认Python版本为2.7。为避免权限问题,建议所有操作在普通用户下通过sudo执行:
sudo apt update && sudo apt upgrade -y sudo apt install -y git cmake libeigen3-dev libboost-all-dev关键依赖版本要求:
- PCL ≥ 1.8(Ubuntu 18.04默认满足)
- Eigen ≥ 3.3.4
- ROS Melodic(完整桌面版)
注意:若已安装其他ROS版本,需先彻底卸载后再安装Melodic,避免版本冲突。
1.2 ROS Melodic安装
执行以下命令配置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 -y ros-melodic-desktop-full初始化rosdep时,若遇到网络问题,可尝试修改hosts文件或使用国内镜像源:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc sudo rosdep init rosdep update2. GTSAM 4.0编译与安装
2.1 源码编译准备
GTSAM作为后端优化的核心,需要从源码编译特定版本:
mkdir -p ~/gtsam_ws/src && cd ~/gtsam_ws/src git clone https://github.com/borglab/gtsam.git -b 4.0.0-alpha2 cd gtsam && mkdir build && cd build编译配置建议使用Release模式并开启必要的优化选项:
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=ON -DGTSAM_USE_SYSTEM_EIGEN=ON -DCMAKE_BUILD_TYPE=Release .. make -j$(nproc) sudo make install2.2 常见编译问题解决
若遇到Boost库链接错误,可显式指定库路径:
cmake -DBoost_NO_SYSTEM_PATHS=ON -DBOOST_ROOT=/usr/include/boost ..安装完成后验证版本:
pkg-config --modversion gtsam # 应输出 4.0.0-alpha23. FAST_LIO_SAM工作空间配置
3.1 创建工作空间
建议使用独立工作空间管理项目:
mkdir -p ~/fast_lio_sam_ws/src cd ~/fast_lio_sam_ws/src catkin_init_workspace克隆源码时推荐使用深度克隆确保子模块完整:
git clone --recursive https://github.com/kahowang/FAST_LIO_SAM.git cd FAST_LIO_SAM git submodule update --init --recursive3.2 依赖项安装
安装特定版本的PCL和Eigen3开发包:
sudo apt install -y libpcl-dev libproj-dev libgeographic-dev对于ROS相关依赖,使用rosdep自动安装:
cd ~/fast_lio_sam_ws rosdep install --from-paths src --ignore-src -r -y4. 系统编译与参数调优
4.1 编译过程
使用catkin_make进行编译,建议开启并行编译:
cd ~/fast_lio_sam_ws catkin_make -DCMAKE_BUILD_TYPE=Release -j$(nproc)若遇到C++11标准问题,可在CMakeLists.txt中添加:
add_compile_options(-std=c++14)4.2 关键参数解析
在config/params.yaml中,这些参数直接影响系统表现:
# 回环检测配置 loopClosureEnableFlag: true # 启用回环检测 loopClosureFrequency: 4.0 # 回环检测频率(Hz) historyKeyframeSearchRadius: 1.5 # 回环搜索半径(m) # GPS配置 useGpsElevation: false # 禁用GPS高程约束 gpsCovThreshold: 2.0 # GPS数据协方差阈值提示:对于室内场景,建议关闭useGpsElevation;室外开阔环境可尝试启用但需密切监控Z轴漂移。
5. 实战测试与结果分析
5.1 室内数据集测试
使用Velodyne 16线雷达数据测试:
roslaunch fast_lio_sam mapping_velodyne16.launch rosbag play T3F2-2021-08-02-15-00-12.bag --clock关键指标监测:
/laser_odom_to_init话题频率/aft_mapped_to_init的位姿协方差- RViz中查看
/ikdtree_map点云质量
5.2 室外GPS融合测试
对于含GPS信息的数据集:
roslaunch fast_lio_sam mapping_velodyne16_lio_sam_dataset.launch rosbag play walking_dataset.bag通过evo工具评估轨迹精度:
evo_traj kitti optimized_pose.txt -p --plot_mode=xy5.3 地图保存技巧
保存点云地图时建议指定分辨率:
rosservice call /save_map "resolution: 0.05 destination: '/home/user/maps'"对于长期建图任务,可定期执行保存操作避免数据丢失。
6. 高级调试与性能优化
6.1 内存管理
大场景建图时可能出现内存暴涨,可通过以下方式缓解:
- 调整
surroundingKeyframeSize减少子图规模 - 限制
historyKeyframeSearchNum数量 - 启用
recontructKdTree定期重建优化数据结构
6.2 实时性调优
若出现处理延迟,可尝试:
- 降低
loopClosureFrequency至2-3Hz - 关闭
visulize_IkdtreeMap可视化 - 在launch文件中限制线程数:
<param name="num_threads" value="4" />6.3 坐标系问题排查
当GPS数据异常时,检查:
- WGS84到ENU坐标转换是否正常
useImuHeadingInitialization参数设置- 终端输出中的
gps covariance数值
7. 实际应用建议
在工业场景部署时,建议采用以下配置组合:
| 场景类型 | 回环检测 | GPS融合 | 关键帧间距 |
|---|---|---|---|
| 室内仓库 | 开启 | 关闭 | 0.5m |
| 城市街道 | 开启 | 开启 | 2.0m |
| 隧道环境 | 关闭 | 间歇使用 | 1.0m |
对于学术研究,可以尝试修改以下代码模块:
src/mapOptmization.cpp中的因子图构造include/utility.h的参数解析逻辑cfg/params.yaml的全部配置项