Duck Together|C-感知与智能交互:云端仿真里的鸭子“认人+Agent”(阶段成果)

无 RDK X5 / 无实体鸭,全部在 RoboGo 云端 5090 仿真里完成。基于 MicroDuck(Pollen Robotics 开源)与 microduck_rl 官方策略搭建。本帖为 Day 1 阶段性成果 + 后续设计研究,欢迎交流。

【赛道】
感知与智能交互(认人方向为主;同时沉淀了一条 A 仿真与强化学习训练链路:4096 env × 6000 iter 走路基线)

【目标】
一句话:先在纯仿真里让鸭子“认得出人、分得清该跟谁、该绕谁”,为后续“把鸭子做成能理解人意图与情绪的家庭社交 Agent”打地基。
本次验证三件事:

  1. 用官方模型搭建可复现的“认人闭环”(召唤 → 只跟主人 → 陌生人靠近绕圈 → 回归主人);
  2. 沉淀可复用工程骨架:感知 → 行为状态机 → 控制(复用网页驾驶舱同一套 MuJoCo/ONNX/观测契约)→ 评测/录像;
  3. 输出“认人 → Agent”的后续设计路线,明确不做社区已有的追球/导航/多鸭足球,专注“个体人识别 + 意图 + 信任社交”。

【环境与版本】

【复现步骤】(RoboGo kickfix 开发机内,开机即可)
git clone https://github.com/YDxun/microduck-duck-play
cd microduck-duck-play

说明:duck_play 会自动复用 /root/microduck_sim 的 LocalSim/PolicyBank/LocalKick(与网页驾驶舱同源)

python3 duck_play/launch/person_demo.py --time 34 # L1 认人:召唤→跟随→陌生人绕圈
python3 duck_play/launch/min_chase.py --time 60 --max-touches 3 --arena --auto-restart # 多轮连续追球
python3 duck_play/launch/composite_demo.py --time 40 # 组合:找到主人→把球带(踢传)给他

录像:export DUCKPLAY_RECORD=/tmp/out.mp4(可调 DUCKPLAY_REC_EVERY/_W/_H)

【成果证据】

  1. 认人 L1(召唤→跟随→陌生人绕圈)视频:仓库 research/demo_videos/person_l1.mp4
    指标:召唤到位 7.5s(summon_ok=true);跟随带内占比 26.1/34s;陌生人贴身(<0.3m)时绕圈 1 次 2.7s 后回归主人
  2. 多轮连续追球视频:chase_3rounds.mp4 —— 20s 内自主完成 3 次“逼近→站稳→踢→触球”,每轮自动重置并再次追球
  3. 组合叙事视频:composite_deliver.mp4 —— 先找到红衣主人(5.7s) → 绕到球后 → 把球踢送到主人附近(球-主距离 0.92→0.735m,delivered=true)
  4. 自训走路基线:reward≈81.5 / 回合≈920 / 无 NaN(能站能走不摔;直行跟踪弱于官方 alpha_walking,作为可续训中间基线)
  5. 仓库与模型链接见【环境与版本】

诚实边界:以上为“真值感知 + mocap 人形代理”的无头跑分与录像;仿真无抓取,“带球给主人”采用踢传;“每轮重置”的多轮追球 ≠ 同一颗球连续三脚(后者在后续调优中)。

【开源与授权】

  • 本仓代码:Apache-2.0;基于 pollen-robotics/microduck、microduck_rl(Apache-2.0)二次开发
  • 官方 ONNX 策略重发布:HF XenderYang/microduck-cloud-policies
  • 3D 模型/素材按上游 CC BY-SA-NC;本贴视频/截图供社区交流

【后续设计研究(认人 → Agent)】
社区已有:连续追球/连踢、LightNav 跨房导航、3v3 足球、BPU 认球等 —— 本项目不做这些。
路线分三阶段,重点在“个体人 + 意图 + 信任社交”,而非通用导航/足球:

L1(本次)认人几何闭环:身份标签 + 召唤/跟随/陌生人绕圈 + “信任边界”雏形(只响应主人召唤)。

L2 意图与情绪感知:

  • 多模态意图通道:视觉手势(挥手=召唤、指方向=去那、伸手/蹲下=互动)、语音情绪(ASR+情绪维度)、近距触碰;
  • 把“人的状态”建模为隐状态:站/走/坐/久坐/靠近/远离 → 鸭子据此调整行为(久坐→安静陪伴或取物倾向;靠近→欢迎;陌生人→警戒绕行);
  • 记忆与个性化:episodic 记忆 + 轻量身份画像(何时认识、常坐位置、喜欢被摸与否),做到“认主人 + 记得主人习惯”。

