背景与已确认事实
pTLC 的 CR5 已经可以由 MoveIt 仿真执行,并由 joint_state_broadcaster 发布真实 /joint_states。Workbench 当前也能加载 CR5 URDF/STL;但是网页不会自动订阅并应用实时关节状态。现有截图是一次性读取控制器发布的 /joint_states,再通过浏览器侧 URDFRobot.setJointValue() 注入后得到的真实仿真姿态,不是产品链路的自动实时联动。
当前缺口位于:
- 机器人运行时没有向 OS 暴露跨 MoveIt / TCP-SDK / PLC 的统一运动学遥测端口。
- OS 当前
/api/v1/ws/device_status 是 1 Hz 标量设备状态投影,不承载结构化高频关节数组。
- Backend 当前没有机械臂运动学事件的可选中继合同。
- FE 的实时解析只覆盖
device_status;本地能力明确关闭 realtime.pushJointState。
- 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 仅做各仓单元测试
- 优点:成本最低。
- 缺点:无法证明产品链路真正闭环,不足以验收。
候选实施阶段
- 冻结 D15–D24。
- Robotics:新增通用运动学遥测合同、CR5 MoveIt 实现、SDK/PLC 能力声明和 joint mapping 资产。
- OS:新增
material.kinematics 投影、实例解析、latest-value 背压和能力协商;保留现有 device_status。
- FE/Pascal:新增 typed parser、按实例 latest-frame cache、stale 状态和 URDF joint apply loop。
- 本地 E2E:两台同型号机械臂、真实 MoveIt 仿真、无浏览器注入。
- 若选择远程阶段:Backend 增加无持久化中继、鉴权、限流和重连 E2E。
关联
当前只做规划与 Grill;未修改代码。
背景与已确认事实
pTLC 的 CR5 已经可以由 MoveIt 仿真执行,并由
joint_state_broadcaster发布真实/joint_states。Workbench 当前也能加载 CR5 URDF/STL;但是网页不会自动订阅并应用实时关节状态。现有截图是一次性读取控制器发布的/joint_states,再通过浏览器侧URDFRobot.setJointValue()注入后得到的真实仿真姿态,不是产品链路的自动实时联动。当前缺口位于:
/api/v1/ws/device_status是 1 Hz 标量设备状态投影,不承载结构化高频关节数组。device_status;本地能力明确关闭realtime.pushJointState。setJointValue()的循环。这与 #214 的 PointSet/点位资产不同:PointSet 是版本化目标几何;本 Issue 是只读、短寿命、不可作为控制证据的运行态观测。
目标数据流(候选,待 Grill 冻结)
强制边界
/joint_states或修改 FE 状态伪造机械臂已经运动。device_ref,OS 激活时解析当前实例身份。Grill 决策登记(D15–D24)
D15 首期交付拓扑
D15-1 本地 Edge→FE 先闭环,Backend 作为下一阶段可选中继(推荐)
D15-2 本地与远程四仓一次性闭环
D15-3 Backend 优先,FE 必须经 Backend 获取
D16 驱动侧统一入口
D16-1 机器人包提供可选
RobotKinematicsTelemetryPort,MoveIt/SDK/PLC Adapter 各自实现(推荐)D16-2 OS 直接订阅 ROS
/joint_statesD16-3 各领域包自行发布自定义实时 Topic
D17 设备实例身份
D17-1 作者态
device_ref,OS 激活解析node_uuid;帧携带node_uuid + boot_id + sequence(推荐)D17-2 在领域包/点位文件固化设备 UUID
D17-3 线上帧只携带
device_refD18 驱动关节名与网页 URDF 关节名映射
D18-1 exact Arm 型号拥有两段显式映射:驱动名→canonical joint_ref→URDF joint name(推荐)
D18-2 FE 自动去除设备名前缀并猜测
joint1..joint6D18-3 每个设备实例动态生成一份关节名完全匹配驱动的 URDF
D19 OS/FE 实时通道
D19-1 在统一实时 WebSocket 中增加 typed
material.kinematicschannel(推荐)push_joint_state方向一致;不污染 1 Hz 状态 DTO。D19-2 把关节数组塞进现有
device_statusD19-3 新建专用
/ws/robot-jointsD20 频率与背压
D20-1 默认向 UI 投影 30 Hz,可按设备配置上限;每实例 latest-value-wins,不排队、不逐帧持久化(推荐)
D20-2 固定 10 Hz
D20-3 使用控制器原始频率并排队每一帧
D21 过期、乱序与重连表现
D21-1 校验
source_timestamp + sequence + boot_id;过期时冻结最后姿态并显示“遥测已过期”,拒绝旧 boot/乱序帧(推荐)D21-2 超时后模型回零
D21-3 超时后直接隐藏机械臂
D22 Backend 的职责
D22-1 本地首期不经过 Backend;远程阶段 Backend 只做鉴权后的短寿命中继(推荐)
D22-2 首期强制所有遥测经过 Backend
D22-3 Backend 持久化每一帧关节状态
D23 读写安全边界
D23-1 本 Issue 只实现只读遥测;网页控机继续走独立 RobotCommissioningPort(推荐)
D23-2 同一条实时通道同时承载读与写
D23-3 FE 直接写关节值驱动画面,不要求设备回读
D24 验收等级
D24-1 自动化验收“两台同型号机械臂不串流 + MoveIt 命令后网页自动更新 + 断线过期/重连恢复 + 零手工注入”(推荐)
D24-2 单台 CR5 能自动动起来并截图
D24-3 仅做各仓单元测试
候选实施阶段
material.kinematics投影、实例解析、latest-value 背压和能力协商;保留现有device_status。关联
LOCAL-233跟踪当前只做规划与 Grill;未修改代码。