DYING4EVER

NOTES

FAST-LIVO

FAST-LIVO

可参考教程:FAST-LIVO2 “ 一个极其高效的,抵抗各种极端退化环境,可达像素级精度,首个可以用到UAV自动导航的激光雷达-视觉-惯性里程计,并可以实时重建高精度彩色点云地图 ”

辨析

FAST-LIVO 在 FAST-LIO/LIO 的基础上加入了相机视觉约束,利用图像的光度信息和纹理信息辅助定位,属于 LiDAR-Inertial-Visual Odometry。后续 FAST-LIVO2 进一步把 LiDAR、IMU、图像测量统一到 ESIKF 中,并使用直接法处理 LiDAR 和视觉测量

FAST-LIVO 笔记:原理、复现与拓展流程

1. FAST-LIVO 概念与核心思想

FAST-LIVO 全称为 Fast and Tightly-coupled Sparse-Direct LiDAR-Inertial-Visual Odometry,是一种激光、惯性、视觉紧耦合里程计系统。

它在 FAST-LIO 的基础上加入相机信息,形成 LiDAR + IMU + Camera 的多传感器融合定位方法。 FAST-LIO2 主要依靠激光点云几何结构和 IMU 估计位姿,而 FAST-LIVO 进一步利用图像纹理和光度信息,在几何退化场景下提升定位鲁棒性。简单理解:FAST-LIO2 = LiDAR + IMU,FAST-LIVO = LiDAR + IMU + Camera。

整体流程:IMU 预测位姿 -> LiDAR 点云与地图匹配 -> Camera 进行直接法光度跟踪 -> 融合更新状态 -> 输出位姿和地图。

2. 为什么加入视觉信息

纯激光惯性系统在普通环境中已经很强,但在长走廊、空旷区域、重复结构、平面墙面等场景中,点云几何约束可能不足,容易出现退化。视觉信息可以提供纹理、颜色、边缘等信息,用来补充激光的不足。例如白墙走廊中,激光看到的几何结构比较相似,但相机可能看到墙上的海报、门框、纹理变化,这些信息可以帮助系统更稳定地估计位姿。因此 FAST-LIVO 更适合复杂室内环境、移动机器人、无人机和多传感器建图任务。

3. 系统组成

模块 输入 作用
IMU 预测 加速度、角速度 高频预测运动状态,提供初值
LiDAR 更新 点云 利用空间几何结构约束位姿
Camera 更新 图像 利用光度误差和纹理信息约束位姿
状态估计 IMU + LiDAR + Camera 融合更新最终位姿
地图维护 点云地图/视觉地图 保存环境结构信息,辅助后续匹配