L3 Agent 化:

  • “社交大脑 + RL 小脑”双脑架构:VLM/LLM 只负责把“人的意图/情绪”翻译成高层行为意图(如“主人看起来累→安静陪伴/去门口等待”),动作仍由 50Hz RL 走路/站立策略执行 —— 绕开 VLA 频率与安全短板;
  • 信任与隐私分级:按身份+熟悉度给不同响应权限(主人=可执行召唤/任务;访客=礼貌保持边界;陌生人=警戒绕行且不响应指令),做成可配置策略表;
  • 决策可解释:输出“看到了谁 → 推断意图 → 选择行为”的文本/图链,方便社区评审与调试。

【需要的支持】

  • 欢迎认人/多模态/情绪理解方向一起共创。

视频:

阶段更新 - 2(2026-09-09)

进展

  1. 完整链路 Demo(MuJoCo 全景录像):鸭子用第一视角 RGB 认出主人(红衣,conf≈1)与陌生人;只响应主人的手势,依次执行 sit → pick → stand_up → roll;陌生人同场串场但不响应。
  2. 仿真数据集 v8:改为“渲染级精确关键点标签”(不再用近似投影);相机按 IMX219 ~62° 水平视场;鸭子头俯仰 40°(真机鸭子头可动,先做“可见性扫描”确定 1.0–1.4m 交互距离内全部手势关键点都在画面内);含域随机化(背景色/亮度/噪声/模糊/JPEG/衣服抖动)与手势均衡。
  3. 模型:YOLO11m-pose @480480 微调,Val Box mAP50≈0.995 / Pose mAP50≈0.85;已导出 ONNX 并上传 HF。
  4. 工程鲁棒与评测:N 帧投票确认、启动预热、触发冷却、回 idle 才能再触发、--no-act 实时混淆矩阵、150 帧离线手势基准+阈值扫描工具(已量化定位:低视角下手写 2D 规则失效,需改为学习式分类器)。

仓库与模型

下一步

  • 学习式关键点手势分类器替换手写 2D 规则(在 150 帧离线基准上收敛到 >90% 后再做纯视觉实时闭环);
  • 真机侧:ONNX+manifest 已就绪,可接 RDK 头部相机验证同一套识别/控制契约。

阶段更新 - 3|Harness Duck:Agent × 技能工具 × 执行→核查→再规划(已接入网页驾驶舱)

延续本帖“认人 → Agent”主线,本期尝试把仿真鸭升级为 Agent 驱动的 Harness Duck ,搭建了基础架构:网页驾驶舱里那只鸭现在可以通过语言控制动作(无 X5、无人物、纯仿真闭环)。

架构

  • 事件/唤醒(网页按钮·文本指令,真机时=ASR)→ 意图解析
  • Planner:Pilot 规则 / LLM function-calling(Qwen3.5-flash;Qwen3-VL-Plus 带场景图规划)
  • Harness(唯一动鸭入口)→ 技能工具表(= LLM 的 tools schema)
  • 技能由官方/社区 RL-ONNX执行(不用手写 PID 动作);执行完 → verifier 核查 → 失败带几何反馈再规划(≤2 次)

本次完成/新增

  1. C1 网页接入:sim_server 挂 SimHost,control_mode=agent 时 50Hz 由 Agent 驱动“浏览器里那只鸭”;Agent 面板=召唤 / :tennis:找球并踢球 / 文本指令 / 唤醒配置 / 决策链流实时上屏。

  2. 技能工具表:come_to / approach_ball / find_and_kick / kick_ball / do_dance / do_trick / backward_step / express / doze。

  3. 找球并踢球 find_and_kick:追球→脚位对齐→官方 BallKick ONNX 踢一脚→没触球自动再追(≤4 次)。headless 与网页双实测 kicked 0.39m、鸭子不倒、0 复位。

  4. 规划/核查闭环:VLM 只做“技能边界”的慢大脑(选技能/二值 QA),50Hz 控制永不等待;坐标一律不进模型,由场景真值决定几何。

参考图片:

  • 踢球

  • 跳舞

对社区开源模型的核验(诚实记录)

  • Datawhale Microduck-BallKick-4096x6000(右脚 ONNX,Apache-2.0)已下载并校验。
  • 实测:该模型需要“行走接触窗口接管”式追球状态机;在我们“站稳→踢→恢复”契约下不触球(球距 0.09–0.7 m、时长到 3 s 位移≈0)。因此默认仍用官方 kick ONNX 踢最后一脚,Datawhale 模型保留为后续状态机接入的备选。

开源(代码 + 权重)

边界与下一步

  • 感知仍是 MuJoCo 真值(不是视觉检测);真实相机→检测→球位估计是 Sim2Real 前提。
  • “先前进再翻滚”这类多步连词 + 通用移动工具 walk_distance 待实现(执行层已支持技能序列)。
  • HF Space 一键可玩版(compat/+run_once)为 WIP;本地桌面无云版待移植进仓库。
  • VLM 二值 QA 默认走规则真值,DUCKAGENT_VLM_VERIFY=1 可开启。

欢迎社区提建议/协作。