策略动作与关节控制
策略输出的动作向量需要通过约定的控制接口影响机器人。本篇采用十二关节、目标位置偏移加 PD 控制的例子,沿“网络输出 → 关节目标 → 力矩 → 物理推进”解释每一步。
1. 动作空间的定义与物理含义
Section titled “1. 动作空间的定义与物理含义”| 动作形式 | 后续处理 | 需要记录的内容 |
|---|---|---|
| 关节位置偏移 | 叠加默认姿态,再执行位置控制 | 参考姿态、缩放、增益 |
| 关节速度目标 | 根据速度误差等计算执行量 | 单位、控制律、限幅 |
| 力矩目标 | 缩放后进入力矩执行接口 | 力矩单位、执行器约束 |
这几种形式不能通过更换变量名互换。网络输出 12 个数,只能说明维度,不能说明动作是什么。本文后续全部采用第一种形式。
2. 动作到目标关节位置的映射
Section titled “2. 动作到目标关节位置的映射”为原始动作, 为裁剪后动作, 将无量纲动作映射成角度偏移,可以按关节分别设置。
例如某关节默认角为 0.8 rad, rad,,原始输出为 1.4,则裁剪后为 1,目标角为 1.05 rad。这些数值用于手算,不是推荐的机器人参数。
动作相对固定默认角计算时,同一个动作持续输出不会使目标角无限累加。如果相对上一时刻目标累计,则属于另一种动作定义。
动作裁剪不等于目标角已经符合机械限位。还要检查默认角、缩放范围和关节限位的组合,并按任务设计处理越界目标。
3. PD 控制与力矩限幅
Section titled “3. PD 控制与力矩限幅”一般形式可以写为:
本文取目标速度 、前馈力矩 ,得到:
增益和限幅通常逐关节定义。例如 rad、 rad、 rad/s,取 、,则限幅前力矩为 N·m。
这里目标速度为零,不代表目标角不能随策略变化;只是该控制律没有额外提供目标角轨迹的速度前馈。不要未经说明就用相邻目标角差分替换它。
增大使位置误差产生更大的恢复力矩, 提供速度相关的阻尼。效果还受惯量、延迟、接触和力矩上限影响,不能脱离模型给出通用增益。
4. 动作保持与控制频率
Section titled “4. 动作保持与控制频率”当一个策略步对应四个物理步时,可以保持 ,在每个物理步读取新的 并重新计算力矩:
# 示意伪代码:每次策略调用执行一次外层逻辑。processed_action = clip(action, -action_limit, action_limit)target = default_position + action_scale * processed_actionfor _ in range(physics_steps_per_action): q, qd = read_joint_state() torque = kp * (target - q) - kd * qd apply_torque(clip(torque, -torque_limit, torque_limit)) advance_physics()若框架或模型内置执行器已经完成 PD,这段计算就可能位于执行器内部。阅读代码要找到真正施加控制的位置,避免额外叠加一套控制器。
5. 动作接口的一致性验证
Section titled “5. 动作接口的一致性验证”| 项目 | 常见问题 | 验证方式 |
|---|---|---|
| 关节映射 | 输出顺序与模型顺序不同 | 逐关节施加小目标变化 |
| 单位与符号 | 度与弧度混用,方向相反 | 手算一个关节并对照日志 |
| 默认姿态 | 使用了其他机器人或不同零位 | 比较零动作对应的目标角 |
| 限幅 | 网络、目标角、力矩的限制被混为一谈 | 分别记录裁剪前后数值 |
| 时间 | 策略更新频率或执行周期不一致 | 核对仿真时间和调用计数 |
| 动作历史 | 保存的是原始输出还是处理后动作 | 与观测说明逐项对应 |
完成上面的单关节手算,再把当前角度改成目标角、速度保持 0.2 rad/s,验证力矩为什么仍为负值。随后在仿真中比较目标角、实际角和限幅前后力矩,确认计算链路一致。
零动作为什么仍有力矩? 它对应默认目标姿态,只要存在位置误差或关节速度,PD 就可能产生力矩。
动作抖动一定要加大奖励惩罚吗? 先检查关节映射、观测噪声、控制周期、增益及饱和,再判断奖励是否需要调整。
换仿真器能直接沿用参数吗? 参数可以作为起点,但应重新验证关节、驱动和控制效果,不能仅凭相同数值认定等价。
下一篇:运动指令与任务目标。