FAST-LIVO 使用稀疏直接法处理视觉信息。直接法不依赖 ORB、SIFT 等特征点,而是直接比较图像块的灰度或亮度变化。常见光度误差形式为:
$$
E=\sum_i \left(I_t(u_i)-I_r(u_i')\right)^2
$$
其中,$I_t$ 表示当前图像,$I_r$ 表示参考图像,$u_i$ 和 $u_i'$ 表示同一空间点在不同图像中的像素位置。优化目标是让同一位置在不同图像中的亮度尽可能一致,从而反推出相机和机器人的运动。

4. FAST-LIVO 与常见 SLAM 方法对比

方法 传感器 类型 特点
ORB-SLAM3 Camera / Camera + IMU 视觉 SLAM 特征点法,依赖图像特征
VINS-Fusion Camera + IMU VIO 经典视觉惯性系统
FAST-LIO2 LiDAR + IMU LIO 速度快,依赖点云几何
LVI-SAM LiDAR + Camera + IMU LVI 融合 激光和视觉相对模块化
FAST-LIVO LiDAR + Camera + IMU LIVO 紧耦合,融合几何与视觉纹理

简单来说,FAST-LIO2 更偏向高效激光惯性建图,FAST-LIVO 更偏向复杂场景下的多传感器鲁棒定位。

5. 复现准备

复现 FAST-LIVO 前,需要先准备 LiDAR、IMU、Camera 三类传感器,并保证三件事:话题正常、时间同步正常、外参标定正确。推荐不要一开始直接跑 FAST-LIVO,而是按传感器和模块逐步验证。

硬件准备:LiDAR + IMU + Camera -> 工控机/笔记本/Jetson -> ROS 环境 -> FAST-LIVO 源码。

常见传感器组合:Livox Mid360 + 相机 + IMU,或 Velodyne/Ouster + 工业相机 + IMU。若使用 RealSense D435i,需要注意它自带 IMU 和相机,但 LiDAR 与相机之间仍然需要外参标定。

6. 复现流程

复现建议顺序:安装依赖 -> 编译源码 -> 启动传感器驱动 -> 检查 ROS 话题 -> 标定外参 -> 先跑 FAST-LIO2 -> 再接入相机跑 FAST-LIVO -> 录包与回放调试 -> 参数优化。

6.1 环境与源码

先确认 ROS 版本、PCL、Eigen、OpenCV、Livox SDK 或对应 LiDAR 驱动是否安装正常。然后创建工作空间并编译:

mkdir -p ~/fast_livo_ws/src
cd ~/fast_livo_ws/src
git clone <FAST-LIVO 仓库地址>
cd ..
colcon build
source install/setup.bash

colcon build 用于编译 ROS2 工作空间,source install/setup.bash 用于加载当前工作空间环境。如果找不到包或 launch 文件,优先检查是否执行了 source

6.2 传感器话题检查

启动传感器驱动后,检查关键话题是否存在:

ros2 topic list
ros2 topic hz /imu/data
ros2 topic hz /camera/image_raw
ros2 topic hz /livox/lidar

ros2 topic list 用于查看当前 ROS 系统中的话题;ros2 topic hz 用于查看话题发布频率。IMU 频率通常较高,相机频率一般为 20~30 Hz,LiDAR 频率根据型号不同可能为 10 Hz 或更高。如果频率不稳定,后续定位容易漂移或失败。

6.3 时间同步

时间同步是 FAST-LIVO 复现的关键。IMU、LiDAR、Camera 的时间戳必须尽量一致,否则会出现轨迹漂移、地图重影、图像跟踪失败等问题。理想情况是硬件同步,例如触发同步、PPS 同步或统一硬件时钟;如果没有硬同步,至少要保证系统时间一致,并检查 ROS 消息时间戳是否正常。

检查思路:查看每个话题 header.stamp -> 对比传感器时间差 -> 判断是否存在明显延迟 -> 必要时使用 rosbag 回放分析。

6.4 外参标定

FAST-LIVO 至少需要 LiDAR-IMU 外参和 Camera-IMU 外参,也可以理解为要知道三个传感器之间的空间安装关系。常见外参包括:
$$
T_{LI}
$$
表示 LiDAR 到 IMU 的变换,$$
T_{CI}
$$
表示 Camera 到 IMU 的变换。外参错误会直接导致地图扭曲、轨迹发散、视觉投影不准等问题。

外参调试顺序:先保证 IMU 方向正确 -> 再保证 LiDAR 点云不扭曲 -> 再检查相机图像与点云投影是否对齐。

6.5 先跑 FAST-LIO2

在接入视觉前,建议先单独跑 FAST-LIO2 或 FAST-LIVO 中的 LIO 部分。原因是 FAST-LIVO 建立在激光惯性里程计稳定的基础上,如果 LIO 本身就不稳定,加入视觉后问题会更难排查。

判断标准:点云地图不明显重影,轨迹连续,机器人静止时位姿不剧烈抖动,快速转动时地图不发散。

6.6 再跑 FAST-LIVO

当 LiDAR + IMU 已经稳定后,再接入相机图像。启动顺序通常是:传感器驱动 -> FAST-LIVO 配置文件 -> FAST-LIVO launch -> RViz 可视化。重点观察轨迹是否连续、点云地图是否扭曲、视觉跟踪是否稳定、CPU 占用是否过高。

如果视觉加入后效果变差,优先检查相机外参、时间同步、图像曝光、图像模糊和相机内参。

7. 配置文件重点参数

参数类别 关注内容 说明
话题名称 LiDAR、IMU、Camera topic 必须和实际 ROS 话题一致
相机内参 $f_x,f_y,c_x,c_y$ 决定图像投影是否准确
相机畸变 $k_1,k_2,p_1,p_2$ 等 畸变不准会影响视觉误差
外参矩阵 $T_{LI},T_{CI}$ 决定传感器空间关系
IMU 噪声 gyro、acc noise 影响预测和滤波稳定性
图像参数 分辨率、曝光、帧率 影响视觉跟踪效果
点云参数 过滤范围、体素大小 影响速度和建图质量

参数调试原则:先保证话题和外参正确,再调噪声参数和滤波参数;先低速运动测试,再增加运动幅度;先室内简单场景测试,再进入复杂环境。

8. 常见问题与排查

问题 可能原因 排查方向
地图重影 时间不同步、外参错误 检查时间戳和 $T_{LI}$
轨迹漂移严重 IMU 参数错误、LiDAR 退化 检查 IMU 噪声和点云质量
加入视觉后变差 相机外参错误、曝光不合适 检查 $T_{CI}$、图像质量
图像跟踪失败 运动模糊、纹理太弱 提高快门速度,降低运动速度
点云扭曲 IMU-LiDAR 同步问题 检查 deskew 和时间戳
编译失败 依赖缺失、ROS 版本不匹配 检查 PCL、OpenCV、Eigen、SDK
CPU 占用高 图像分辨率高、点云过密 降分辨率、加体素滤波

9. 拓展流程

9.1 FAST-LIVO2

FAST-LIVO2 是 FAST-LIVO 的后续改进版本,通常在速度、精度和系统统一性上更强。如果目标是做长期研究或工程部署,可以优先关注 FAST-LIVO2。学习路线:FAST-LIO2 -> FAST-LIVO -> FAST-LIVO2。

9.2 接入 Nav2

FAST-LIVO 可以作为定位模块,为机器人导航提供位姿估计。典型链路为:FAST-LIVO 输出 odom/pose -> 转换为 Nav2 可用 TF -> Nav2 使用地图和定位进行规划 -> 输出 /cmd_vel -> 底盘执行。重点是保证 TF 链完整,例如 map -> odom -> base_link -> lidar/camera

9.3 生成彩色点云地图

由于 FAST-LIVO 同时有点云和图像,可以进一步把图像颜色投影到点云上,生成彩色点云地图。流程为:LiDAR 点云 -> 根据外参投影到图像平面 -> 读取像素颜色 -> 给点云赋 RGB -> 保存彩色点云地图。

9.4 加入语义信息

可以结合 YOLO、语义分割或目标检测模型,把图像中的目标类别加入地图。流程为:相机图像 -> 目标检测/语义分割 -> 与点云关联 -> 生成带类别标签的语义地图。这个方向适合机器人导航、具身智能、场景理解和安全避障。

9.5 加入 GPS/RTK

如果在室外使用,可以加入 GPS 或 RTK,形成局部高精度 + 全局无漂移的系统。流程为:FAST-LIVO 提供局部连续位姿 -> RTK 提供全局位置约束 -> 融合优化 -> 输出全局一致轨迹。

10. 学习与复现建议

推荐学习顺序:FAST-LIO2 原理 -> ESKF/ESIKF -> 点云配准与 ikd-Tree -> 视觉直接法 -> FAST-LIVO 系统结构 -> 传感器标定与同步 -> 真机部署。复现时不要一上来改源码,先跑通官方数据集,再跑自己的 rosbag,最后上真机实时运行。

最重要的复现原则:先让 IMU 正常,再让 LiDAR + IMU 稳定,再加入 Camera;先解决时间同步和外参,再考虑调算法参数。