DEEP 31 · 第三辑 · 训练代码 · LEARN NOTES

收进学习手册 · 2026-09-11 · duck.whatled.com

解读 31 · symmetry.py 与 backlash.py:对称与齿隙

解读对象:tasks/symmetry.py(169 行)、tasks/backlash.py(92 行)
需要的前置:解读 23(61 维观测拼装)、解读 25、总纲

在做什么

两个小文件,各管一件「模型改造」:symmetry.py 给 PPO 加左右镜像对称(mirror symmetry,即假设「机器人镜像后的观测应对应镜像后的动作」)损失;backlash.py 把任意环境配置一键换成带齿隙(backlash,齿轮副之间的空程)的机器人模型。前者作用于训练算法,后者作用于仿真模型——但都遵守同一纪律:观测/动作的维度和布局一字不改,这样运行时和导出链路完全不用动。

真实符号:symmetry.py

61 维 actor 观测的布局在文件头逐段写明(symmetry.py:9-17):[0:3] 角速度、[3:6] 重力投影、[6:20] 关节位置、[20:34] 关节速度、[34:48] 上一动作、[48:51] twist 命令、[51:55] 头命令、[55:61] 身体命令。镜像就是两张表:置换表 _JOINT_PERM = [9,10,11,12,13,5,6,7,8,0,1,2,3,4](:68,左腿 0-4 与右腿 9-13 互换,中线关节 5-8 原地不动)和符号表 _JOINT_SIGN(:71,置换后全取负,唯独 neck_pitch/head_pitch 保持 +1——矢状面关节在左右反射下不变号)。整个观测的 _OBS_PERM/_OBS_SIGN(:74-95)再把非关节段补上:角速度取负 roll/yaw,重力取负 gy,twist 取负 vy 和 ωz,头命令取负 yaw/roll,身体命令取负 y/roll/yaw。

接口侧只有一个 dataclass:PpoWithSymmetryCfg(:49)给标准 PPO 配置加一个 symmetry_cfg 字段;实际参数是模块级字典 SYMMETRY_CFG(:56):use_mirror_loss=True、mirror_loss_coeff = 0.5、use_data_augmentation=False。核心函数 microduck_vel_symmetry(:118)把 [原始; 镜像] 沿 batch 维拼接返回。一个诚实的妥协:critic 观测只做原样复制不镜像(:149-153)——镜像损失只需要 actor 侧成立,critic 反正用特权信息,注释称之为无害近似。

真实符号:backlash.py

make_backlash_variant(cfg, robot_cfg=MICRODUCK_BACKLASH_ROBOT_CFG)(backlash.py:42)做三件事。第一,换机器人:每个伺服关节串联一个不驱动的 passive_<joint>_backlash 铰链,±1° 空程,执行器是 BacklashEncoderBamActuator——它的固件 PD 环闭在穿过齿隙读到的编码器上,和真伺服(编码器装在齿轮空程的输出侧)同构(:6-14)。第二,换观测:joint_pos/joint_vel 两项的函数换成 joint_pos_rel_backlash/joint_vel_rel_backlash,策略看到的是 qpos[伺服] + qpos[齿隙] 的编码器视角,维度仍 14(:49-64)。第三,收拾两个会被齿隙关节误伤的旧项:dof_pos_limits 软限位惩罚只留伺服关节(齿隙关节一辈子顶着 ±1° 硬限位是它的本职,:68-72);pose 奖励的选择正则前面拼一段 ^(?!passive_.*_backlash),否则 .*hip_yaw.* 会同时匹配到齿隙关节并报错(:81-90)。

设计取舍

对称性的取舍在任务侧:所有 v1.5 环境默认 ENABLE_SYMMETRY = False,因为旧配置是为 51 维观测硬编码的,直到 2026-08-13 迁移到 61 维、并把输出键从 "policy" 改成 "actor"(:3-7)之后才可用;roulade 是第一个吃螃蟹的(29 篇),spin 则永远不能用——镜像会把左转变右转。文件里还留着一处陈年注释:# [B, 51](:144),实际已是 61 维,读代码时以表长为准。backlash 的设计哲学是「借道前缀」:所有环境已有的 ^(?!passive_).* 正则天然排除齿隙关节,执行器、姿态奖励、关节观测选择都不用改(:23-26)——用命名约定换改造成本。

你带走的收获

延伸

什么鸭 WHATDUCK · 复刻学习笔记 ← 全部手册 · 首页