第 04 课 · 61 → 14:一只鸭子的神经回路
这一课解决什么问题:读懂你第 03 课跑起来的那个"大脑"——它每 20 毫秒吃什么(61 个数)、吐什么(14 个数)、这套契约为什么一个都不能乱动。这是全课程最重要的数字。
前置:第 03 课。手头有一个已经能跑的本地环境,边读边对照。
1. 每 20 毫秒,一次"读 → 算 → 发"
整只鸭子就是一个跑在 50 Hz 上的循环,每 20 毫秒重复三步:读全部关节状态和身体姿态 → 喂给神经网络 → 把 14 个输出下发给舵机。
每 20 ms 重复一次(50 Hz)
传感器 策略网络(ONNX) 执行
┌───────────┐ 61 个数 ┌───────────────┐ 14 个数 ┌──────────┐
│ IMU(200号)│ ────────▶ │ 神经网络 │ ────────▶ │ 14 个关节 │
│ 14 关节 │ │ 61 → 14 │ │ 转到目标 │
└───────────┘ └───────────────┘ └──────────┘
▲ ▲
└──── 传感数据回流 ─────────┘└── 命令:往哪走、多快、头什么姿态(你给)
类比:你走路时没人逐条指挥每块肌肉——身体自动决定下一步怎么迈。你(按方向键的人)只发目标,策略管过程。
2. 61 个数:策略能看到的一切
全部 alpha 策略共用同一张观测表(记不住没关系,先知道"分七段"):
| 索引 | 宽度 | 内容 |
|---|---|---|
| 0–2 | 3 | 躯干角速度(转多快) |
| 3–5 | 3 | 投影重力(歪没歪) |
| 6–19 | 14 | 相对 HOME 的关节角(嘴除外) |
| 20–33 | 14 | 关节速度 |
| 34–47 | 14 | 上一次策略输出的动作 |
| 48–50 | 3 | 速度指令 vx, vy, yaw_rate |
| 51–54 | 4 | 头颈命令 neck_pitch, head_pitch, head_yaw, head_roll |
| 55–60 | 6 | 身体位姿命令槽 x, y, z, roll, pitch, yaw |
加一下:3+3+14+14+14+3+4+6 = 61,正好。前 48 个数是"身体的自我感觉"(姿态、关节、上次动作),后 13 个是"你下的命令"。另:训练时网络背后还有个 76 维的 critic("教练视角"),真机只跑 61 维的 actor。
3. 14 个数:每个关节往哪转
输出不是"转多少度"的绝对值,而是相对 HOME 姿态的关节位置偏移,顺序固定:
0..4 左腿:hip_yaw, hip_roll, hip_pitch, knee, ankle
5..8 颈头:neck_pitch, head_pitch, head_yaw, head_roll
9..13 右腿:hip_yaw, hip_roll, hip_pitch, knee, ankle
顺序是左腿 → 头颈 → 右腿,不对称。真机有 15 只舵机,第 10 个物理槽位是嘴巴——策略不输出它,运行时负责把 14 个数映射回 15 个槽位(duck-control/src/obs.rs 用同一张表完成读取和回填)。
4. 为什么这套契约不能随便动
三个理由,一个比一个硬:
- **训练和部署是两拨代码,靠这张表对齐。**训练仓按这个顺序生成观测,真机按同一顺序读取回填——悄悄改了顺序,ONNX 照样"能跑",但鸭子立刻倒下(位置 6 的数被当成位置 0 的意思)。
- **新策略要与旧运行时热切换。**官方约定:新技能用不到的命令槽要保留并填零,不许删——删了,新 ONNX 就装不进现有运行时。
- 出问题时没法归因。
docs/microduck-30day/source-map.md的推荐阅读顺序就是沿这条链排的:任务注册 → 环境配置 → 观测/奖励 → 真机的obs.rs。契约稳定,你才能顺链找问题。
所以呢:想改行为,先改奖励和参数,永远别先动 61/14 的布局——这是阶段 D 的纪律。
动手练习(15 分钟)
对照 microduck-replica/docs/训练参数调整与新动作开发指南.md 第 4 节核查本文表格,合上资料手画一遍数据流图。再答一题:动作 0–4 是左腿、9–13 是右腿,头颈夹中间——这是推导出来的吗?(不是,是全链路共用的约定。)
自查清单
- [ ] 我能不看资料画出 50 Hz"读 → 算 → 发"的数据流图
- [ ] 我能说出 61 维观测大致分几段、各自是什么
- [ ] 我知道 14 维动作的顺序是左腿 → 头颈 → 右腿,且是相对 HOME 的偏移
- [ ] 我能解释为什么观测布局不能随便改(至少说出两个理由)
全部打勾,进入第 05 课:第一次训练。
下一课预告
第 05 课真正开训:训练 → 回放 → 导出 → 验证四步全流程,加上 Mac 无 GPU 机器的两个必踩坑(都是构建日志里的真实事故)。
延伸资源
- 训练参数调整指南第 3–4 节(术语表与 61/14 契约的原始出处):
microduck-replica/docs/训练参数调整与新动作开发指南.md - 源码地图(沿契约读代码的顺序表):
docs/microduck-30day/source-map.md - 真机侧实现(61 维如何构造):
duck-control/src/obs.rs