欢迎光临
我们一直在努力

FASTLIO2_ROS2 在 Ubuntu 22.04 + ROS2 Humble 下配置指南

FASTLIO2_ROS2 在 Ubuntu 22.04 + ROS2 Humble 下配置指南

项目地址:https://github.com/liangheming/FASTLIO2_ROS2

一、先说结论

这个项目不是简单地把原始 FAST-LIO2 从 ROS1 搬到 ROS2。它在原始 FAST-LIO2 的基础上加了回环检测、重定位、地图优化三个大模块,相当于一个完整的 SLAM 方案了。

二、依赖一览

必须装的东西:

依赖用途
Ubuntu 22.04 系统
ROS2 Humble ROS 版本
PCL 点云处理
Eigen 矩阵运算
Sophus 李群李代数
GTSAM 位姿图优化(回环用)
Livox-SDK2 + livox_ros_driver2 览沃激光雷达驱动

下面一步步来。

三、安装依赖

3.1 基础依赖

sudo apt update
sudo apt install libpcl-dev libeigen3-dev libboost-all-dev

3.2 编译 Sophus

注意版本,要用 1.22.10,而且要关掉 fmt 依赖,不然会报错。

git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout 1.22.10
mkdir build && cd build
cmake .. -DSOPHUS_USE_BASIC_LOGGING=ON
make -j$(nproc)
sudo make install

-DSOPHUS_USE_BASIC_LOGGING=ON 这个参数必须加,不然新的 Sophus 依赖 fmt 库,编译会炸。

3.3 编译 GTSAM

回环检测和位姿图优化用的是 GTSAM。

git clone https://github.com/borglab/gtsam.git
cd gtsam
mkdir build && cd build
cmake .. -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF
make -j$(nproc)
sudo make install

-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF 建议关掉,不然在某些机器上会有指令集不兼容的问题。

3.4 编译 Livox-SDK2

git clone https://github.com/Livox-SDK/Livox-SDK2.git
cd Livox-SDK2
mkdir build && cd build
cmake .. && make -j$(nproc)
sudo make install
sudo ldconfig

3.5 编译 livox_ros_driver2

这个不能直接用 colcon build,要用它自带的 build.sh 脚本。

mkdir -p ~/ws_livox/src
git clone https://github.com/Livox-SDK/livox_ros_driver2.git ~/ws_livox/src/livox_ros_driver2
cd ~/ws_livox/src/livox_ros_driver2
source /opt/ros/humble/setup.bash
./build.sh humble

编译完之后,记得 source:

cd ~/ws_livox
source install/setup.bash

建议加到 ~/.bashrc 里,省得每次都手动 source。

四、编译 FASTLIO2_ROS2

4.1 创建工作空间

mkdir -p ~/fastlio2_ws/src
cd ~/fastlio2_ws/src
git clone https://github.com/liangheming/FASTLIO2_ROS2.git

4.2 编译

cd ~/fastlio2_ws
source /opt/ros/humble/setup.bash
source ~/ws_livox/install/setup.bash
colcon build

编译通过就完事了。

五、跑起来

5.0 数据来源:实时驱动 vs 录包回放

Mid360 的数据有两种搞法,二选一:

方式一:实时驱动 Mid360

直接连雷达,让 Mid360 实时发数据,FAST-LIO 实时算。适合现场调试、实时建图。

# 启动 Mid360 驱动(发布 /livox/lidar 和 /livox/imu 两个话题)
source ~/ws_livox/install/setup.bash
ros2 launch livox_ros_driver2 msg_MID360_launch.py

驱动起来后,Mid360 会发布两个核心话题:

  • /livox/lidar — 点云数据(CustomMsg 格式)
  • /livox/imu — IMU 数据

确认一下话题有没有:

ros2 topic list

看到这俩话题就对了,然后直接启动下面的 FAST-LIO 节点就行。

方式二:先录 bag,再回放

先把数据录下来,回来再慢慢调参数、跑回环、跑优化。适合数据采集、算法调试。

录包(只录两个核心话题就够了,省空间):

source ~/ws_livox/install/setup.bash
ros2 launch livox_ros_driver2 msg_MID360_launch.py

另开一个终端录包:

ros2 bag record /livox/lidar /livox/imu -o mid360_data

录完 Ctrl+C 停。回放的时候:

ros2 bag play mid360_data

然后启动 FAST-LIO、PGO、HBA 什么的都行,想跑多少遍跑多少遍。

5.1 纯激光惯性里程计

