Skip to content

feat: env 支持规控 controller 接入(决策体 + ActionTerm controller 双抽象) #26

Description

@wlgys8

背景

当前 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)双阶段,闭环校正跑在物理频率

配套工作

  • ObsSpace 增加 controller / privileged obs group(无噪、含全量运动学;policy/value 照旧带噪)
  • ActionTerm 增加可选 per-substep apply() 钩子(ManagerEnv physics_step 内回调)
  • 确认 motrixsim 批量 Jacobian / FK read query 能力(IK term 的硬前置)
  • 第一个 controller term 实现(候选:阻尼最小二乘 IK,纯 numpy,批量)
  • play / view / bench 脚本接受任意决策体
  • action 语义文档化:每个 env 声明 action 含义;标注 reward 中假设 NN 输出特性的项(如 action rate)为 RL 专用

频率差边界

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 PlannerSetState/OptimizePolicy/ActionFromPolicyobserve/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 纯函数契约

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

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