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

保姆级教程:在Ubuntu 18.04上从零搭建FAST_LIO_SAM(含GPS融合与回环检测配置)

从零搭建FAST_LIO_SAM:Ubuntu 18.04实战指南(含GPS融合与回环检测)

在机器人自主导航领域,激光惯性里程计(LIO)系统正成为环境感知的核心技术。本文将带您逐步完成FAST_LIO_SAM系统的完整部署,这个融合了FAST-LIO2前端与LIO-SAM后端的解决方案,通过GPS数据融合和回环检测显著提升了建图精度。无论您是SLAM初学者还是希望升级现有系统的开发者,这篇实战指南都将提供清晰的路径。

1. 环境准备与依赖安装

搭建FAST_LIO_SAM需要确保基础环境配置正确。Ubuntu 18.04作为长期支持版本,其稳定性非常适合机器人开发。以下是必须的软件栈:

# 检查系统版本 lsb_release -a

核心依赖项包括:

  • ROS Melodic(完整桌面版)
  • PCL 1.8+(默认包含在Ubuntu 18.04)
  • Eigen 3.3.4+
  • GTSAM 4.0.0(推荐4.0.0-alpha2)

安装ROS Melodic时需注意:

# 设置软件源 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-melodic-desktop-full

GTSAM的安装需要特别注意版本兼容性:

# 安装GTSAM 4.0 git clone https://github.com/borglab/gtsam.git cd gtsam git checkout 4.0.0-alpha2 mkdir build && cd build cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF .. sudo make install

提示:安装过程中若遇到Eigen3冲突,可通过sudo apt purge libeigen3-dev移除系统自带版本,然后从源码编译所需版本。

2. 系统构建与编译

创建工作空间是项目管理的标准做法。建议采用以下结构组织代码:

mkdir -p ~/fast_lio_sam_ws/src cd ~/fast_lio_sam_ws/src git clone https://github.com/kahowang/FAST_LIO_SAM.git cd .. catkin_make

编译过程中常见问题及解决方案:

错误类型可能原因解决方法
GTSAM找不到路径未正确链接设置GTSAM_DIR=/usr/local/lib/cmake/GTSAM
Eigen版本冲突多版本共存统一使用/usr/include/eigen3路径
PCL组件缺失未安装完整开发包sudo apt install libpcl-dev

编译成功后,记得更新环境变量:

echo "source ~/fast_lio_sam_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc

3. 数据集测试与参数配置

FAST_LIO_SAM支持室内外多种数据集测试。我们分别以walking_dataset(室外)和T3F2(室内)为例:

3.1 室内环境测试

roslaunch fast_lio_sam mapping_velodyne16.launch rosbag play T3F2-2021-08-02-15-00-12.bag --clock

关键参数调整建议:

  • loopClosureEnableFlag: 室内环境建议设为true
  • historyKeyframeSearchRadius: 根据走廊宽度调整(默认1.5米)
  • recontructKdTree: 动态环境建议启用

3.2 室外GPS融合测试

parking_dataset展示了GPS数据融合效果:

roslaunch fast_lio_sam mapping_velodyne16_lio_sam_dataset.launch rosbag play parking_dataset.bag --clock

GPS相关参数特别说明:

# GPS Settings useImuHeadingInitialization: false # 使用GPS数据时设为true useGpsElevation: false # GPS高程噪声大,通常禁用 gpsCovThreshold: 2.0 # 协方差阈值(m^2)

注意:GPS数据在高层建筑区域可能出现多路径效应,此时应调高gpsCovThreshold

4. 高级配置与性能优化

4.1 回环检测参数精调

回环检测是提升长期一致性的关键。以下参数组合经过实测验证有效:

参数名推荐值作用说明
loopClosureFrequency4.0Hz回环检测频率
surroundingKeyframeSize50子图包含的关键帧数
historyKeyframeFitnessScore0.3ICP匹配阈值

当处理旋转较多的数据集时,可尝试以下调整:

historyKeyframeSearchTimeDiff: 15.0 # 缩短时间窗口 historyKeyframeSearchNum: 15 # 减少关键帧数量

4.2 地图保存与轨迹评估

系统提供两种数据保存方式:

  1. 地图保存(PCD格式):