source ~/fastlio2_ws/install/setup.bash
ros2 launch fastlio2 lio_launch.py

然后播放 bag:

ros2 bag play your_bag_file

5.2 里程计 + 回环

先启动回环节点:

ros2 launch pgo pgo_launch.py
ros2 bag play your_bag_file

保存地图:

ros2 service call /pgo/save_maps interface/srv/SaveMaps "{file_path: 'your_save_dir', save_patches: true}"

save_patches 设为 true,后面要用 HBA 优化地图的话需要这个。

5.3 重定位

启动重定位节点:

ros2 launch localizer localizer_launch.py

设置初始位姿:

ros2 service call /localizer/relocalize interface/srv/Relocalize "{pcd_path: 'your_map.pcd', x: 0.0, y: 0.0, z: 0.0, yaw: 0.0, pitch: 0.0, roll: 0.0}"

检查重定位结果:

ros2 service call /localizer/relocalize_check interface/srv/IsValid "{code: 0}"

5.4 一致性地图优化

小场景用 BLAM,大场景用 HBA。

ros2 launch hba hba_launch.py

调用优化服务:

ros2 service call /hba/refine_map interface/srv/RefineMap "{maps_path: 'your maps directory'}"

六、和原始 FAST-LIO2 的区别

原始 FAST-LIO2 仓库:https://github.com/hku-mars/FAST_LIO

6.1 总体对比

特性原始 FAST-LIO2FASTLIO2_ROS2
ROS 版本 ROS1 ROS2 Humble
核心功能 激光惯性里程计(LIO) LIO + 回环 + 重定位 + 地图优化
回环检测 位置先验 + ICP 检测,GTSAM 位姿图优化
重定位 由粗到细两阶段 ICP
地图优化 BLAM(小场景)+ HBA(大场景)
支持雷达 Livox、Velodyne、Ouster 等 基本一致(基于同一套前端)

6.2 具体说一下加了什么

1. 回环检测(PGO 节点)

  • 原始 FAST-LIO2 是纯里程计,跑久了漂移是必然的
  • 这个版本加了位置先验 + ICP 的回环检测
  • 检测到回环后用 GTSAM 做位姿图优化,修正累积误差

2. 重定位(Localizer 节点)

  • 原始 FAST-LIO2 没有重定位功能,每次都得重新开始
  • 这个版本支持加载已有的 PCD 地图,通过两阶段 ICP 进行重定位
  • 先粗配准再精配准,给定初始位姿后就能在已有地图上继续跑

3. 一致性地图优化(HBA/BLAM)

  • 原始 FAST-LIO2 的地图就是 LIO 直接堆出来的,点云一致性一般
  • 这个版本集成了 BLAM(小场景)和 HBA(大场景)两种地图优化方法
  • 优化后的地图点云更规整,更适合后续使用

4. ROS2 重构

  • 代码从 ROS1 重构到 ROS2 Humble
  • launch 文件从 xml 改成了 python
  • 消息类型、参数机制全部换成 ROS2 的

6.3 性能方面的坑

作者自己在 README 里说了:由于 ROS2 的 timer、subscriber、service 回调都跑在同一个线程里,电脑性能不行的时候会出现阻塞。建议把耗时的回调(比如主循环的 timerCB)单独放一个线程里。

这个问题在 ROS1 里其实也有,但 ROS2 的执行器模型默认是单线程的,更容易暴露出来。

七、常见坑

  • Sophus 编译报错:记得加 -DSOPHUS_USE_BASIC_LOGGING=ON,或者自己装 fmt 库
  • livox_ros_driver2 编译失败:必须用它的 build.sh humble,不能直接 colcon build
  • 找不到 livox 相关消息:source 顺序很重要,先 source livox 的 workspace,再编译 FASTLIO2
  • GTSAM 链接错误:编译 GTSAM 时加上 -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF,避免指令集问题
  • 运行时回调卡住:电脑性能差的话,参考作者建议,把 timerCB 放到独立线程
  • 八、总结

    这个项目本质上是把 FAST-LIO2 作为前端,然后在上面加了一套完整的 SLAM 后端。如果你只是需要一个激光惯性里程计,用原版 FAST-LIO2 也行;如果你需要回环、重定位、地图优化这些完整 SLAM 功能,这个 ROS2 版本值得一试。

    赞(0)
    未经允许不得转载:171主机测评 » FASTLIO2_ROS2 在 Ubuntu 22.04 + ROS2 Humble 下配置指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址