跳转到内容

uBotROS 概述与架构

需要:uBotROS 0.1.x(含依赖 uBotCore、uBotSensor)

uBotROS 把 uBot 传感器、TF 和仿真时钟发布到 ROS 2,并把 ROS 2 的速度、姿态和电机指令交给 UE 里的执行器。

UE、TCP、ubot_ros_bridge 和 ROS 2 的关系UE 里的 UBotROS 插件是 TCP 客户端,经默认端口 8268 的一条 TCP 连接连到 ubot_ros_bridge。传感器、TF 和 /clock 的 CDR 字节从 UE 经桥发布到 ROS 2 话题;ROS 2 的 cmd_vel、姿态和电机指令经桥转发回 UE。Unreal EngineUBotROS · TCP 客户端Sensor Bridge指令组件Bridge Subsystemubot_ros_bridgerclpy 节点 · TCP 服务器监听 0.0.0.0:8268CDR 字节原样转发不反序列化消息ROS 2 Humble话题与节点TF 与 /clock传感器话题指令话题PUBLISHTCP 8268MESSAGE发布rclpy订阅每个世界一条连接WSL 或 LinuxROS_DOMAIN_ID 决定域

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

简介
经 TCP 桥接 ROS 2:传感器、TF、/clock、cmd_vel。
需要的插件
uBotCore ^0.1.2、uBotSensor ^0.1.0
引擎插件
无
提供
ROS.SensorPublishing、ROS.TF、ROS.Clock、ROS.VelocityCommand、ROS.AttitudeCommand、ROS.MotorCommand
用在这些组合里
ROS 2 传感器、ROS 地面机器人

用 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 端