Skip to content

[Wayfinder] 机械臂实时关节状态自动投影到 Workbench 3D #224

Description

@TablewareBox

背景与已确认事实

pTLC 的 CR5 已经可以由 MoveIt 仿真执行,并由 joint_state_broadcaster 发布真实 /joint_states。Workbench 当前也能加载 CR5 URDF/STL;但是网页不会自动订阅并应用实时关节状态。现有截图是一次性读取控制器发布的 /joint_states,再通过浏览器侧 URDFRobot.setJointValue() 注入后得到的真实仿真姿态,不是产品链路的自动实时联动。

当前缺口位于:

  1. 机器人运行时没有向 OS 暴露跨 MoveIt / TCP-SDK / PLC 的统一运动学遥测端口。
  2. OS 当前 /api/v1/ws/device_status 是 1 Hz 标量设备状态投影,不承载结构化高频关节数组。
  3. Backend 当前没有机械臂运动学事件的可选中继合同。
  4. FE 的实时解析只覆盖 device_status;本地能力明确关闭 realtime.pushJointState
  5. Pascal 能加载 URDF,但没有按设备实例消费最新关节帧并调用 setJointValue() 的循环。

这与 #214 的 PointSet/点位资产不同:PointSet 是版本化目标几何;本 Issue 是只读、短寿命、不可作为控制证据的运行态观测。

目标数据流(候选,待 Grill 冻结)

MoveIt / TCP-SDK / PLC Adapter
        │
        ▼
RobotKinematicsTelemetryPort(统一、可选能力)
        │ canonical joint_ref/value_si + source witness
        ▼
Uni-Lab-OS 遥测投影(material.kinematics)
        ├── 本地模式:直接到 FE
        └── 远程模式:Backend 仅做短寿命中继
                         │
                         ▼
FE latest-value cache(按设备实例隔离)
        │
        ▼
Pascal URDFRobot.setJointValue()

强制边界

  • 这是观测接口,不是动作(Action)接口;不得通过发布 /joint_states 或修改 FE 状态伪造机械臂已经运动。
  • 生产控制仍走 RobotCommand / RobotCommissioningPort,并遵守维护租约、Claim/Fence、互锁和物理结算。
  • 领域设备包不固化环境 UUID;作者态使用稳定 device_ref,OS 激活时解析当前实例身份。
  • 不把每帧关节值写入 PointSet、物料图或调度写模型。
  • PLC/SDK 不具备关节读回时必须声明能力缺失并关闭实时姿态,不允许猜测。

Grill 决策登记(D15–D24)

D15 首期交付拓扑

D15-1 本地 Edge→FE 先闭环,Backend 作为下一阶段可选中继(推荐)

  • 优点:匹配当前本地工作台;最快消除手工浏览器注入;不引入网络依赖;先冻结通用合同。
  • 缺点:首期不能从云端 Backend 远程观看实时姿态;后续需补中继验收。
  • 影响:首期修改 Robotics、OS、FE/Pascal,不改 Backend。

D15-2 本地与远程四仓一次性闭环

  • 优点:同一版本同时支持本地和云端查看,减少阶段性交付差异。
  • 缺点:同时改 Robotics、OS、Backend、FE;安全、鉴权、断线、背压和兼容范围显著增大。

D15-3 Backend 优先,FE 必须经 Backend 获取

  • 优点:拓扑单一、中心化。
  • 缺点:本地可视化依赖网络与 Backend;不符合 Edge 本地优先,也扩大网络故障面。不推荐。

D16 驱动侧统一入口

D16-1 机器人包提供可选 RobotKinematicsTelemetryPort,MoveIt/SDK/PLC Adapter 各自实现(推荐)

  • 优点:OS/FE 不知道厂商协议;单机械臂、导轨机械臂与不同后端复用;PLC 无读回能力时可明确降级。
  • 缺点:需新增共享合同并分别实现/声明 Adapter 能力。

D16-2 OS 直接订阅 ROS /joint_states

  • 优点:MoveIt 最快接通。
  • 缺点:把 OS 绑定 ROS,SDK/PLC 仍需第二套路径;破坏通用机械臂包边界。

D16-3 各领域包自行发布自定义实时 Topic

  • 优点:领域包可自由适配现场。
  • 缺点:SZLab、pTLC 和以后领域包会重复协议,FE/OS 出现分支判断。不推荐。

D17 设备实例身份

D17-1 作者态 device_ref,OS 激活解析 node_uuid;帧携带 node_uuid + boot_id + sequence(推荐)

  • 优点:领域包无环境 UUID;同型号多机械臂不串流;重启和乱序可判定。
  • 缺点:需要激活映射和连接重建逻辑。

D17-2 在领域包/点位文件固化设备 UUID

  • 优点:查找直接。
  • 缺点:删除重建、换环境或重新上传后易失效;违背已冻结 D8b。不接受为推荐方案。

D17-3 线上帧只携带 device_ref

  • 优点:报文更简单、可读。
  • 缺点:多部署、多实例和热重建时可能歧义,无法可靠隔离同型号机械臂。

D18 驱动关节名与网页 URDF 关节名映射

D18-1 exact Arm 型号拥有两段显式映射:驱动名→canonical joint_ref→URDF joint name(推荐)

  • 优点:不依赖字符串猜测;CR5/CR7/不同厂商可独立验证;两台 CR5 使用同一模型也不会重名,因为状态先按实例隔离再映射本地关节名。
  • 缺点:每个 exact Arm 型号需维护并测试一份小型映射资产。

