Action primitives#

Planner 决定 做什么, 而 action primitive 决定 怎么做。所谓 primitive 就是把一次 tool 调用 (pi0_pickmove_toopen_drawer…) 变成 一段可以直接送给 environment 执行的动作。

RPent 内置支持两大类 primitive:

  • VLA 策略 (Vision-Language-Action 模型)。跑在专门的 vla_server 进程里, 把 GPU 权重与物理引擎隔离; toolkit 通过 per-env 的 model client 调用它。例如 Pi0.5 (LIBERO)、RLDX-1 (RoboCasa)。

  • 脚本化 primitive。确定性运动, 如 move_torotate_wristreleaseback_project。它们放在 agent 侧 (不需要 VLA 权重), 通过 env_server 的 RPC 调用。

具体到每一种机器人的配置 (哪个 VLA、checkpoint 路径、tool surface), 参见对应的 environment 页: LIBERORoboCasaFrankaSO-101

不同 environment 用哪个 VLA#

Environment / 机器人

默认 VLA

传输协议

Server

LIBERO (仿真)

Pi0.5

HTTP /predict

robots/libero/vla_server.py

RoboCasa (仿真)

RLDX-1

pickle-framed socket RPC

robots/robocasa/vla_server.py

Franka (真机)

Pi0.5 或 RLDX-1 (依任务而定)

HTTP 或 socket

robots/franka/vla_server.py (规划中)

SO-101 (真机)

RLDX-1 (依任务而定)

socket RPC

robots/so101/vla_server.py (规划中)

传输协议按 obs 形状选择: 扁平的 image+state 载荷用 HTTP (LIBERO/Pi0.5), 历史堆叠的嵌套 numpy dict 用 socket (RoboCasa/RLDX-1)。设计理由参见 添加新机器人

复用一个已在运行的 VLA server#

每一个 VLA server 都设计成 可跨 run 复用。用 --vla-endpoint 指向已在跑的实例, 而不是每次都启动新实例:

python rpent/cli/main.py --vla-endpoint http://localhost:8000 \
  --suite libero_object_swap --task 2 --seed 0 --cerebrum api \
  --model anthropic:claude-opus-4-8

跑批量任务时推荐这样做: VLA 权重加载一次, 每次 run 起的 env 都是 一次性的。

新增全新的 primitive 家族#

如果要接入的既不是 VLA 也不是脚本化运动 —— 比如一个 WAM (World Action Model)、扩散规划器、或 MPC primitive —— 参见 添加 action primitive