跳转到内容

策略动作与关节控制

策略输出的动作向量需要通过约定的控制接口影响机器人。本篇采用十二关节、目标位置偏移加 PD 控制的例子,沿“网络输出 → 关节目标 → 力矩 → 物理推进”解释每一步。

动作形式后续处理需要记录的内容
关节位置偏移叠加默认姿态,再执行位置控制参考姿态、缩放、增益
关节速度目标根据速度误差等计算执行量单位、控制律、限幅
力矩目标缩放后进入力矩执行接口力矩单位、执行器约束

这几种形式不能通过更换变量名互换。网络输出 12 个数,只能说明维度,不能说明动作是什么。本文后续全部采用第一种形式。

aˉ=clip(a,amax,amax),qd=qdefault+saaˉ\bar a=\operatorname{clip}(a,-a_{\max},a_{\max}),\qquad q_d=q_{\text{default}}+s_a\bar a

aa 为原始动作,aˉ\bar a 为裁剪后动作,sas_a 将无量纲动作映射成角度偏移,可以按关节分别设置。

例如某关节默认角为 0.8 rad,sa=0.25s_a=0.25 rad,amax=1a_{\max}=1,原始输出为 1.4,则裁剪后为 1,目标角为 1.05 rad。这些数值用于手算,不是推荐的机器人参数。

动作相对固定默认角计算时,同一个动作持续输出不会使目标角无限累加。如果相对上一时刻目标累计,则属于另一种动作定义。

动作裁剪不等于目标角已经符合机械限位。还要检查默认角、缩放范围和关节限位的组合,并按任务设计处理越界目标。

一般形式可以写为:

τraw=Kp(qdq)+Kd(q˙dq˙)+τff\tau_{\text{raw}}=K_p(q_d-q)+K_d(\dot q_d-\dot q)+\tau_{ff}

本文取目标速度 q˙d=0\dot q_d=0、前馈力矩 τff=0\tau_{ff}=0,得到:

τ=clip(Kp(qdq)Kdq˙,τmax,τmax)\tau=\operatorname{clip}\left(K_p(q_d-q)-K_d\dot q,-\tau_{\max},\tau_{\max}\right)

增益和限幅通常逐关节定义。例如 qd=1.05q_d=1.05 rad、q=1.0q=1.0 rad、q˙=0.2\dot q=0.2 rad/s,取 Kp=20K_p=20Kd=0.5K_d=0.5,则限幅前力矩为 20×0.050.5×0.2=0.920\times0.05-0.5\times0.2=0.9 N·m。

这里目标速度为零,不代表目标角不能随策略变化;只是该控制律没有额外提供目标角轨迹的速度前馈。不要未经说明就用相邻目标角差分替换它。

KpK_p 增大使位置误差产生更大的恢复力矩,KdK_d 提供速度相关的阻尼。效果还受惯量、延迟、接触和力矩上限影响,不能脱离模型给出通用增益。

当一个策略步对应四个物理步时,可以保持 qdq_d,在每个物理步读取新的 q,q˙q,\dot q 并重新计算力矩:

# 示意伪代码:每次策略调用执行一次外层逻辑。
processed_action = clip(action, -action_limit, action_limit)
target = default_position + action_scale * processed_action
for _ 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,这段计算就可能位于执行器内部。阅读代码要找到真正施加控制的位置,避免额外叠加一套控制器。

项目常见问题验证方式
关节映射输出顺序与模型顺序不同逐关节施加小目标变化
单位与符号度与弧度混用,方向相反手算一个关节并对照日志
默认姿态使用了其他机器人或不同零位比较零动作对应的目标角
限幅网络、目标角、力矩的限制被混为一谈分别记录裁剪前后数值
时间策略更新频率或执行周期不一致核对仿真时间和调用计数
动作历史保存的是原始输出还是处理后动作与观测说明逐项对应

完成上面的单关节手算,再把当前角度改成目标角、速度保持 0.2 rad/s,验证力矩为什么仍为负值。随后在仿真中比较目标角、实际角和限幅前后力矩,确认计算链路一致。

零动作为什么仍有力矩? 它对应默认目标姿态,只要存在位置误差或关节速度,PD 就可能产生力矩。

动作抖动一定要加大奖励惩罚吗? 先检查关节映射、观测噪声、控制周期、增益及饱和,再判断奖励是否需要调整。

换仿真器能直接沿用参数吗? 参数可以作为起点,但应重新验证关节、驱动和控制效果,不能仅凭相同数值认定等价。

下一篇:运动指令与任务目标