Skip to the content
PCBKitNew board
2 layers40 × 22 mmMicroduck power hub, the printed circuit board in 3D

Microduck power hub

Ley-WL/microduck-observer1

MicroDuck robot web observer: 3D attitude, live BNO085 IMU telemetry, logs and 15-servo dashboard. Vue + FastAPI.

Size
40 × 22 mm
Copper layers
2
Thickness
1.6 mm
Parts
8
Nets
3
Pads
15
Tracks, vias
8, 5
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
22 Sep 2026
Updated
7 Nov 2026

Overview

Microduck power hub is an open-source printed circuit board by Ley-WL, from the Ley-WL/microduck-observer repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 40 × 22 mm with 8 parts on 3 nets, routed with 8 tracks and 5 vias.

Its parts include 5 connectors and 1 capacitor. It belongs with the robots and motor control boards of this library.

README

README.md

MicroDuck Observer

面向 MicroDuck 实机的观测、标定与控制平台。将网页调试、Android 蓝牙遥控、传感器采集、舵机执行和 ONNX 策略运行统一接入 Rust 控制后端,让界面显示的状态、模型使用的反馈和机器人执行的命令来自同一条控制链路。

本仓库维护机器人端服务、Web 工作台、模型运行合同及实测证据。Android App 在独立项目 DuckLink 中维护。

手柄自定义控制

侧栏「手柄设置」支持8个动作键自定义、取消绑定及恢复默认,网页与板端实体手柄共用持久化配置;固定急停/停止及起身长按保留。当前为本地实现,未部署实机,见 手柄映射说明。

模型管理

侧栏独立「模型管理」页面支持显式模型选择、默认执行模板、完整metadata和部分官方manifest导入、上一版本回退,姿态工作台保持原布局。同合同的新权重无需重编后端;停止控制后校验与预热,导入不自动启用。当前为本地实现,尚未部署实机。操作、接口及验证方法见 模型管理说明。

功能规划

  • 自主行动功能规划:2026-10-19确认,第一版模式切换、人工接管、6秒限时起身及后续感知路线;尚未实现。

硬件设计资料

硬件工程、BOM、加工文件、效果图与设计检查统一存放在 hardware/,后续硬件模块也从该目录继续。当前电源Hub为 Rev N / ECO1无开关+C1版本,内含立创EDA、KiCad源文件、Gerber及采购清单;源检查通过,立创客户端与实物验证状态见版本说明。实测主记录继续维护在 docs/实测记录/。

界面预览

Observer 主控工作台

将 3D 姿态、IMU 曲线、网页虚拟手柄与 15 个舵机反馈放在同一工作台。中央保留 3D 视图和可读的手柄控制区;高度不足时控制区滚动,窄屏按列重排,手柄改用分区布局,避免文字和按钮被强行缩小。

Observer 主控工作台:3D 姿态、虚拟手柄、IMU 与舵机反馈

截图来自 2026-10-14 最新 Web 源码本地页面,浏览器视口 1920×1080 CSS px、100% 缩放、DPR 1,图片也是1920×1080。处于未连接状态,3D 是参考模型,曲线和关节数值等待设备反馈,动作按钮禁用。另已检查 1280×720、1366×768 和 390px 窄屏;窄屏截图为完整滚动页面。

网页手柄支持鼠标和多指触控:左摇杆行走 / 转向、右摇杆控制头部,松开归零。当前按键如下:

按键网页功能
A / X / Y站立 / 坐下 / 倒地起身
B停止保持
Back急停卸力;手柄外另保留独立急停按钮
LB / RB一键演示(再次取消) / 拾取;RT嘎叫
十字键上 / 左 / 右 / 下舞蹈 / 左脚踢球 / 右脚踢球 / 自主行动;左右踢球已本地接入,需主板同步新服务和模型,上下仍预留
Start预留,暂不执行动作

翻滚入口保留在“按键说明与诊断”中。网页完整身体与头部控制需要配套 Rust 后端;当前手柄改动仅完成本地开发,未部署主板或通过实机验收。物理手柄配置与按键差异见 手柄使用说明。

DuckLink 控制 App

横屏操作页采用左侧行走轮盘、中间动作技能、右侧头部轮盘;顶部显示连接状态、电量与急停,底部提供速度和身体姿态。倒地起身是技能就绪入口,“嘎一下”独立提供嘴部与叫声控制。设备页支持多设备连接与切换、Observer 版本查看和 OTA 更新。

DuckLink 0.9.61 横屏控制页

截图为已发布的 App 0.9.61 在 Android 模拟器中的未连接界面,屏幕 2160×1240 px、440 dpi(约785×451 dp);图中含安卓导航区域。以上截图用于展示各自注明版本的界面,不代表整机动作验收结果。