D18-2 FE 自动去除设备名前缀并猜测 joint1..joint6

  • 优点:改动少。
  • 缺点:命名稍变即错误,且可能把状态应用到错误关节;无法作为生产方案。

D18-3 每个设备实例动态生成一份关节名完全匹配驱动的 URDF

  • 优点:线上无需第二段映射。
  • 缺点:模型端点、缓存、摘要、同型号复用和 ToolContext 组合都会复杂化;静态资产不再稳定。

D19 OS/FE 实时通道

D19-1 在统一实时 WebSocket 中增加 typed material.kinematics channel(推荐)

  • 优点:连接、认证、重连和订阅统一;与设计文档中的 push_joint_state 方向一致;不污染 1 Hz 状态 DTO。
  • 缺点:需扩展 OS、可选 Backend、FE 的协议版本和能力协商。

D19-2 把关节数组塞进现有 device_status

  • 优点:接口数量少。
  • 缺点:1 Hz 太卡;标量状态和高频数组耦合;所有设备承担机器人专有负担。

D19-3 新建专用 /ws/robot-joints

  • 优点:首版实现直观、流量隔离。
  • 缺点:第二套连接/鉴权/重连/背压;长期接口面更大。

D20 频率与背压

D20-1 默认向 UI 投影 30 Hz,可按设备配置上限;每实例 latest-value-wins,不排队、不逐帧持久化(推荐)

  • 优点:3D 观感顺滑;慢浏览器不会积压历史帧;资源消耗可控。
  • 缺点:中间帧会主动丢弃,不能直接用于精密轨迹分析。

D20-2 固定 10 Hz

  • 优点:负载低。
  • 缺点:快速关节运动可见阶跃,调试体验一般。

D20-3 使用控制器原始频率并排队每一帧

  • 优点:表面上最完整。
  • 缺点:延迟和内存会在慢消费者下持续增长,UI 最终看到旧姿态;不适合实时画布。

D21 过期、乱序与重连表现

D21-1 校验 source_timestamp + sequence + boot_id;过期时冻结最后姿态并显示“遥测已过期”,拒绝旧 boot/乱序帧(推荐)

  • 优点:不伪造零位;维护人员能区分“机械臂停止”与“链路失联”;重连后不会倒放。
  • 缺点:FE 需增加 stale 状态和可见提示。

D21-2 超时后模型回零

  • 优点:实现简单。
  • 缺点:会显示并不存在的物理姿态,危险且误导。

D21-3 超时后直接隐藏机械臂

  • 优点:不会展示旧姿态。
  • 缺点:用户失去最后可用上下文,也难以判断模型加载还是遥测故障。

D22 Backend 的职责

D22-1 本地首期不经过 Backend;远程阶段 Backend 只做鉴权后的短寿命中继(推荐)

  • 优点:不把高频遥测当业务持久化;本地不依赖网络;Backend 容量边界清晰。
  • 缺点:远程中继需要后续独立验收。

D22-2 首期强制所有遥测经过 Backend

  • 优点:本地/远程路径一致。
  • 缺点:延迟、网络和 Backend 可用性成为本地 3D 前置条件。

D22-3 Backend 持久化每一帧关节状态

  • 优点:可完整回放。
  • 缺点:写放大、存储和保留策略成本高;把观测历史混入业务数据。不推荐。若未来要轨迹分析,应另建采样时序存储。

D23 读写安全边界

D23-1 本 Issue 只实现只读遥测;网页控机继续走独立 RobotCommissioningPort(推荐)

  • 优点:不会因 3D 联动绕过维护租约、Fence、互锁与动作回执;职责清晰。
  • 缺点:网页“看”和“控”分两个交付阶段。

D23-2 同一条实时通道同时承载读与写

  • 优点:表面接口少。
  • 缺点:遥测连接获得控机能力,权限与安全审计复杂;不推荐。

D23-3 FE 直接写关节值驱动画面,不要求设备回读

  • 优点:演示快。
  • 缺点:只是在浏览器造姿态,无法证明机器人已执行;明确禁止作为实现。

D24 验收等级

D24-1 自动化验收“两台同型号机械臂不串流 + MoveIt 命令后网页自动更新 + 断线过期/重连恢复 + 零手工注入”(推荐)

  • 优点:直接覆盖重名、实时性和断线三个核心风险。
  • 缺点:需要跨 Robotics/OS/FE 的集成测试夹具。

D24-2 单台 CR5 能自动动起来并截图

  • 优点:较快。
  • 缺点:无法证明多实例隔离和重连正确,只适合作为演示证据。

D24-3 仅做各仓单元测试

  • 优点:成本最低。
  • 缺点:无法证明产品链路真正闭环,不足以验收。

候选实施阶段

  1. 冻结 D15–D24。
  2. Robotics:新增通用运动学遥测合同、CR5 MoveIt 实现、SDK/PLC 能力声明和 joint mapping 资产。
  3. OS:新增 material.kinematics 投影、实例解析、latest-value 背压和能力协商;保留现有 device_status
  4. FE/Pascal:新增 typed parser、按实例 latest-frame cache、stale 状态和 URDF joint apply loop。
  5. 本地 E2E:两台同型号机械臂、真实 MoveIt 仿真、无浏览器注入。
  6. 若选择远程阶段:Backend 增加无持久化中继、鉴权、限流和重连 E2E。

关联

当前只做规划与 Grill;未修改代码。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions