Duck Together|教程:一键领取 MicroDuck 云端仿真镜像,网页遛鸭还能接 RDK X5

一键领取 MicroDuck 云端仿真镜像:网页遛鸭,还能接 RDK X5

2026-09-07 更新: 针对开机后 Web 应用 502、未接 X5 时 MANUAL 的 Kick L/R 无动作,新增独立修复镜像 microduck-cloud-sim-kickfix-20260907,已共享到 RoboGo 的 DuckTogether 群组。它保留乔龙原环境,补上服务启动托管、云端左右踢球和动作状态反馈;不是对原作者镜像的原地覆盖。下文按修复版说明,并明确区分云端与板端能力。

前几天我们分享了 MicroDuck 的「云仿真 + 板端运控 + BPU 视觉」闭环,很多朋友问:

环境能不能直接给出来?我不想从 MuJoCo、模型和 Web 服务开始一层层配。

现在可以了。乔龙已经把这套环境整理成 RoboGo 开发机镜像 microduck-cloud-sim:创建开发机、开放
8080 端口,就能在浏览器里直接“遛鸭”;有 RDK X5 的朋友,还可以继续接入板端运控和 BPU 视觉。

修复版领取: 登录 RoboGo,进入“我的资产 → 群组共享的”,找到 DuckTogether 共享的 microduck-cloud-sim-kickfix-20260907。本次仅群组共享,未公开上架社区;非群组成员需先获取群组访问权限。

乔龙原版(保留溯源): microduck-cloud-sim|RoboGo 资产市场

项目原帖: 全网刷屏的机器鸭,我们把它“养”上了云——还能用一块 RDK X5 遛它

镜像里有什么

  • MicroDuck 的 MuJoCo 云端物理仿真与官方 ONNX 强化学习策略
  • 第三人称画面、鸭子第一视角和实时遥测组成的网页驾驶舱
  • 无开发板即可运行的行走、站立、转向、速度指令调节;修复版新增云端左右踢球
  • 原有强化学习训练仓库、Python 虚拟环境及 ONNX 策略
  • RDK X5 运控与视觉接口;其他动作及视觉追球需要另行准备板端程序

这里纠正原文一个容易误解的地方:页面有按钮,不等于云端已经实现该动作。 原版无 X5 时只运行行走/站立策略,Kick 等动作仅转发给板端。修复版补上左右踢球;坐下/起立、翻滚、捡物、推倒等本轮没有补齐云端实现,无板时按钮禁用,键盘请求也会明确拒绝。

浏览器负责发指令和看画面;云端负责仿真与渲染。接入 X5 后,可以让板端运行鸭子的控制与视觉程序,
云端页面继续作为实时驾驶舱。

1. 用镜像创建开发机

从群组共享资产进入修复版镜像页面,按平台提示领取/使用,再创建开发机。确认所选名称为 microduck-cloud-sim-kickfix-20260907,不要误选旧版。

已有开发机不会随新镜像发布自动升级。若需要迁移,先备份自己训练的模型和修改,再从修复版创建新实例;不要直接删除旧开发机。

建议配置:

  • 1 张 NVIDIA GPU;推荐使用 dsp-24c192g-5090_32g-x1
  • 系统盘不少于 100 GB
  • 外网应用配置增加端口 8080,路径填写 /
  • 按页面提示填写开发机名称和 SSH 公钥

等开发机进入“运行中”后,点击卡片上的 “Web 应用”,即可获得公网访问地址。

2. 启动并检查仿真

修复版增加了开机服务托管、健康检查和异常重启。镜像工作目录仍为 /root/microduck_sim/。开机后先在终端检查:

cd /root/microduck_sim
python3 service.py status

再检查应用健康状态:

curl -fsS http://localhost:8080/healthz

看到返回内容中的 "ok": true,说明服务已正常启动。随后打开“Web 应用”地址即可进入驾驶舱。

首次体验不需要连接 X5。若服务未就绪或被手动停止,再执行 ./restart.sh,并查看日志:

cd /root/microduck_sim
./restart.sh
tail -n 80 service-logs/server.log

不要同时额外运行一份 python3 sim_server.py,否则会竞争端口。healthz 成功只证明应用后端可用,不能单独证明公网代理和浏览器连接正常。

3. 在网页里控制 MicroDuck

操作 功能
W / S 前进 / 后退
A / D 左转 / 右转
Q / E 修复版云端左脚 / 右脚踢球,无需 X5
R / V / G / P 原坐起/翻滚/捡物/推倒请求:需板端实现,无 X5 时禁用
空格 复位,并取消踢球、清零速度指令
速度滑块 调节目标速度,不保证实际速度与指令完全一致
Manual / Chase 手动控制 / 视觉追球;Chase 需接入视觉控制端

手机访问同一个页面时会显示双摇杆,可以直接触控操作。

左右踢球怎么体验

选择 Manual,先走近球,让球位于所选脚的前方,再按 Q/E 或点击 Kick L/R。
初始球在前方约0.9米处,原地直接按键只是空踢——模型不感知球的位置,也不会自动瞄准。

修复版复用镜像已有的 ball_kick_left.onnx / ball_kick_right.onnx,流程为“减速站稳 → 运行踢球模型0.5秒 → 站稳恢复 → 继续当前速度指令”。动作中如果输入停止,结束后不会恢复之前的速度。重复点击会被拒绝,且不会靠挪球或重置鸭子来制造踢球效果。

页面会反馈 accepted(已接受)、running(执行中)、recovering(恢复中)、completed(动作周期结束)或 rejected(拒绝)。completed 不代表一定碰到球;接板时 forwarded 也仅表示已转发,不是板端执行成功。

