LESSON 21 · 阶段 E · 集成部署 · LEARN NOTES

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

第 21 课 · 遥控与手柄:让鸭子听你的

这一课解决什么问题:鸭子能站能走了,给它接上遥控——用手柄(或键盘)发速度指令,让它朝你想去的方向走,并建立"先悬空、后落地"的调试顺序。

前置:第 01 课(建立过"你发目标、策略管过程"的直觉)、第 20 课(已安全上电)。


1. 摇杆给的不是角度,是速度

先回扣整门课最重要的直觉。你推手柄摇杆时,没有在控制任何一条腿:

   手柄摇杆            策略网络              关节
   速度指令    ──▶    (61 → 14)    ──▶   14 个角度 @ 50Hz

摇杆给的是三个数:vx(前后)、vy(左右)、vtheta(转向角速度)——和你在浏览器 Sandbox 里按方向键时给的是同一种东西。

本课的映射细节取自平价路线的官方使用文档(Microduck-build-tutorial/microduck/docs/gamepad.md 与 usage.md),概念在两条路线上是通的,具体按键以你所用运行时的官方文档为准。要点:每个输入源发出的是 [-1, 1] 的归一化指令,由调度器统一换算成物理限速,所以键盘、手柄、仿真行为完全一致。默认限速:前进 vx +0.7、后退 -0.5,侧移 vy ±0.3,原地转向 ±3.0、行进中转向 ±1.5。

所以呢?你永远不需要(也不应该)手写关节角度:想更快,改限速常量;想换走法,换策略文件。

2. 手柄怎么映射

用蓝牙 Xbox 兼容手柄,先在板子上配对:bluetoothctl 里 scan on → pair → trust(下次开机自动重连)→ connect。

带终端(SSH)运行时的默认映射(来自 gamepad.md):

输入 作用
左摇杆 上下 / 左右 vx(前后)/ vy(左右)
右摇杆 左右 vtheta(转向)
A 开/关 walk(行走策略)
B 停止调度器
View/Back 开关 IMU/陀螺仪显示

无头模式(不接任何电脑,演示神器):make gamepad-headless-enable 装一个开机自启的服务,之后按住 START 启动控制循环,A 开行走,B 停,同时按住左右扳机 2 秒安全关机(等 10–15 秒再断总电源)。

两个坑:

3. 没有手柄:键盘就行

make run 之后直接按(usage.md):

键 作用
v / h / s 开关 walk / head / squat 三个动作
方向键 vx(上下)、vtheta(左右)
x 速度清零
i IMU 显示
q 停止控制循环

注意这个设计:walk、head、squat 是三个独立开关的动作(moves),叠在中立姿态上运行;手柄的 A 键就是 walk 的开关。其中 walk 是策略,squat 是逆运动学算出来的——两种动作并存,正好复习第 01 课的"运行 ≠ 训练"。

4. 调试顺序:先悬空,后落地

和第 20 课的测试金字塔一脉相承:

  1. 悬空试指令响应:鸭子吊着或抱在手里,轻推摇杆,看每条腿摆动方向对不对。方向反了不用慌,改符号常量;手柄断连时速度会自动清零(力矩保持姿态),这是安全设计;
  2. 落地低速:软垫地面,给一点 vx,直行几秒、停止、再直行。别一上来就满杆;
  3. **一启动就倒?**按平价路线文档的排查顺序:左右腿舵机 ID 装反没、膝盖偏置和实际装配一致没、IMU 安装方向对没、walk.onnx 和当前硬件匹配没。

5. 动手练习(15 分钟)

  1. 画出你自己的手柄(或键盘)按键地图,贴在工位上;
  2. 悬空推杆,记录三行观察:推杆 → 哪条腿 → 什么方向;
  3. 落地以最低速直行 1 米再停止,视频存进实验记录。

自查清单

下一课预告

主线走完了。第 22 课看另一条路线:有人用树莓派 Zero 2 W 和 Python 也复刻了这只鸭子,还提供现成镜像——预算更省,先看到动。

延伸资源

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