解读 30 · ball_kick 与 ground_pick:带物体的任务
解读对象:
tasks/microduck_ball_kick_env_cfg.py(661 行)、tasks/microduck_ground_pick_env_cfg.py(706 行)
需要的前置:解读 24、解读 29(相位命令)、总纲
在做什么
接触丰富(contact-rich,即奖励依赖与外部物体的接触动力学)的任务各选了一条路线。ball_kick:机器人站立开局,70 mm / 15 g 的球摆在踢球脚尖前,目标是把球向前踢到目标速度再站稳。ground_pick:下蹲把嘴尖凑到离地尽可能近但不接触,再起身;命令槽同样是 [cos 2πφ, sin 2πφ, 0] 相位编码,但时间表是分段的——GP_PERIOD = 4.0 秒里 DESCENT_END = 0.375(下降 1.5 s)、HOLD_END = 0.425(贴地 0.2 s)、RISE_END = 0.80(起身 1.5 s)、其余站立(microduck_ground_pick_env_cfg.py:108-111),四段时长互相独立,不像正弦加权那样把降/贴/升耦在一起。
真实符号:ball_kick 的球怎么进 reward
踢球目标不是「越快越好」而是定点速度 BALL_TARGET_SPEED = 1.0 m/s(:95)。双侧地形:ball_forward_velocity 权重 12.0,对球的向前速度线性支付、在目标处封顶(:238)——线性而不是 tanh 饱和,因为「尽量踢」需要高速段仍有梯度;再叠 ball_speed_overshoot(权重 -4.0,:243)罚超速——注释算得很清楚:光有封顶驯不服踢,踢得更狠能让球在封顶速度上滚更久,逐步×时长的总奖励还是随打击力度涨(:224-237)。斜率刻意不对称(+12 低于目标、-4 高于目标):最优点在目标处,但「踢过头」远比「不敢踢」便宜。
两个不对称设计撑起单脚踢:KICK_FOOT = "right"(:41)把球出生点和支撑脚传感器都翻到一侧,左右脚是两个独立训练;support_foot_grounded(权重 +2.0,:253)让不踢的那只脚每步触地白拿 1 分——抬支撑脚(跳)和任何步态滥用都在每步付钱。最妙的是actor 对球全盲:真机没有球传感器,61 维 actor 观测里没有球;只有 critic 多看 ball_position/ball_velocity 两项(:391-396),这就是非对称 actor-critic(评论家偷看特权信息,演员只靠部署时可得的信息)。对摆放误差的鲁棒性不走观测,走 DR:每轴 ±0.015 m 的出生噪声(BALL_POS_NOISE_XY,:88)。
真实符号:ground_pick 的「接近而不接触」
平衡由一对项的对抗决定:mouth_ground_proximity(权重 3.0,target_height = 0,std 0.10,盯 mouth_tip site,:187)把嘴往地上拉;head_impact_penalty(权重 -2.0,接触力阈值 1.0,:364)罚任何头颈触地——均衡点就是「贴着地皮悬停」。「仪式感」由 mouth_perpendicular_to_ground(对齐度 ∈ [-1,1],权重 2.0,:205)保证嘴轴朝下。彩蛋是 mouth_payload_force:一个权重为 0 的「假奖励」,实际是每步钩子,把 reset 时抽签的 10–40 g 配重(sample_mouth_payload,:491)作为外力压在嘴尖上、只在起身段生效(:284)——想象「叼起了东西」。这个环境还有两处反常:正则比 velocity 更重(action_rate_l2 ramp 到 -2.0,:622;缓慢精确的动作想要强平滑),IMU 观测延迟却放宽到 max_lag 3(:393)。
设计取舍
球的事件顺序是硬约束:reset_ball 必须排在 set_ground_state 之后(events 按字典插入序执行,球位置由机器人最终姿态导出,:451-454)。回放脚本 infer_policy.py 的 _place_ball 按同一 yaw 系偏移(BALL_OFFSET_X = 0.09、BALL_OFFSET_ABS_Y = 0.042)瞬移球,两边常量必须手工同步。一个待验证的源内不一致:reward 注释写目标「0.25 m/s — a gentle tap」(:225),而常量是 1.0——疑似旧值残留,以常量为准。
你带走的收获
- 「踢到目标速度」用线性+封顶+超速罚三件套,单一饱和函数必然驯不出受控力度。
- 真机感知不到的物体走非对称 actor-critic:critic 偷看,actor 保持部署可观测。
- 反向塑形(强罚接触)能把「最大化接近」约束成「悬停」——两个 reward 的对抗就是约束。
- weight=0 的 reward 项可以是合法的事件钩子,不必发明新 manager。