重构重点

重点当前实现
统一控制后端HTTP、WebSocket 与 BLE 在同一 Rust 主服务内接入,共用动作状态、控制会话和硬件反馈,移除旧 Python 服务与蓝牙转发控制链路。
串口唯一拥有者舵机采集、目标写入、使能、卸力和校准由同一个总线拥有者串行处理,网页、App 和推理任务不另开舵机串口。
模型合同显式化ONNX 权重与 metadata 配套,核对哈希、观测维度、关节顺序、归一化和执行配置;动作历史、滤波、增益与切换按具体模型合同处理。
真实反馈驱动显示3D 关节使用实际编码器反馈;IMU、关节、系统与日志独立维护时间戳、序号、有效性及过期状态。页面接收心跳不会把旧传感器数据刷新为实时。
标定与设置统一持久化Web 和 App 共用主板保存的关节零位、方向、IMU 参考、安装轴向及独立模型增益;共享标定使用 revision 防止并发覆盖。
系统权限隔离Wi-Fi 与关机/重启由受限 Rust 辅助服务通过 Unix socket 提供,主控制服务无需 root 权限。
可验证发布独立 release、候选只读核查、文件哈希验证、原子切换与回滚;升级保留现有模型、标定、增益和 BLE 身份。网页资源可单独更新,不重启控制服务。

系统架构

mermaid
flowchart TB
    Web["Web 工作台<br/>Vue 3 · TypeScript · Three.js · ECharts"]
    App[DuckLink Android App]
    Gamepad["T4 Nova Lite 手柄<br/>本地开发 · 待实测"]
    Gamepad -->|BlueZ HID / Linux evdev| API
    Web <-->|HTTP / WebSocket| API
    App <-->|认证加密 BLE · BlueZ| API

    subgraph Board[机器人主板 · Linux ARM64]
        API["Rust 主服务<br/>Axum / Tokio · 控制会话与动作入口"]
        Telemetry["遥测缓存<br/>最新样本 · 时间戳 · 有效性 · 日志"]
        Bus["舵机总线唯一拥有者<br/>反馈读取 · 目标写入 · 校准 · 卸力"]
        Policy["模型运行器<br/>ONNX Runtime CPU · 模型合同 · 技能切换"]
        IMU[IMU 独立采集线程]
        State["持久状态<br/>共享标定 · 模型增益 · BLE 身份"]
        Helpers["受限 Rust 辅助服务<br/>Wi-Fi 管理 · 系统电源"]
        API <-->|状态订阅| Telemetry
        API -->|显式控制命令| Bus
        Bus <-->|观测与目标| Policy
        Bus -->|关节反馈| Telemetry
        IMU --> Telemetry
        IMU -->|姿态与角速度| Policy
        API <--> State
        Policy -->|读取执行配置| State

控制链路。 网页、App 和已配置的物理手柄发出意图,服务检查当前任务与控制会话,再由总线拥有者执行。停止保持与卸力是不同操作;方向控制携带会话和递增序号,过期方向命令归零。动作、使能与模型推理由明确的用户操作启动,打开页面或恢复连接不会自动启动运动。

模型链路。 当前模型常用 61 维观测、14 维动作,嘴部为独立舵机控制。原生技能运行路径在控制循环中完成反馈、观测、推理与目标写入;兼容路径使用独立推理线程和最新结果槽。两条路径按各自合同执行,不将所有模型强行套用同一种滤波、增益或切换方式。机械范围、编码转换及故障处理集中在机器人端,客户端不重复实现策略。

观测链路。 IMU 独立采集,关节反馈与模型控制共用串口拥有者,服务对外发布主题化遥测。WebSocket 按展示需要订阅最新数据,HTTP 提供元信息、快照、标定和控制接口。硬件采集频率、模型执行频率与浏览器展示频率分别管理;慢客户端不会要求服务积压全部传感器历史帧。

运行与工具。 机器人主服务、Wi-Fi 和电源辅助程序均为 Rust;推理使用原生 ONNX Runtime 动态库。Python 仅用于打包、部署、只读分析及部分测试工具,不作为机器人控制服务运行。音频调用系统 ALSA 播放器;可选摄像头由 Rust Observer 管理 V4L2/FFmpeg 子进程,与主服务共用 systemd 单元及 HTTP 端口,不运行 Python 摄像头服务。摄像头开关默认关闭,选择保存在主板;当前部署状态见实测记录。

