1. 项目概述
在机器人感知与定位领域,FAST-LIVO2作为基于激光雷达和视觉的紧耦合SLAM系统,因其出色的实时性和鲁棒性受到广泛关注。本文将分享在Ubuntu 24.04 + ROS2 Kilted环境下部署FAST-LIVO2的完整过程,特别针对该环境特有的编译问题和依赖管理进行详细解析。
提示:本文所有操作均基于虚拟机环境验证,建议使用不低于8GB内存和4核CPU的配置以获得流畅体验。
2. 环境准备与依赖管理
2.1 基础环境配置
虽然大多数教程默认使用ROS2 Humble,但Kilted作为较新版本,其工具链和API存在细微差异。我们采用模块化依赖管理策略:
- 工作空间结构:
code复制fast_livo_ws/ └── src/ ├── Sophus/ ├── rpg_vikit/ ├── Livox-SDK2/ ├── livox_ros_driver2/ └── FAST-LIVO2/
这种结构优势在于:
- 隔离项目依赖,避免污染系统目录
- 便于使用colcon统一管理构建过程
- 卸载时直接删除整个工作空间即可
2.2 关键依赖安装
2.2.1 系统级依赖
bash复制# Eigen3 (>=3.3.4)
sudo apt install libeigen3-dev
pkg-config --modversion eigen3
# OpenCV (>=3.2)
sudo apt install libopencv-dev
pkg-config --modversion opencv4
# PCL (>=1.6)
sudo apt install libpcl-dev
pkg-config --modversion pcl_common
# ROS2接口包
sudo apt install ros-kilted-image-transport-plugins ros-kilted-pcl-ros
2.2.2 源码级依赖
Sophus安装注意事项:
bash复制cd ~/fast_livo_ws/src
git clone https://github.com/strasdat/Sophus.git
cd ..
colcon build --packages-select Sophus
常见问题:
- 若编译报错
Sophus::SO3相关错误,需检查Eigen版本是否匹配 - 建议使用2023年后的Sophus提交,旧版对C++17支持不完善
Vikit的特殊处理:
bash复制git clone https://github.com/integralrobotics/rpg_vikit.git
source install/setup.bash # 关键步骤!
colcon build --packages-select vikit_common vikit_ros
注意:必须source环境后再编译,因为vikit依赖Sophus的头文件路径需要通过ROS环境变量传递。
3. Livox雷达驱动适配
3.1 驱动编译问题解决
Livox官方驱动在Kilted环境下需要特殊修改:
-
头文件补充:
livox_sdk2/sdk_core/comm/define.h增加:cpp复制#include <cstdint> #include <cstddef>livox_sdk2/logger_handler/file_manager.h同样补充上述头文件
-
编译脚本修改:
注释掉livox_ros_driver2/build.sh中的清理代码段,避免重复编译:bash复制# 注释以下内容 # rm -rf ../../build/ # rm -rf ../../devel/ # rm -rf ../../install/ -
非常规编译命令:
bash复制./src/livox_ros_driver2/build.sh humble # 使用humble参数而非kilted这是因为驱动对Kilted的兼容层尚未完善,但humble模式API兼容性更好。
4. FAST-LIVO2核心修改
4.1 关键代码调整
在FAST-LIVO2/include/LIVMapper.h中修改OpenCV桥接配置:
cpp复制// 原条件编译改为直接包含
#include <cv_bridge/cv_bridge.hpp>
这个修改源于ROS2 Kilted中cv_bridge头文件组织方式的变化,新版本统一使用.hpp后缀。
4.2 编译优化技巧
使用并行编译加速构建:
bash复制colcon build --packages-select fast-livo --parallel-workers 4
若遇到内存不足,可调整:
bash复制MAKEFLAGS="-j2" colcon build --packages-select fast-livo
5. 数据集处理全流程
5.1 数据集获取替代方案
由于官方数据集链接失效,可通过以下方式获取:
- 百度网盘镜像(密码wxit)
- 使用Gazebo仿真数据替代:
bash复制sudo apt install ros-kilted-gazebo-ros-pkgs ros2 launch fast_livo gazebo_demo.launch.py
5.2 ROS1到ROS2格式转换
使用rosbags工具链进行转换:
bash复制pipx install rosbags # 避免PEP 668限制
rosbags-convert --src Retail_Street.bag --dst Retail_Street
转换后需检查时间戳同步:
yaml复制# 修改后的YAML配置示例
topics:
- name: "/livox/lidar"
type: "livox_ros_driver2/msg/CustomMsg"
serialization_format: "cdr"
offered_qos_profiles:
- history: keep_last
depth: 100
reliability: reliable
durability: volatile
6. 系统运行与调试
6.1 启动流程优化
建议使用tmux管理多个终端:
bash复制tmux new-session -s fast_livo
# 第一个窗格
ros2 launch fast_livo mapping_avia.launch.py use_rviz:=True
# 新建窗格(Ctrl+b c)
ros2 bag play ./Retail_Street --loop
6.2 性能监控技巧
实时查看系统负载:
bash复制watch -n 0.5 'echo "CPU: "$[100-$(vmstat 1 2|tail -1|awk '\''{print $15}'\'')]"%"; echo "MEM: "$(free -m | awk '\''/Mem/{print $3}'\'')"MB"'
优化参数建议:
- 对于低配设备,可调整
config/avia.yaml中的:yaml复制feature_extract: num_pts: 500 # 原值1000 voxel_filter: leaf_size: [0.1, 0.1, 0.1] # 原值0.05
7. 常见问题排查手册
| 问题现象 | 解决方案 | 根本原因 |
|---|---|---|
Sophus_NOT_FOUND |
确认已source环境且colcon build成功 | 工作空间隔离导致路径缺失 |
cv_bridge.hpp报错 |
修改头文件包含方式 | ROS2版本差异 |
| 点云显示异常 | 检查pcl_ros版本匹配性 |
PCL点类型转换错误 |
| 内存不足崩溃 | 减少num_pts参数或增加swap |
点云处理消耗过大 |
深度调试建议:
- 使用
--compile-commands生成JSON数据库:bash复制
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - 通过VSCode的C++插件加载
compile_commands.json进行源码级调试
8. 扩展应用方向
基于现有部署可进一步探索:
-
多传感器时间同步:
python复制# 示例时间对齐代码 message_filters.ApproximateTimeSynchronizer( [image_sub, cloud_sub], queue_size=5, slop=0.1) -
嵌入式平台部署:
- 交叉编译时添加
-march=armv8-a优化标志 - 使用
-DENABLE_NEON=ON启用ARM加速
- 交叉编译时添加
-
算法定制开发:
- 修改
LIVMapper.cpp中的特征提取逻辑 - 重写
ImageProcessor中的光流计算方法
- 修改