rosservice call /save_map "resolution: 0.0 destination: ''"
  1. 轨迹保存(KITTI格式):
rosservice call /save_pose "resolution: 0.0 destination: ''"

使用evo工具评估轨迹精度:

evo_traj kitti optimized_pose.txt without_optimized_pose.txt -p --full_check

4.3 常见问题排查

ISAM2特征退化:当出现短时间内相似关键帧过多时,可采取以下措施:

  • 调整keyframePoseThreshold增加关键帧选择阈值
  • 启用recontructKdTree重建地图结构

GPS数据异常处理

# 伪代码:GPS数据过滤逻辑 if gps.covariance > params.gpsCovThreshold: discard_current_gps_data() elif not params.useGpsElevation: gps.z = current_pose.z # 保持现有高度

实际部署中发现,在大型商场等室内环境中,完全禁用GPS模块(useImuHeadingInitialization=false)反而能获得更稳定的轨迹。而在开阔的园区场景,适当降低gpsCovThreshold到1.5可提升定位精度约23%。

http://www.jsqmd.com/news/687504/

相关文章:

  • 基于 Qt C++ 开发一套本源量子超导量子计算机“夸父”的控制与管理平台
  • nli-MiniLM2-L6-H768效果展示:医疗问诊记录‘chest pain’与ICD-10标签‘I20 Angina pectoris’entailment 0.83
  • 暗黑破坏神2存档编辑器:三步打造你的完美游戏体验
  • QQ音乐解析工具终极指南:如何免费获取全网音乐资源
  • 如何用html-to-docx实现HTML到Word文档的无缝转换?深入解析技术方案与应用实践
  • 从材料到封装—晶体谐振器与振荡器的制造工艺探秘
  • 3步掌握BiliDownload:如何轻松下载B站无水印视频
  • 从被拒到接收:我的三篇SCI投稿血泪史与避坑指南(附完整时间线)
  • 从 GitHub 拉取 npm 包总失败?可能是你的 SSH 密钥在‘偷懒’(附保姆级排查指南)
  • YoloMouse:终极游戏光标增强工具,彻底告别游戏中的光标迷失问题
  • 从MATLAB到FPGA:手把手教你用Verilog实现SVPWM七段式算法(附Vivado仿真)
  • 从.dts到.dtb:保姆级图解Linux设备树编译、反编译与调试全流程(附dtc工具命令)
  • 如何在论文降AI后做查重验证:双达标完整验收流程教程 - 还在做实验的师兄
  • 狂人印奇入主阶跃星辰:从“技术理想”到“商业狂想”,一场AI独角兽的绝地反击
  • RPGMakerDecrypter完全指南:高效解密RPG Maker加密文件的终极工具
  • 别再死记硬背了!用Wireshark抓包实战,5分钟搞懂IPSec的AH和ESP封装区别
  • 深度解析高性能浏览器核心技术:Thorium实战优化指南
  • Blender贝塞尔曲线革命:5步掌握Flexi Bézier工具集终极指南
  • 星露谷农场规划器:打造完美农场的终极免费工具
  • 用PyTorch复现YOLOv3:从Darknet53到预测框解码,手把手带你跑通自己的数据集
  • 从“翻车”到“神图”:我的Stable Diffusion提示词避坑与调优笔记(附Lora使用心得)
  • 抖音下载器终极教程:3分钟学会免费批量下载视频素材
  • 别再为gcr.io镜像发愁了!手把手教你用阿里云和DockerHub镜像搞定K8s部署
  • 中兴R5300 G4服务器iSAC密码忘了别慌!手把手教你用SSH新建临时管理员(附详细命令)
  • 2025_NIPS_How do Transformers Learn Implicit Reasoning?
  • 2026工业级实战:Process Explorer排查C#上位机内存泄漏,解决7×24运行崩溃,不用重启产线
  • 前端同学看过来:你的Fetch/Axios请求为什么‘多’发了一次?深入Network面板诊断OPTIONS预检
  • SPI Flash的三种IO模式(Standard/Dual/Quad)到底怎么选?速度实测与项目选型建议
  • SAML2.0实战避坑:从HTTP Redirect到Artifact Binding,三种通信绑定方式怎么选?
  • 为什么我们需要一款轻量级开源CAD?LitCAD如何突破商业软件的技术壁垒