主要功能

  • 观测工作台: 3D 身体姿态与 15 关节反馈、Roll/Pitch/Yaw、IMU 曲线、舵机电压/温度/电流/状态、CPU/内存/温度与部署版本。
  • 标定: 关节显示零位与方向、IMU 安装方向和参考姿态、Roll/Pitch 归零、显式硬件中位校准。显示标定与 EEPROM 写入分别处理。
  • 实机控制: 坐下预备、站立接行走、双摇杆网页手柄、速度设置、倒地起身、拾取、翻滚、左右脚踢球、零位,以及主板扬声器配合张闭嘴的“嘎一下”。
  • 主板直连手柄(开发版): Linux evdev 输入复用控制后端;App BLE 与手柄连接可共存,显式动作获取控制权。物理手柄以双摇杆回中后的 LB+A 站立、LB+Y 倒地起身,Back 全局卸力。默认关闭,蓝牙配对、设备映射和双连接稳定性待实测,详见 配置与验收要求。
  • 诊断: 控制状态与技能进度、反馈暂停、故障帧和会话记录、串口收发证据、日志筛选及 JSONL 导出。
  • 连接与管理: Web 自动重连及断线原因、BLE 绑定与认证、Wi-Fi 管理、Web 地址获取、确认后的主板关机/重启。

功能已接入服务不等于对应动作已在每种装配和姿态下通过验收;目前倒地起身和部分运动效果仍有用户反馈问题。

硬件 BOM 与接入概况

下表为当前实物配置摘要,不是完整机械采购表。针脚、电平、供电和改焊细节以对应实测页为准。

部件数量配置与用途接入 / 实测说明
Radxa ZERO 3W1RK3566、2GB RAM、无 eMMC,microSD 启动;Linux ARM64 主控已部署 Rust 服务,Wi-Fi / BLE 实机使用。见 主板与接线。
Robot HAT1电源、TTL 舵机收发与外设连接当前舵机 UART2 /dev/ttyS2、外接 IMU UART9 /dev/ttyS9;接插件与改焊问题单独记录。见 HAT 实测。
飞特 HD1910 舵机15左腿 20–24、右腿 10–14、头颈与嘴 30–34;TTL 总线 1 Mbps已读取全组反馈并接入模型控制;负载、供电压降和运动问题需结合原始回包分析。见 舵机实测。
正点原子 MS901M IMU1UART、115200 bps;姿态、角速度与加速度已接入独立采集与共享安装标定;旧接线方案不能替代当前 HAT 端口配置。见 IMU 实测。
HAT 音频与扬声器1 套AIC3104 / ALSA,配合嘴部动作播放叫声已接入“嘎一下”服务动作,具体连接见 平台记录。
IMX219 摄像头1,可选CSI 图像采集e6fc56 已验证 Rust Observer 持久开关及 640×360采集、360×640旋转显示(约10fps),固定曝光与软件白平衡。见 摄像头实测。
VL53L5CX ToF1,可选I²C 多区测距有历史独立通信记录;当前 ToF 服务停用 / 离线。见 ToF 实测。
主控供电、舵机供电与线束按装配分别核对主板输入与舵机总线供电,不能混用电压规格已记录动作负载下电压下降;电池容量、线束压降和供电能力应以实际测量为准,不在此推定。见 HAT 实测。

实测摘要

实测、软件回归和仿真分别记录,完整证据见 实测索引。以下摘录截至 2026-10-12 的结果:

项目已确认结果验证范围
Rust 主服务部署ARM64 服务已运行;部署核对模型、标定、增益、BLE 身份与静态资源候选与生产只读核查通过,不等于整机动作验收。
全组舵机读取最近后端部署候选 998 / 999 帧完整,单帧缺 23 / 31;20 个生产快照确认卸力当次部署采样结果,不保证运动中永不缺帧。
Web 服务响应主板本机 20 次 HTTP 快照中位 11.14ms;20 秒 WebSocket 连续接收,最大间隔约 40ms本机 loopback 测量,不是现场浏览器端到端延迟。
网页数据量相同主题展示订阅调整后约 198.5 → 103.8KB/s,减少 47.7%,姿态保留 50Hz两次 20 秒本机测量;硬件采集与模型保护频率不变。
现场 Wi-Fi网关延迟 2~109ms;日志存在反复断开、跨接入点重新关联和频段引导通知网络掉线仍待解决;网页重连优化不能修复无线关联本身。
运动与技能行走、坐站、起身、拾取等控制入口和诊断已接入倒地起身、部分坐站 / 方向效果仍需实机验证,不能用模型数值一致或仿真通过代替运动结果。

最近相关证据:网络与网页核查 · 后端部署。历史采集基准保留在实测文档中,不用于描述当前所有路径的实时性能。

本地开发

需要 Linux / WSL、Rust 工具链,以及 Node.js 22.12+。生产 BLE 使用 Linux BlueZ。ONNX 推理需安装匹配的原生 ONNX Runtime,并设置 ORT_DYLIB_PATH。

启动隔离模拟服务:

