背景
当前 env 主要面向 RL(action 语义 = NN policy 输出)。目标:让规控 controller(IK / OSC / MPC 等模型控制方法)也能与 env 结合,使 policy 成为一种特殊的 controller,同一任务的 reward / termination / 评估口径对两类方法保持一致,并支撑 RL + 规控的分层组合与 sim-to-real 同构。
核心设计:两个抽象
两个抽象不在同一层,通过 action space 这一个契约点咬合:
决策体(env 外) ──actions──▶ Env[ ActionTerm(controller) ] ──obs──▶ 决策体
1. 决策体协议(env 外部,目前缺失)
- 最小接口:
reset(env_ids) / act(obs) -> actions,每 ctrl_dt 一次
- 实现者:RL policy、MPC 规划器、参考轨迹回放、遥操桥
- 保持薄协议(Gymnasium 留白哲学);可先以 play/view/bench 脚本的鸭子类型约定起步
step(actions) 的 actions 语义恒定 = "外部决策在 ctrl_dt 发出的指令"
2. Controller = ActionTerm(env 内部,已有雏形)
现有 ActionTerm(motrix_env_core numba/manager/actions.py:20)即 controller 抽象雏形,WbtJointPositionAction 是其平凡形式(常数仿射翻译)。需强化:
action_space() 即 action 语义定义者(关节空间 vs 任务空间)
- 控制律本体独立成 env 无关的纯 numpy/tensor 类(训练嵌 ActionTerm、部署嵌 DeployTask.process_action,共享同一份控制律)
- 参考 Isaac Lab:
process_actions(每 env step)与 apply_actions(每物理 step)双阶段,闭环校正跑在物理频率
配套工作
频率差边界
ctrl_dt 层走 obs/action 契约;高于 ctrl_dt 的控制器(子步级 WBC、200Hz 阻抗)不在本契约内,走 DirectEnv physics_step 覆写(stewart 已有先例)。若未来要在训练循环内跑高频 WBC,参照 RAMBO 的批量 QP 方案。
调研参考
- Isaac Lab
ActionTerm / DifferentialInverseKinematicsAction(process/apply 双阶段、controller 类与 env 解耦、action_dim 由 controller 决定);PINK action 为非批量求解器逐 env 串行的反面参考
- MJPC
Planner(SetState/OptimizePolicy/ActionFromPolicy ≈ observe/learn/act):controller-as-agent 最纯接口形状
- Drake Systems:plant/controller 对等节点 + port 契约 + Context 状态 + 自报节拍
- ros2_control:声明式 state/command interface + claim + 级联
- OCS2(MPC 异步 + MRT 双 buffer)、RAMBO(batch QP 同频)、DTC(部署蒸馏)——频率差三种既有解法
- TSID/Crocoddyl:controller =
(model, measured state) → command 纯函数契约
背景
当前 env 主要面向 RL(action 语义 = NN policy 输出)。目标:让规控 controller(IK / OSC / MPC 等模型控制方法)也能与 env 结合,使 policy 成为一种特殊的 controller,同一任务的 reward / termination / 评估口径对两类方法保持一致,并支撑 RL + 规控的分层组合与 sim-to-real 同构。
核心设计:两个抽象
两个抽象不在同一层,通过 action space 这一个契约点咬合:
1. 决策体协议(env 外部,目前缺失)
reset(env_ids)/act(obs) -> actions,每 ctrl_dt 一次step(actions)的 actions 语义恒定 = "外部决策在 ctrl_dt 发出的指令"2. Controller = ActionTerm(env 内部,已有雏形)
现有
ActionTerm(motrix_env_core numba/manager/actions.py:20)即 controller 抽象雏形,WbtJointPositionAction是其平凡形式(常数仿射翻译)。需强化:action_space()即 action 语义定义者(关节空间 vs 任务空间)process_actions(每 env step)与apply_actions(每物理 step)双阶段,闭环校正跑在物理频率配套工作
apply()钩子(ManagerEnv physics_step 内回调)频率差边界
ctrl_dt 层走 obs/action 契约;高于 ctrl_dt 的控制器(子步级 WBC、200Hz 阻抗)不在本契约内,走 DirectEnv
physics_step覆写(stewart 已有先例)。若未来要在训练循环内跑高频 WBC,参照 RAMBO 的批量 QP 方案。调研参考
ActionTerm/DifferentialInverseKinematicsAction(process/apply 双阶段、controller 类与 env 解耦、action_dim 由 controller 决定);PINK action 为非批量求解器逐 env 串行的反面参考Planner(SetState/OptimizePolicy/ActionFromPolicy≈observe/learn/act):controller-as-agent 最纯接口形状(model, measured state) → command纯函数契约