在四足机器人强化学习领域,如何将高层命令转化为四条腿的协调运动一直是个核心挑战。Walk These Ways代码库采用了一套优雅的步态参数化机制,通过相位控制和节律生成来实现这一目标。这套系统不是让神经网络直接输出每条腿的抬落指令,而是通过精心设计的数学变换,将连续参数转化为可学习的结构化步态。
环境维护着一个统一的"全局节拍器"g,它表示整个机器人当前步态周期推进到的位置。这个全局时钟按照以下公式更新:
gt+1 = (gt + f·Δt) mod 1
其中f是步频,Δt是环境步长时间。mod 1运算确保g始终在[0,1)范围内循环。
四条腿的相位ϕ不是直接等于g,而是在g基础上叠加了特定的相位偏移量p、o、b。在默认配置下(pacing_offset=False),各腿相位计算公式为:
ϕFL = (g + p + o + b) mod 1
ϕFR = (g + o) mod 1
ϕRL = (g + b) mod 1
ϕRR = (g + p) mod 1
这种设计的关键在于:
注意:当pacing_offset=True时,FR和RL的相位公式会交换,这会改变步态特性
直接将相位ϕ输入神经网络会有两个问题:
因此环境将相位转换为多组正弦信号:
clock_i = sin(2πϕi)
doubletime_i = sin(4πϕi)
halftime_i = sin(πϕi)
默认情况下,只有clock_inputs(即sin(2πϕ))会被送入观测空间。这种设计:
如果让p、o、b在[0,1)内完全自由变化,会产生大量难以学习的不稳定步态。因此环境会对这些参数进行投影约束,将其推向更稳定的结构附近。
主要采用两种投影方式:
数学上,第二种投影会将x'限制在[0,0.25)∪[0.75,1)范围内,这正好是靠近0相位(即同相)的区域。
当gaitwise_curricula=True时,环境会将步态分为四类并应用特定投影:
所有参数都使用同相投影:
p' = (p/2 - 0.25) mod 1
o' = (o/2 - 0.25) mod 1
b' = (b/2 - 0.25) mod 1
结果四条腿相位近似相等,表现为同步起落。
仅保留p参数并使用反相投影:
p' = p/2 + 0.25
o' = 0
b' = 0
当p'≈0.5时,形成对角腿两两同步的经典trot步态。
仅保留o参数并使用反相投影:
p' = 0
o' = o/2 + 0.25
b' = 0
在默认公式下表现为前后腿组交替运动。
仅保留b参数并使用反相投影:
p' = 0
o' = 0
b' = b/2 + 0.25
表现为左右腿组交替运动。
接触状态不是简单地用sin(2πϕ)>0来判断,而是经过更精细的处理:
根据duration参数d将原始相位ϕ重映射为ϕ':
使用正态分布CDF将ϕ'转换为平滑的接触概率:
desired_contact = Φ((0.5 - |ϕ' - 0.5|)/σ)
这种设计实现了:
环境通过多个奖励项来引导策略遵循期望步态:
tracking_contacts_shaped_force:
tracking_contacts_shaped_vel:
feet_clearance_cmd_linear:
这些奖励项共同构成了"软塑形"策略,既引导机器人遵循期望步态,又保留了适当的灵活性。
为了帮助策略更高效地学习,环境实现了多种课程学习机制:
步态分类课程(gaitwise_curricula):
独占相位偏移(exclusive_phase_offset):
平衡步态分布(balance_gait_distribution):
二进制相位量化(binary_phases):
x = round(2x)/2 mod 1
将相位差强制量化为同相或反相
速度命令死区(deadband):
if √(vx² + vy²) ≤ 0.2 then (vx,vy) = 0
避免微小速度命令导致的抖动
接触状态平滑窗口:
使用σ=0.25的正态分布CDF
在相位边界处提供平滑过渡
在实际代码实现中,相位计算需要注意:
使用模运算保持相位在[0,1)范围内:
python复制phase = (phase + freq * dt) % 1.0
相位偏移应用顺序影响步态对称性:
python复制# 默认实现
phi_FL = (g + p + o + b) % 1.0
phi_FR = (g + o) % 1.0
phi_RL = (g + b) % 1.0
phi_RR = (g + p) % 1.0
正弦时钟生成避免数值不稳定:
python复制clock = np.sin(2 * np.pi * phase)
duration重映射参数需要谨慎调整:
stance期比例d:
平滑窗口宽度σ:
奖励系数平衡:
步态不对称:
接触状态抖动:
奖励收敛不良:
步频不稳定:
这套步态参数化机制通过精心设计的数学变换,将高层命令转化为可学习的节律信号,既提供了足够的灵活性,又保持了结构的稳定性。在实际应用中,理解这些设计原理对于调试和优化机器人运动性能至关重要。