bash
cd backend-rust
MICRODUCK_SOURCE=simulation \
MICRODUCK_BLE_ENABLED=0 \
MICRODUCK_BIND=127.0.0.1:8877 \
cargo run --locked --bin microduck-observer

另一个终端启动网页:

bash
cd frontend
npm ci
npm run dev

打开 http://127.0.0.1:5173,连接 API http://127.0.0.1:8877。模拟数据有明确来源标识,不连接实物总线。生产构建的 frontend/dist/ 由主服务直接提供,默认部署 Web 端口为 8877。

常用检查:

bash
cd frontend
npm test
npm run build
bash
cd backend-rust
cargo test --locked --bins
cargo build --release --locked --bins

外部模型 fixture、原生推理库和实机测试有独立环境要求;详细配置见 Rust 后端、协议 和 当前工具。

部署与目录

发布流程见 Rust 部署。后端更新使用 tools/deploy-runtime.py;网页独立发布使用 tools/deploy-frontend.py;Wi-Fi / 电源辅助迁移使用 tools/deploy-service-rust.py。构建与候选验证完成后,确认机器人空闲、15 个舵机卸力再部署;安装器保留现有配置并验证回滚来源。

目录内容
backend-rust/src/HTTP / WS / BLE、遥测、串口控制、模型执行、共享标定与故障诊断
backend-rust/src/bin/Wi-Fi 和电源权限辅助程序
frontend/src/Web 页面、连接状态、3D 模型、图表与实机控制组件
models/ONNX 权重及观测顺序、来源和执行合同 metadata
deploy/、tools/、scripts/发布、回滚、只读测量及分析工具
protocol/消息格式与接口约定
docs/实测记录/按硬件与主题维护的实物记录、故障分析及原始证据

许可与资源来源

平台代码采用 Apache-2.0。机器人外形与部分策略资源来自公开项目,平台重构与资源来源分别记录:

  • 3D 网格与模型描述的来源和转换说明见 模型 NOTICE,保留随附许可证。
  • 当前部分策略权重来自 kissqy/Microduck-kissqy,具体提交、权重哈希、观测合同和执行配置以 models/*.metadata.json 为准;自行训练的权重也在对应 metadata 中区分。

接入资源不代表本项目训练或原创全部模型;具体模型文件名兼容历史接口,不用于判断当前权重版本。上游资源的许可和署名随资源保留。

Parts

8
QtyValueFootprintReferences
2Case_mount_clearance_2.2_thread_unverifiedH1, H2
110uF_25V_X7RCapacitor_SMD:C_1206_3216MetricC1
1A2007WV-3P_HEADHub:CJT_A2007WV-3P_C225336J3
1A2007WV-3P_LEFTHub:CJT_A2007WV-3P_C225336J2
1A2007WV-3P_RIGHTHub:CJT_A2007WV-3P_C225336J4
1BAT_MINUS_RIGHTHub:SolderInput_SMD_D3J5
1BAT_PLUS_LEFTHub:SolderInput_SMD_D3J1

Questions

How big is the Microduck power hub PCB?

It measures 40 × 22 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Microduck power hub use?

8 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Microduck power hub KiCad files?

From the Ley-WL/microduck-observer repository on GitHub, at the commit this page was made from: the board is hardware/power-hub/revN-eco1/source/kicad/microduck-power-hub.kicad_pcb and its schematic hardware/banana_pcb/upstream-14b6e768a3e9/banana_pcb.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Microduck power hub design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers20.5 × 24.8 mmPi interface, the printed circuit board in 3D

    Pi interface

    opulo-inc/lumenpnp

    The LumenPnP is an open source pick and place machine.

    8 parts3.7k
  • 2 layers59.9 × 25.7 mmBuffer, the printed circuit board in 3D

    Buffer

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    8 parts1kGPL-3.0
  • 2 layers52 × 12.6 mmUSB, the printed circuit board in 3D

    USB

    shanteacontrols/OpenDeck

    A platform for building interactive control and sensing devices using MIDI and OSC built with Zephyr RTOS.

    8 parts960Apache-2.0
  • 2 layers87.5 × 48.5 mm7 input macropad, the printed circuit board in 3D

    7 input macropad

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    8 parts915
  • 2 layers36.2 × 63.1 mmPicoMemcard pico, the printed circuit board in 3D

    PicoMemcard pico

    dangiu/PicoMemcard

    Emulating PSX Memory Card (or controller) using a Raspberry Pi Pico

    8 parts694GPL-3.0
  • 2 layers36 × 10 mmPCB4-PWR BTN Rev.A, the printed circuit board in 3D

    PCB4-PWR BTN Rev.A

    OLIMEX/DIY-LAPTOP

    Do It Yourself Open Source Hardware and Software Modular Hacker's Friendly Laptop

    8 parts578Apache-2.0