feat(hostlink): 增加无 ROS 分布式 backend - #306
Open
Xuwznln wants to merge 17 commits into
Open
Conversation
# Conflicts: # unilabos/device_mesh/resource_visalization.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
做了什么
新增
--backend hostlink:直接加载 Python 设备驱动,不安装、不启动 ROS。引入通用
DeviceNode。设备驱动可以用同一套日志、异步任务、状态、物料和跨设备动作接口;ROS2 与 Basic/HostLink 分别提供实现。补齐通用 Publisher/Subscription。驱动可以继续使用
node.create_publisher(...).publish(...)、node.create_subscription(...)和@subscribe;ROS2 走 DDS,Basic 在进程内转发,HostLink 通过 7302/TCP 转发 JSON 消息。HostLink 支持 Host → Slave、Slave → Host、Slave → Slave 的设备动作调用。每次调用带 action ID,并传递进度反馈、协作取消、执行结果和错误。
相对 Topic(例如
value)按设备解析为/devices/<device_id>/value。Host 作为 Topic 转发中心;Slave 重连后自动恢复订阅。Slave 上报设备类型、display name、动作、状态字段和设备 UUID。状态变化立即通知,心跳补发完整状态。
Slave 启动时同步本地设备物料树;后续
update_resource/get_resource通过 HostLink 交给 Host 保存和查询,不依赖 ROS service 或 Web API。HostLink 同一连接上的请求并发处理,慢动作不会阻塞心跳;单条消息上限提高到 8 MB;设备分配发生交集变化时继续识别为同一个逻辑 Slave。
注册表支持
class.supported_backends。需要外部 ROS 图的驱动会在 HostLink 启动时明确提示使用ros2。启动方式
现在可以使用
Host/Slave 设备发现、在线状态和设备描述同步。
本地及远端 Python 驱动动作调用。
三种跨节点调用方向的动作反馈、取消和结果返回。
Basic/HostLink 的 JSON Topic 发布订阅,以及
@subscribe。状态快照、状态通知和物料树初始化、更新、替换、查询。
Slave 自动重连和 Topic 订阅恢复。
basic、hostlink、ros2驱动兼容声明和启动检查。ROS2 与 HostLink 怎么选
注册表声明的设备动作可以在 HostLink 上传递动作名称和 JSON 参数。
action_type可以保留在驱动调用里作为兼容信息,不要求驱动为 HostLink 删除这个参数。普通状态和 JSON 可表示的消息可以使用通用 Publisher/Subscription,在 HostLink 上传输。
MoveIt、相机图像、规划场景以及直接连接外部 ROS 节点的 Action/Topic 继续使用
--backend ros2。HostLink 的取消由驱动配合完成:长动作接收
ActionContext并检查取消;已经进入的阻塞硬件调用不会被强制中断。对 feat/edge-networking-and-scheduler 的梳理
该分支包含多条工作线,不只是 HostLink:
HostLink 辅助 ROS 组网:稳定 Slave 身份、ROS domain/发现参数、心跳、物料查询和诊断工具。
F002 本地 DAG 调度:并发走图、持久化游标、恢复和不变量测试。
F003 本地工作流桥:工作流翻译、WebSocket、8014 本地 API 和前端。
Edge 控制面:调度、库存/站点/物料、SQLite、云端同步和 OpenTelemetry。
Action lock、持久化职责和部署文档。
该分支的设备 Action 和 Topic 仍由 ROS2 传输;HostLink 负责发现和组网辅助。本 PR 只吸收了与当前目标直接相关的连接并发、8 MB 消息上限和逻辑 Slave 身份保持,没有把调度器、8014 页面或 Edge 控制面一起合入。
还要继续做
HostLink backend 目前不启动 WebSocket/FastAPI,因此 8002 管理页面和微前端还不能使用;7302 用于 Host/Slave 通信。
工作站跨设备物料搬运目前仍使用 ROS service。HostLink 已能同步物料树,但还没有同步目标驱动内部的 PLR 资源对象。
HostLink 物料树暂存在 Host 进程内,尚未自动上传云端。
HostLink 使用明文 TCP,跨网络部署需要防火墙、VPN 或安全隧道。
验证
Python 原生异步适配
awaitPython Future,不再用asyncio.to_thread包住整次 RPC。DeviceNode.call_device_action_async()支持 Host→Slave、Slave→Host 和 Slave→Slave。asyncio;同时支持 ROS 时优先调用通用DeviceNode帮助方法。80 passed;异步核心用例连续 5 轮通过。