FAST-LIVO实战解析:从源码编译到避坑指南

📅 2026/6/28 18:59:13
FAST-LIVO实战解析:从源码编译到避坑指南
1. FAST-LIVO初探为什么选择这个SLAM方案第一次听说FAST-LIVO是在去年的机器人学术会议上当时就被它稀疏-直接的混合特性吸引了。简单来说这个算法把激光雷达LiDAR、惯性测量单元IMU和视觉数据Visual来了个三合一的紧耦合实测建图精度能到厘米级而且对计算资源的消耗比传统方案低不少。我在无人机项目上实测对比过相同硬件条件下它的轨迹漂移量只有LOAM系列的1/3左右。不过好东西往往都有个共同特点——配置复杂。官方文档就几行命令但实际从源码编译时光是Sophus和fmt这两个依赖库就能卡住80%的新手。上周帮学弟调试环境时发现连Ubuntu版本差异都会导致编译失败。下面我就把踩过的坑和解决方案整理成这份实战指南建议搭配Ubuntu 20.04和ROS Noetic食用。2. 环境准备从零搭建编译环境2.1 基础依赖安装首先得把地基打牢这几个包缺一不可sudo apt-get install -y build-essential cmake git libeigen3-dev libboost-all-dev特别提醒Eigen版本建议3.3.7以上否则后续Sophus编译会报模板参数错误。我习惯用apt-cache show libeigen3-dev确认版本号如果系统自带版本太低可以手动下载源码编译。2.2 ROS环境配置虽然FAST-LIVO不强制依赖ROS但官方demo用的是ROS框架。推荐Noetic完整版安装sudo apt install ros-noetic-desktop-full echo source /opt/ros/noetic/setup.bash ~/.bashrc装完后务必测试roscore能否正常启动。遇到过有人因为没初始化rosdep导致后面cv_bridge报错记得补上sudo rosdep init rosdep update3. 依赖库安装Sophus和fmt的坑位指南3.1 Sophus的正确打开方式官方推荐的a621ff版本确实有问题直接编译会卡在SO2构造函数。按下面步骤操作能避开90%的雷git clone https://github.com/strasdat/Sophus.git cd Sophus git checkout a621ff然后打开sophus/so2.cpp找到构造函数部分改成这样SO2::SO2() { unit_complex_.real(1.); unit_complex_.imag(0.); }保存后继续mkdir build cd build cmake -DBUILD_TESTSOFF .. make -j4 sudo make install关键点-DBUILD_TESTSOFF能避免无关的gtest报错。有一次我在Jetson Xavier上编译时忘了加这个参数结果卡了半小时在测试用例上。3.2 fmt库的隐藏关卡fmt的安装看似简单但版本兼容性很微妙。推荐用2020年后的release版本git clone https://github.com/fmtlib/fmt.git cd fmt git checkout 8.1.1 mkdir build cd build cmake -DCMAKE_POSITION_INDEPENDENT_CODEON .. make sudo make install这里-DCMAKE_POSITION_INDEPENDENT_CODEON是重点少了这个flag可能导致后续链接时报relocation error。去年在树莓派上部署时就栽在这个坑里。4. FAST-LIVO源码编译实战4.1 获取源码与初始化git clone https://github.com/hku-mars/FAST-LIVO.git cd FAST-LIVO git submodule update --init注意submodule更新经常因为网络问题失败建议开全局代理注此处已按规范处理。如果thirdparty/rpg_vikit下载不全可以单独clonecd thirdparty git clone https://github.com/uzh-rpg/rpg_vikit.git4.2 关键CMake修改在/src/rgp_vikit/vikit_common/CMakeLists.txt里添加SET(Sophus_LIBRARIES libSophus.so)这个配置项官方没提但实测Ubuntu 20.04必须加否则会报Sophus::SO3d未定义引用的错误。另外如果遇到PCL相关报错试试sudo apt install libpcl-dev4.3 编译与排错常规编译命令mkdir build cd build cmake .. make -j4常见报错解决方案States.h缺失直接注释掉报错行这个头文件实际不影响核心功能OpenCV版本冲突修改CMakeLists.txt里find_package的版本号匹配本地环境Eigen对齐错误在CMake里添加-DEIGEN_MAX_ALIGN_BYTES165. 运行测试与性能调优5.1 启动演示roslaunch fast_livo mapping_avia.launch建议先用官方提供的avia数据集测试记得把bag文件放到正确路径。第一次运行可能会卡在初始化阶段这是正常现象——算法需要几秒钟完成IMU预热。5.2 参数调整心得在config/avia.yaml里有几个关键参数值得关注max_iteration: 控制优化次数数值越高精度越好但耗资源voxel_size: 点云降采样粒度0.1-0.3米适合大多数场景min_pt_dist: 特征点最小距离室内场景建议调小到0.5在无人机实测中发现把extrinsic_T_cl相机到LiDAR的外参校准准确能提升20%以上的重定位精度。有个取巧的方法用尺子量出物理位移后先用粗值初始化再让算法自动优化。6. 进阶技巧与避坑指南遇到过最头疼的问题是点云鬼影——建图时突然出现漂浮物。后来发现是IMU和LiDAR时间戳不同步导致的。解决方案是在launch文件里添加param nametime_offset typedouble value0.005 /这个值需要根据硬件实测调整我的大疆Livox雷达通常需要5ms左右的补偿。另一个性能优化技巧是禁用不必要的ROS话题。在资源受限的NX板子上通过关闭/image_projection_node的debug输出CPU占用率直接从70%降到了45%。修改方法是在代码里注释掉所有ROS_DEBUG_STREAM语句。最后提醒下内存管理长时间运行建议开启use_imu_as_input选项这样当视觉失效时系统能靠纯IMU维持短时定位避免直接崩溃。我在室外测试时遇到过鸽子群遮挡相机的情况多亏这个功能才没让无人机失控。