本计划涵盖两项重大任务:
- 将原基于 ROS1 的 FAST-LIVO2 核心代码库完全移植至 ROS2 (例如 Humble/Foxy),并部署于新目录
FAST-LIVO2-ROS2。 - 配置基于 ROS2 的 Isaac Sim 无人机仿真环境(让无人机沿预设轨迹进行自主巡航),生成视觉+激光雷达数据供 FAST-LIVO2-ROS2 进行三维着色建图。
Warning
将 FAST-LIVO2 这样庞大且包含大量多传感器同步和状态估计架构的 C++ 工程从 ROS1 移植到 ROS2 是一项复杂的工程。我们将进行结构化迁移以确保原算法底层不被破坏。请确认以下重构细节:
- 节点结构变化: 我们会用
rclcpp::Node替代原有的ros::NodeHandle。同时会将大量nh.param()等参数读取替换为 ROS2 声明式参数机制。 - 通信与时间同步: 项目内的
tf将被转换为tf2_ros,图像传输的image_transport、同步锁等都会替换为适合 ROS2 的 API。 - 雷达消息格式: FAST-LIVO2 默认包含针对 Livox 雷达的 CustomMsg,为了避免引入额外的 ROS2 Livox 驱动依赖并在仿真中顺利运行,我们仿真中发出的 LiDAR 会采用通用 PointCloud2 (Ouster 形式),以确保兼容性。
我们将创建一个新工程:\\192.168.124.39\work-nwh\FAST-LIVO2-ROS2,并进行底层架构迁移。
- 将原版的
catkin构建体系替换为基于ament_cmake,并更新所有库依赖(rclcpp,tf2_ros,sensor_msgs,nav_msgs,cv_bridge等)。
基于 ROS2 API 进行 C++ 代码级别的大规模修改:
- 主函数
main.cpp&LIVMapper.cpp: 将回调函数和多线程处理迁移到 ROS2MultiThreadedExecutor以及rclcpp::Node的create_subscription,create_publisher。 - TF 与 坐标转换: 剥离老版
<tf/...>引用,换用<tf2_ros/transform_broadcaster.h>。 - 内参配置文件: 更新 YAML 的语法以符合 ROS2 launch param 读取规范,编写基于 Python 的
launch.py文件替代 XMLlaunch。
开发一段带有动画轨迹的 Python 独立环境脚本。
- 场景与刚体: 自动搭建一个含有视觉纹理的物理场景。加载一个四旋翼无人机模型。
- 动画飞行 (Animation): 核心需求实现——添加一段固定轨迹的
omni.isaac.core.utils.primsAnimation/Action,让无人机起飞并在场地内环形绕圈飞行,模拟无人机巡检视角。 - ROS2 Action Graph (ROS2 Bridge): 挂载 Camera, IMU 和 Lidar (Robosense/Ouster 模式 16线),利用
omni.isaac.ros2_bridge组件向外高频发布/left/image_raw,/os1_cloud_node1/points,/imu/imu及系统时钟clock。
Important
- 您目前在 Windows / Ubuntu 或者服务器上的系统所安装的 ROS2 具体版本是什么?(例如:Humble, Foxy,或是 Iron 等)知道确切版本能避免某些 API 在不同 ROS2 版本间的差异报错。
- 原版代码中,FAST-LIVO2 调用了 OpenCV, PCL 和 一部分内置李代数运算。在执行此 ROS2 工程覆盖前,确保您宿主机内是否已经成功通过 ROS2 独立编译过像 FAST-LIO / PCL 等底层库?
在服务器/主机上,使用 colcon build --packages-select fast_livo2,验证能够零 Error 解析并完成二进制编绎。
- 运行
isaac_sim_drone_ros2_fast_livo.py(在 Omniverse 独立环境中执行),检查无人机是否能够自动化升空循迹飞行。 - 运行
ros2 launch fast_livo mapping_isaac_sim.launch.py use_sim_time:=true。 - 打开 RViz2,添加
PointCloud2显示,并监听/cloud_rgb主题。验证是否逐渐出现着色的建图效果。