uBotROS 概述与架构
需要:uBotROS 0.1.x(含依赖 uBotCore、uBotSensor)
uBotROS 把 uBot 传感器、TF 和仿真时钟发布到 ROS 2,并把 ROS 2 的速度、姿态和电机指令交给 UE 里的执行器。
UE 是 TCP 客户端,桥是 TCP 服务器:蓝色箭头是 UE 发给 ROS 2 的数据,灰色箭头是 ROS 2 发给 UE 的速度(cmd_vel)、姿态和电机指令。UE 侧不依赖 TempoROS、rclcpp 或其他第三方库,插件自己把消息编码成 ROS 2 的 CDR 字节。
桥是一个很小的 rclpy 节点,把收到的字节原样发布到 ROS 2 话题,并把 UE 订阅的话题原样转发回 UE。UE 可以在 Windows 上,桥和 ROS 2 在 WSL 或另一台 Linux 机器上,两边只靠这一条连接相连。
| 能力 | 方向 | 页面 |
|---|---|---|
| 把位姿、里程计、IMU、2D / 3D 激光雷达、RGB / 深度相机发布成 ROS 2 话题 | UE → ROS 2 | 发布传感器数据 |
发布 /tf、聚合的 /tf_static 和 /clock |
UE → ROS 2 | TF 与 /clock |
接收 cmd_vel,换算后交给实现了 UBot Velocity Commandable 的对象 |
ROS 2 → UE | 接收 cmd_vel |
| 接收姿态、角速度和单电机指令,交给无人机(0.1.2 起) | ROS 2 → UE | 从 ROS 2 发飞行指令 |
| 连接桥,断线自动重连并重新注册 | UE ↔ 桥 | 连接与状态 |
| 在 WSL 或 Linux 上运行桥 | — | 准备 ROS 2 端 |
桥子系统只存在于 Game 和 PIE 世界,所以点「Play」之后才会发布数据。
已发布 最新版本 0.1.2
用 uBot Manager 安装,依赖会一并装好;应用组合「ROS 2 传感器」会同时装上 uBotCore、uBotSensor 和 uBotROS。插件在 Windows 上开发和测试,Linux 上的 UE 没有单独验证。
ROS 2 端要另外准备:ROS 2 Humble 和桥节点 ubot_ros_bridge。桥的源码随插件放在 ros2/ubot_ros_bridge,做法见准备 ROS 2 端。
| 组件 | 作用 | 参考 |
|---|---|---|
uBot ROS Sensor Bridge |
发现所属 Actor 上的 uBot 传感器,发布到 ROS 2,并发布传感器 TF | uBot ROS Sensor Bridge |
uBot ROS Velocity Command |
订阅 cmd_vel,换算、限速后交给执行器,带超时 |
uBot ROS Velocity Command |
uBot ROS Attitude Command |
订阅 cmd_attitude,把姿态或角速度指令交给执行器,带超时(0.1.2 起) |
uBot ROS Attitude Command |
uBot ROS Motor Command |
订阅 cmd_motors,把单电机指令交给执行器,带超时(0.1.2 起) |
uBot ROS Motor Command |
UBot ROSBridge Subsystem |
每个 Game / PIE 世界一条 TCP 连接;/tf、/tf_static 和 /clock 由它发布 |
UBot ROSBridge Subsystem |
uBot ROS(项目设置) |
桥的地址、端口,/clock,队列限制 |
uBot ROS |
IUBotROSSensorPublisherFactory |
扩展点 UBotROS.SensorPublisher,为自定义传感器添加发布器;内置 7 个工厂,对应 UBotSensor 的 7 种传感器 |
为自定义传感器添加 ROS 发布器 |
ubot_ros_bridge |
ROS 2 侧的桥节点(rclpy),在插件的 ros2/ubot_ros_bridge 里 |
准备 ROS 2 端 |
- 准备 ROS 2 端:装好 Humble,启动桥,确认 UE 连得上。
- 连接与状态:地址、端口、连接状态和断线重连。
- 发布传感器数据:给 Actor 加 Sensor Bridge,在 ROS 2 里看到话题。
- 接收 cmd_vel:用 ROS 2 的速度指令驱动 Actor。
- 从 ROS 2 发飞行指令:从 ROS 2 给无人机发姿态、角速度和电机指令。