worker 协议
worker 是位于 HTTP 之后的一个机器人,可以是仿真的,也可以是真实的:harness serve --factory module:create_environment [--options FILE] [--port P] [--contract C --embodiment E](src/harness_policy/core/worker.py)。一次处理一个请求;默认只监听回环地址(绑定其他网络接口需要 HARNESS_WORKER_TOKEN,作为 bearer token 发送)。src/harness_policy/core/robot.py(RemoteEnvironment)是客户端。
POST /rpc {"method": "...", "arguments": {...}} -> {"result": ...} | {"error": "..."}| 方法 | 参数 | 结果 |
|---|---|---|
describe |
{protocol_version: 1, name, tools} |
|
reset |
task, seed |
第一个观测:{episode_id, step, instruction, state, images} |
call |
name, arguments |
环境某个方法的结果,见下文 |
机器人 API(call)
Section titled “机器人 API(call)”| 名称 | 参数 | 结果 |
|---|---|---|
profile |
静态信息:关节组、动作限制、控制频率、相机、机械臂基座、夹爪常量、规划器限制、安全层(shield)选项、return_to_start、步数上限(原生 contract) |
|
state |
episode_id |
step、ended、joint_position(双臂 ARX X5 上为 14 个:左臂 6 个关节、左夹爪、右臂 6 个关节、右夹爪)、left_ee_pose、right_ee_pose(link6,[x, y, z, qw, qx, qy, qz],env 坐标系) |
tick |
episode_id、step、command(绝对关节目标),可选 cameras |
{executed, shield: {verdict, command, reasons}, state[, observation]} |
observe |
episode_id、cameras、image_format、quality |
{state, images (data URLs), intrinsics, camera_to_world (OpenCV convention), image_size} |
fk |
command(关节) |
{arm: link6 pose} |
ik |
episode_id、arm、pose |
从当前关节出发的 {success, joints} |
plan |
episode_id、arm、pose 或 joints、raw |
按控制频率的 {success, waypoints}(raw:规划器自己的路径) |
policy_obs |
episode_id |
RoboDojo 评测客户端交给策略的观测(用于 run_policy) |
claim_outcome |
episode_id |
一个 token,由 driver 在 reset 之后领取一次 |
outcome |
token |
{success, reward, process_score, terminated, truncated, steps} |
action_spec |
仅 RoboDojo:每条机械臂的安装位姿、关节限位和速度限制;控制频率 |
每个 worker 都遵守的规则:
- episode 和步。
tick指明它所针对的 episode 和计算时的步;过时的 tick 会被拒绝,且绝不会再次执行。可能已执行的运动绝不会被静默重试。 - 安全层在这里运行。 每条
tick命令在到达机器人之前都会被检查(episode 运行时);程序无法绕过它。 - 结果受保护。 只有 token 的持有者(driver)可以读取它;程序和模型永远看不到它。
contract
Section titled “contract”--contract xpolicylab --embodiment arx_x5 把每个结果过滤为 XPolicyLab 官方客户端交给策略的内容:夹爪取其最后一次命令值,内参和 camera_to_world 来自 embodiment,profile 和状态中没有步数上限(src/harness_policy/core/contract.py)。此时 profile 中写明 observation_contract: "xpolicylab"、gripper_feedback: "commanded"。
| 工厂 | benchmark |
|---|---|
benches.robodojo.runtime:create_environment |
RoboDojo,每个进程一个任务(Benchmark) |
benches.robotwin.runtime:create_environment |
RoboTwin 2.0,每个进程一个任务 |
harness_policy.connectors.xpolicylab.Bridge |
不由 harness serve 提供:XPolicyLab 连接器,一个以 XPolicyLab 客户端作为机器人的 worker |