项目>Microduck>Microduck 编程:Python 与 JavaScript 自定义动作

Microduck 编程:Python 与 JavaScript 自定义动作

摘要:给出组合现成命令、Python 侧自定义动作、JavaScript 遥控面板三条可照做路径,并说明官方 SDK 语言清单尚未定稿、daemon 契约才是稳定入口,以及哪些文件不该改。

先说清「SDK」这个词

很多人搜「Microduck SDK Python JavaScript」,想找的是一份官方的、带稳定函数签名的开发包。按官方当前公开资料,SDK 的语言清单还在最终确定阶段,没有可照抄的官方多语言 SDK 承诺。真正稳定、可核验的入口是另一层:运行时由 robotd、configd、updaterd、btd、padd、mediad、tofd 等 Rust 守护进程组成,彼此走 Unix socket 上的一份 JSON-RPC 契约;玩家接触得到的是 robotctl 与 duckctl 这两个命令行工具族。

「自定义行为」实际有三条路,难度和可靠性各不相同。下面按从稳到活的顺序讲,代码示例来自社区复刻教程而不是官方 SDK;动手前先确认自己用的是哪套仓库,别把 A 仓库的目录结构套到 B 仓库上。

路径一:不写代码,组合现成命令

最稳的一条路,改的是「调用什么」,不动「程序怎么跑」。官方产品页与仓库 README 里出现的命令族大致是 robotctl configure、update、monitor、policy add、policy load、robot do;蓝牙直连可用 duckctl,不需要网络与 ssh。社区复刻路线还给出 make sync、make run、make stop、make imu、make voltage 一类包装命令,以及键盘与手柄的按键映射。

  1. 先用 robotctl monitor 或 make imu 读一帧实时状态,确认 15 颗舵机与 IMU 在线。预期结果:数值在连续变化,没有卡住不动的样本块。
  2. 列出现有策略与动作名,选一个现成动作触发,例如站起、坐下或触发一次已安装的 episodic 策略。预期结果:动作执行完能回到稳定姿态。
  3. 把几个动作按需要的顺序写成一份脚本或快捷方式,每次只加一个动作。预期结果:每一步都能单独复现,出了问题能定位到具体哪条命令。
  4. 需要换步态时用 policy load 指向自己的 ONNX,并把旧文件留一份在目录外。预期结果:新旧策略可来回切换对比。

路径二:Python 侧写一个规则动作

简化教学路线把动作抽象成 Move:在 src/moves/ 下新建一个 Python 文件,继承 Move 基类,实现 step 方法,从观测里读当前关节角度,用三角函数生成周期性摆动写入目标角度,再注册进 Scheduler 并给手柄键位绑定触发。这条路不用碰强化学习公式,改的是规则动作,不是策略网络。

# src/moves/my_dance.py(示意,按自己仓库的 Move 基类签名调整)
import math
from moves.base import Move

class MyDance(Move):
    def step(self, obs, command):
        t = obs.time
        joints = obs.robot_state.joint_positions
        for i in range(len(command.target_angles)):
            command.target_angles[i] = joints[i] + 0.1 * math.sin(t)
        return command
  1. 先确认仓库里确实有 moves 目录与 Move 基类,并读一份现成动作当模板。预期结果:能找到 step 方法与 target_angles 字段。
  2. 新文件里只做一个关节的小幅摆动,幅度从 0.1 弧度起步。预期结果:卸力预览时这个关节按预期缓慢摆动,其他关节不动。
  3. 把新动作注册进调度列表并绑定一个手柄按键。预期结果:按键能触发,且 make run 无导入错误。
  4. 再逐步扩大到多关节,每加一个就重跑一次预览。预期结果:动作可重复,没有撞限位。别一上来就写整段舞蹈。

目录也要讲纪律:agents 下的 walk.onnx、moves、systemd 服务定义、docs 可以改;main.py、scheduler.py、robot_controller.py、imu_reader.py 是骨架,改错了往往不报错,只看到「程序起来了但鸭子行为怪」,这种问题最难查。虚拟环境是按锁文件生成的,弄坏了删掉重跑 setup,比修它快。

路径三:JavaScript 前端做一层遥控面板

严格说这里跑在机器人侧的仍是一个最小 HTTP 服务,JavaScript 只负责按钮与请求。社区文章里值得借鉴的是安全结构,不是代码本身:服务对外只暴露一个动作白名单,把「stand」「sit」这类按钮名翻译成固定的 robotctl 命令;每个请求先校验一次性 token,不对就拒绝,绝不放行任意命令;画面帧从机器人已有的媒体服务拉,不自己写采集逻辑。

要做的 预期结果 没做到会怎样
动作白名单 前端只能触发列表里的几个固定动作 等于把机器人命令行暴露到公网
启动时生成 token 并只发给可信的人 无 token 的请求全部被拒 任何扫描到端口的人都能让它动起来
命令调用加超时与返回码判断 失败时前端能看到明确报错 按钮点了没反应,无法区分超时与执行失败
先在内网跑通再考虑外网映射 内网四步都能复现 把网络问题、鉴权问题、控制问题叠在一起查

这条路的边界要讲清:它不是官方 JavaScript SDK,也不是官方推荐的远程控制方案;把机器人端口映射到公网前,鉴权、内网暴露和物理安全这三件事先想清楚。

三条路径怎么挑

路径 改动位置 适合 风险
命令组合 不改进仓库 只想编排现成动作、换现成策略 最低,出问题换回去即可
Python 规则动作 moves 与按键映射 想让鸭子做自定义周期动作 中,需跟对仓库版本,别碰骨架文件
HTTP 面板 常开机器上的独立服务 想给家人或手机一个按钮 较高,涉及鉴权与网络暴露

边界与下一步

本页的 daemon 与命令族来自官方仓库,Move 抽象、make 命令族、按键映射与面板骨架来自社区复刻教程与调试专栏,许可证各不相同(有 MIT,也有个人非商业许可),再分发前要逐仓确认;本站没做真机实测,也不把社区实现说成官方 SDK。想从训练侧产出自己的 ONNX 策略,看《Microduck 强化学习训练与真机部署》;想找现成策略与社区资源,看《Microduck 玩法扩展与社区资源》;动作写完行为异常,按《Microduck 常见问题与故障排查》分层反查。

资料来源

  • GitHub pollen-robotics/microduck
  • 硅基部落《玩转Microduck 机器鸭》
  • Microduck 深度解析专栏调试与排障篇
  • AI-FanGe 复刻教程
  • DAMO 开发者矩阵远程面板文章

相关内容

机器鸭概念股又被炒起来了:AI硬件是不是又在割韭菜?问答机器人靠强化学习「自己学走路」了,工程师以后还要一行行写动作代码吗?问答机器鸭Microduck火了:买成品、自己攒、还是云养,你选哪个?问答fanhao375机器鸭调试——从烧录到首次行走实践fanhao375复刻多少钱——飞特HD-1910完整账单实践fanhao375范浩鸭子复刻教程——从图纸到整机实践