内容提要
Microduck是Hugging Face旗下Pollen Robotics推出的25厘米高、800克重双足机器人,售价399美元。其控制系统用Rust手写,七个守护进程通过Unix Socket上的JSON-RPC通信,确保可靠性与安全性。运动能力通过MuJoCo仿真中PPO强化学习训练,涵盖走路、起身、踢球等行为,并采用sim2real流程部署。文章详述了其软件架构、训练流程及Rust在嵌入式系统中的应用价值。
延伸解读
为什么选择 Unix Socket 而非 TCP?
Microduck 的七个守护进程通过 Unix Socket 上的 JSON-RPC 通信,而非 TCP。文章指出,Unix Socket 的文件系统权限天然提供访问控制,一个 0660 权限的 socket 只有被允许的进程能访问,而 TCP 端口默认对所有进程开放,需要额外鉴权。此外,SO_PEERCRED 可获取调用方 uid/gid/pid,用于审计和权限判断。更重要的是,Unix Socket 避免了“监听错误网卡”这类配置错误,防止将控制权限暴露到公网。
sim2real 中的电机建模与齿轮间隙
文章强调,Microduck 的强化学习训练在仿真中精细建模了电机物理特性,包括电压控制律、反电动势、摩擦等,并针对电池电压、指令延迟等进行域随机化。特别地,每个任务都有带齿轮间隙的孪生版本,通过在仿真中串联 ±1° 的间隙,模拟真实编码器位于间隙下游的情况。这种设计增加了仿真复杂度,但保持了观测和动作维度不变,使得 ONNX 导出和真机运行时代码无需改动,体现了“仿真复杂度增加,部署接口稳定”的工程思路。
Rust 在嵌入式机器人中的优势
文章指出,Microduck 选择 Rust 作为控制系统语言,原因包括:在资源有限的 RK3566 上运行 50 Hz 实时控制环,内存安全和无 GC 停顿是硬指标;tokio 异步生态适合管理多个异步 IO 与 CPU 密集任务;类型系统在编译期防止内存错误。此外,团队仅用 30 个依赖就实现了跨蓝牙、WebRTC、Unix Socket 的通信协议,避免了大型框架的依赖负担,展示了 Rust 在严肃系统编程中的价值。
Q&A
Microduck是什么?它的主要特点有哪些?
Microduck是Hugging Face旗下Pollen Robotics推出的双足机器人,高25厘米,重约800克,有15个舵机、摄像头、深度传感器和两颗IMU,售价399美元。它能走路、坐下、蹲下、摔倒后自己站起来,甚至能轮滑。
Microduck的控制系统是用什么语言写的?为什么选择这种语言?
Microduck的控制系统完全用Rust编写,不依赖任何框架。选择Rust是因为它内存安全、无GC停顿,适合嵌入式实时控制;tokio异步生态适合管理多个IO;类型系统能在编译期防止错误,保证系统安全可靠。
Microduck的七个守护进程分别负责什么?
七个守护进程包括:robotd(电机控制、运动学、安全)、configd(WiFi配置、身份)、updaterd(系统更新和回滚)、btd(蓝牙透传)、padd(手柄输入)、mediad(摄像头、音频、WebRTC)、tofd(深度传感器)。它们通过Unix Socket上的JSON-RPC通信。
Microduck是如何通过强化学习学会走路的?
Microduck在MuJoCo仿真中使用PPO算法训练强化学习策略,训练频率为50Hz,导出为ONNX格式后部署到真实机器人。训练中精细建模了电机电压控制律、齿轮间隙等,并使用域随机化缩小仿真与现实的差距。
Microduck的sim2real流程中如何处理齿轮间隙?
在仿真中为14个舵机关节串联±1°的齿轮间隙,建模为passive__backlash铰链,观测和动作维度不变,因此ONNX导出和真机运行时代码无需改动。
Microduck为什么选择Unix Socket上的JSON-RPC而不是其他通信协议?
因为Unix Socket文件系统权限可提供访问控制,SO_PEERCRED能获取调用方信息用于审计和权限判断,且避免了TCP监听错误网卡的风险。同时,serde结构体可复用于BLE和WebRTC,而D-Bus类型系统不支持。
Microduck的系统更新机制是怎样的?如何保证不会变砖?
系统更新采用整体替换方式,新版本放在独立目录,updaterd校验签名后切换符号链接并重启服务,然后询问robotd健康状态,若不健康则自动回滚。还有启动计数器兜底,防止重启死循环。
Microduck的强化学习策略如何实现热切换?
所有策略共享统一的61维观测接口,包括48维本体感知和速度、头部姿态、身体姿态指令。因此走路、起身、踢球等策略可以在运行时通过同一接口互相切换,互不冲突。