4. 接入 RDK X5

如果手里有 RDK X5,并且板端已经准备好 duck_sim_brain.py、duck_vision.py 和对应策略文件,
可以在 X5 的两个终端中分别启动控制与视觉程序:

以下保留原作者使用说明中的接入方式。本次在云镜像中未找到 duck_sim_brain.py,不能承诺领取云镜像就同时获得完整板端程序;请先按项目原帖准备板端文件与依赖。本轮只测了消息转发,没有完成实体 X5 联调。

cd /root/duck_brain

python3 duck_sim_brain.py wss://<RoboGo-Web-公网域名>/board

python3 duck_vision.py wss://<同一个公网域名>/vision

按原方案,控制端通过 /board 回传状态后,云端切换为状态回放与渲染;视觉程序通过 /vision 接收鸭子视角并回传检测/追球指令。Chase 不是仅按按钮就能启用的云端识别功能,需要视觉端实际运行。板端断开后,服务回到云端兜底模式。

这里最值得观察的不只是“鸭子动起来了”,而是完整的数据闭环:

网页指令 / 相机画面
        ↓
RoboGo 云端仿真与渲染
        ↕ WebSocket
RDK X5 运控 + BPU 视觉
        ↓
鸭子状态与动作回传到驾驶舱

常见问题

开机后出现 502 Bad Gateway
检查端口 8080、路径 /,再看终端健康检查。此次复现的旧版问题是:即使端口配置正确,开机后应用进程也没有启动;手工启动后恢复正常。修复版为此增加启动托管,但不能把所有502都归为同一原因。若后端健康而公网仍502,请保留开发机ID、发生时间和日志,继续检查平台代理链路。

画面黑屏或不动
先执行 curl -s http://localhost:8080/healthz;服务异常时进入 /root/microduck_sim/ 执行
./restart.sh。

Chase 模式检测不到球
先确认视觉端已连接且在输出检测/控制消息,再确认球进入第一视角;按空格复位会把球放回初始位置。

MANUAL 下 Kick L/R 没反应
先确认使用的是本次 kickfix 修复版,并刷新页面。检查动作状态是“拒绝”“执行中”还是没有连接;原版无 X5 时并未执行踢球。如果鸭子做了踢腿但球没动,先检查是否走近并对准了球。

X5 连接中断
检查两个 wss:// 地址是否使用当前开发机的 Web 公网域名。板端掉线不会让页面直接失效,云端会回退到
本地模式。

进阶:训练自己的 MicroDuck 策略

乔龙原镜像本身就有可用的训练环境,并不是只能推理。 本次直接使用其原虚拟环境完成了64个并行环境、5轮PPO训练检查,并导出输入 [1,61]、输出 [1,14] 的ONNX,CPU推理通过;没有重装训练环境或修改奖励。

在修复版终端先跑一次小规模检查:

cd /root/microduck_sim
./train.sh Mjlab-Velocity-Flat-MicroDuck \
  --env.scene.num-envs 64 \
  --agent.max_iterations 5 \
  --agent.logger tensorboard \
  --agent.run-name my-smoke

日志与模型保存在 microduck_rl/logs/rsl_rl/velocity/<运行目录>/。五轮只验证流程,不代表已经训练出好策略。
Web使用系统Python,训练使用 microduck_rl/.venv,不要混用pip。更长训练及包含观测归一化的ONNX导出命令见镜像README。

这份修复版尚未加入任意训练模型的Web切换入口。若希望进一步体验checkpoint管理、替换和对比自己的模型,可以选择另一份训练镜像:

训练镜像: microduck-rl-training-web-v1|RoboGo 资产市场

  • 内置 9 个官方预训练策略,可在 Web 中实时控制和切换动作
  • 提供 GPU PPO 训练、速度跟踪对比任务和 checkpoint 管理
  • 支持将 checkpoint 正确导出为包含观测归一化器的 ONNX
  • 可直接在 Web 中替换、体验和对比自己训练的模型

两份镜像不是“一个能训练、一个不能训练”的区别:本次修复版延续乔龙驾驶舱与X5接口,并补齐云端左右踢球;microduck-rl-training-web-v1 提供更完整的训练与模型替换工作流。后者此前已完成新开发机恢复、PPO训练检查及checkpoint → ONNX → Web验证;这些结论不能混用为本次kickfix版本的验收结果。

本次验证到了哪一步

  • 启动修复基底:从镜像新建、关机再开机,服务均能自动拉起;原有训练环境训练和导出通过。
  • 踢球修复:左右脚的原地、带速度、脚前放球共6种独立物理测试通过;WebSocket动作/停止/复位/恢复速度及前端单元测试通过。
  • 尚待补测:本次新保存的kickfix镜像尚未另建实例复测恢复;公网浏览器自动验收被客户端拦截,未完成真实按钮点击验收;没有实体X5联调。本次先作为群组共享修复版,不能理解为全链路已全部验收。

最后

这份镜像适合先把效果跑起来,再沿着 Web 控制、强化学习策略、板端闭环和 BPU 视觉逐层拆解。

先在浏览器里遛一圈,再接上 X5 给它换一颗真正的“板端小脑”。如果你基于这个镜像做出了新的动作、
感知能力或交互玩法,欢迎继续发到 Duck Together|机器鸭共建 版块。


项目基于 Pollen Robotics 开源 MicroDuck 构建;原镜像与 RDK X5 联动方案由 qiaolongli 提供。本次独立修复基于其镜像,保留上游模型与训练环境,感谢原作者的工作。