使用 FAST-LIO2 算法
1 概述
FAST-LIO2 是一种紧耦合 LiDAR-Inertial Odometry 算法,可融合激光雷达点云和 IMU 数据,实时输出里程计、轨迹和点云地图。Hesai 已适配 FAST-LIO2 算法,支持 JT16 / JT128 在 ROS 1 和 ROS 2 环境下通过标准点云与 IMU 消息运行建图。
2 准备工作
开始前请确认满足以下条件:
- Ubuntu + ROS 环境:ROS 1 建议 Melodic 或 Noetic,ROS 2 使用 Humble。
- 已安装并编译 Hesai 点云 SDK
HesaiLidar_SDK_2.0(ROS 驱动 的底层依赖)。 - 已安装并编译 Hesai ROS 驱动
HesaiLidar_ROS_2.0,可正常输出点云和 IMU。 - 已获取并编译
FAST_LIO_Hesai中的 FAST-LIO2 适配代码(下文快速启动会逐步说明)。 - 实时连接雷达时,雷达、主机网卡与驱动配置处于同一网段。
2.1 版本支持
| 版本 | 推荐环境 / 分支 | 构建工具 | 启动方式 |
|---|---|---|---|
| ROS 1 | Ubuntu 18.04 / 20.04,Melodic / Noetic · main | catkin_make | roslaunch |
| ROS 2 | Ubuntu 22.04,ROS 2 Humble · ROS2 | colcon build | ros2 launch |
2.2 输入数据要求
默认配置读取以下 Topic:
| 数据 | ROS 1 消息类型 | ROS 2 消息类型 | 默认 Topic |
|---|---|---|---|
| 点云 | sensor_msgs/PointCloud2 | sensor_msgs/msg/PointCloud2 | /lidar_points |
| IMU | sensor_msgs/Imu | sensor_msgs/msg/Imu | /lidar_imu |
点云需要包含点级时间戳和线号字段:
| 字段 | 类型 | 说明 |
|---|---|---|
x | float32 | 点 X 坐标 |
y | float32 | 点 Y 坐标 |
z | float32 | 点 Z 坐标 |
intensity | float32 | 反射强度 |
ring | uint16 | 激光线号 |
timestamp | float64 | 点级相对时间戳 |
点级时间戳字段名必须为 timestamp。如果驱动或 rosbag 中使用了其他字段名,需要先转换为上述字段格式。
2.3 验证数据是否就绪
启动 FAST-LIO2 前,建议先运行 check_input.py 一键验证输入链路(topic 存在、点云字段、时间戳单调性与单位、丢帧检测、IMU 频率、陀螺仪单位、LiDAR/IMU 时间同步等):
# ROS 2(驱动或 rosbag 已在发布时执行)
ros2 run fast_lio check_input.py --model jt128
# ROS 1
rosrun fast_lio check_input.py --model jt16
如需对照 yaml 中的 preprocess.timestamp_unit 做一致性核对,追加 --timestamp-unit <值>(0=秒、1=毫秒、2=微秒、3=纳秒)。全部检查通过后再启动 FAST-LIO2。
3 快速启动
以下是完成从零到跑通建图的全过程步骤说明。依赖安装详情、常用参数配置和常见问题排查等请参阅后续各章节。
3.1 ROS 1 (Noetic) — JT16 / JT128
第一步 — 安装依赖
sudo apt update
sudo apt install -y \
ros-noetic-pcl-ros \
ros-noetic-eigen-conversions \
libeigen3-dev \
libpcl-dev
第二步 — 克隆仓库并编译
mkdir -p ~/fast_lio_ws/src
cd ~/fast_lio_ws/src
git clone git@github.com:HesaiTechnology-Spatial-Perception/FAST_LIO_Hesai.git
cd FAST_LIO_Hesai
git submodule update --init --recursive
cd ~/fast_lio_ws
source /opt/ros/noetic/setup.bash
catkin_make
source devel/setup.bash
第三步 — 启动 Hesai ROS 驱动
启动 Hesai ROS 驱动,使其发布 /lidar_points 和 /lidar_imu。
ROS 1:
cd ~/hesai_ros_ws
source devel/setup.bash
roslaunch hesai_ros_driver start.launch
实时连接雷达时,驱动配置中需启用实时数据源,并开启 ROS Topic 输出:
lidar:
- driver:
source_type: 1
lidar_udp_type:
device_ip_address: 192.168.1.201
udp_port: 2368
ptc_port: 9347
ros:
ros_send_point_cloud_topic: /lidar_points
ros_send_imu_topic: /lidar_imu
send_point_cloud_ros: true
send_imu_ros: true
根据实际网络修改 device_ip_address、udp_port 和 ptc_port。
第四步 — 启动 FAST-LIO2
cd ~/fast_lio_ws
source /opt/ros/noetic/setup.bash
source devel/setup.bash
roslaunch fast_lio mapping_jt16.launch # JT16
# roslaunch fast_lio mapping_jt128.launch # JT128
3.2 ROS 2 (Humble) — JT16 / JT128
第一步 — 安装依赖
sudo apt update
sudo apt install -y \
ros-humble-pcl-ros \
ros-humble-pcl-conversions \
ros-humble-tf2-ros \
libeigen3-dev \
libpcl-dev
第二步 — 克隆仓库并编译
mkdir -p ~/fast_lio2_ws/src
cd ~/fast_lio2_ws/src
git clone -b ROS2 git@github.com:HesaiTechnology-Spatial-Perception/FAST_LIO_Hesai.git
cd FAST_LIO_Hesai
git submodule update --init --recursive
cd ~/fast_lio2_ws
source /opt/ros/humble/setup.bash
colcon build --packages-select fast_lio --cmake-args -DCMAKE_BUILD_TYPE=Release
source install/setup.bash
ros2 pkg prefix fast_lio # 确认编译产物已注册
第三步 — 启动 Hesai ROS 2 驱动
启动 Hesai ROS 2 驱动,使其发布 /lidar_points 和 /lidar_imu。
ROS 2:
cd ~/hesai_ros2_ws
source install/setup.bash
ros2 launch hesai_ros_driver start.launch.py
第四步 — 启动 FAST-LIO2
cd ~/fast_lio2_ws
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch fast_lio mapping_jt16.launch.py # JT16
# ros2 launch fast_lio mapping_jt128.launch.py # JT128
第五步 — 查看效果
启动后,在 RViz 中将 Fixed Frame 设为 camera_init,订阅 /cloud_registered 和 /path,即可实时查看点云和轨迹。完整输出列表和累计地图配置见查看建图效果。
以下是 JT16 运行 FAST-LIO2 的效果示意图:
4 更多用法
4.1 启动选项
将命令中的 jt16 替换为 jt128 即可启动 JT128。如不需要打开 RViz,可追加 rviz:=false:
# ROS 1
roslaunch fast_lio mapping_jt128.launch rviz:=false
# ROS 2
ros2 launch fast_lio mapping_jt128.launch.py rviz:=false
4.2 使用 rosbag 回放
ROS 1:
roslaunch fast_lio mapping_jt16.launch
rosbag play your_data.bag
ROS 2:
ros2 launch fast_lio mapping_jt16.launch.py
ros2 bag play /path/to/your_bag
如果 rosbag 中 Topic 名称不同,可修改配置文件中的 Topic:
common:
lid_topic: "/your_points_topic"
imu_topic: "/your_imu_topic"
如果 rosbag 中保存的是 Hesai 原始 packet,需要先通过 Hesai 驱动解析并发布 /lidar_points 和 /lidar_imu,再运行 FAST-LIO2。
4.3 将 PCAP 转换为 rosbag
使用PandarView录制的PCAP文件,可以先把它转换成 FAST-LIO2 可直接回放的 rosbag。转换链路为:
input.pcap
↓ Hesai ROS 驱动(source_type: 2,PCAP 解析模式)
/lidar_points + /lidar_imu
↓ rosbag record / ros2 bag record
output.bag(ROS 1)或 output/ 目录(ROS 2)
↓ FAST-LIO2
仓库在 tools/pcap_to_rosbag/ 下提供了封装脚本,自动完成「生成 PCAP 驱动配置 → 启动解析 → 等待 topic → 录制 → 检测播放结束 → 校验 bag」全过程,无需手动操作驱动配置。
4.3.1 从 PCAP 跑通 FAST-LIO2
第一步 — 转换 PCAP 为 rosbag
ROS 1(输出为 .bag 文件):
bash tools/pcap_to_rosbag/pcap_to_rosbag_ros1.sh \
--model jt128 \
--pcap /data/input.pcap \
--correction /data/correction.csv \
--firetime /data/firetime.csv \
--output /data/output.bag \
--driver-ws ~/hesai_ros_ws
ROS 2(输出为目录,rosbag2 格式):
bash tools/pcap_to_rosbag/pcap_to_rosbag_ros2.sh \
--model jt128 \
--pcap /data/input.pcap \
--correction /data/correction.csv \
--firetime /data/firetime.csv \
--output /data/output \
--driver-ws ~/hesai_ros2_ws
脚本完成后会打印 bag 路径和下一步命令。
第二步 — 检查 bag 输入(可选但推荐)
回放 bag 的同时运行检查工具,确认点云字段、IMU 频率、时间同步等均正常,再进入下一步:
# 终端 1
rosbag play /data/output.bag # ROS 1
# ros2 bag play /data/output # ROS 2
# 终端 2
rosrun fast_lio check_input.py --model jt128 # ROS 1
# ros2 run fast_lio check_input.py --model jt128 # ROS 2
第三步 — 启动 FAST-LIO2 并回放 bag,在 RViz 查看建图效果
按使用 rosbag 回放节的步骤启动 FAST-LIO2 并回放 bag。RViz 会随 launch 自动打开——将 Fixed Frame 设为 camera_init,订阅 /cloud_registered 和 /path,即可实时看到 FAST-LIO2 的建图结果。
前提:PCAP 能被 Hesai 驱动正常解析、其中包含点云和 IMU、点云含
ring与timestamp字段;驱动配置文件中firetime_file_path等字段名以你当前驱动版本为准。脚本依赖 Python 3 的 PyYAML(pip3 install pyyaml)。
4.4 输入与配置检查工具
为减少因输入链路或配置错误导致的建图失败,仓库在 tools/ 下提供了三个检查脚本。
check_input.py — 运行时检查(驱动或 rosbag 已在发布数据时使用),自动诊断 topic 是否存在、点云字段、timestamp 单调性与单位、丢帧、ring 范围、IMU 频率、陀螺仪单位(deg/rad )、LiDAR 与 IMU 时间同步等:
# ROS 2
ros2 run fast_lio check_input.py --model jt128
# ROS 1
rosrun fast_lio check_input.py --model jt16
check_config.py — 静态检查 yaml 配置(不需要 ROS 运行),校验 lidar_type / scan_line 是否与型号和 ROS 版本匹配、timestamp_unit、imu_gyr_unit、blind、外参矩阵是否合法等:
python3 tools/check_config.py --config config/jt128.yaml --model jt128 --ros 2
python3 tools/check_config.py --config config/jt16.yaml --model jt16 --ros 1
check_map.py — 分析建图输出质量并给出针对性建议。检测面厚度(重影)、点云密度、轨迹漂移等,并指向可能的原因(外参 / 时间同步 / imu_gyr_unit / point_filter_num):
# 离线分析保存的 PCD(推荐)
python3 tools/check_map.py --pcd PCD/fast_lio2_jt_map.pcd
# 实时分析(需 publish.map_en 已开启)
ros2 run fast_lio check_map.py --map-topic /Laser_map --odom-topic /Odometry
更多选项见 tools/README.md。
4.5 使用 AI Agent Skill
仓库在 tools/agent/ 下提供了 Skill 文件(run_fastlio2_ros1.md / run_fastlio2_ros2.md),有两种使用方式:
- 让 agent 自动读取:将对应文件加入 agent 上下文,agent 会自动按 skill 流程完成环境检测、编译、数据转换和建图启动。
- 直接指令调用:使用
/run-fastlio2-hesai-ros1或/run-fastlio2-hesai-ros2显式触发对应 skill。