从迪士尼主题公园到开源社区:Open Duck Mini v2 双足机器人的技术全貌

发布时间:2026/7/27 23:19:11
从迪士尼主题公园到开源社区:Open Duck Mini v2 双足机器人的技术全貌 0. 引言2023 年底迪士尼主题公园内出现了一批令人瞩目的小型双足机器人——BDX 系列。这些身高不足半米的角色机器人能够在不平坦的地面上自主行走通过肢体语言与游客互动展现出惊人的动态平衡能力。迪士尼研究院随后发表了题为Design and Control of a Bipedal Robotic Character的论文披露了其背后基于强化学习的控制架构。然而BDX 的硬件设计和完整实现细节始终未公开这引发了机器人爱好者和研究人员的强烈兴趣。Open Duck Mini v2 正是在这一背景下诞生的开源项目。由法国工程师 Antoine Pirrone网名 apirrone发起获得 Pollen Robotics 公司赞助该项目试图以不到 400 美元的成本复刻 BDX 的核心能力——双足稳定行走。项目不仅复刻了硬件外形更重要的是构建了从仿真训练到实机部署的完整技术链路使得任何拥有 3D 打印机和基础电子知识的人都能复现一台会走路的双足机器人。截至 2025 年该项目已经吸引了超过千名社区贡献者甚至有第三方厂商如 Tindie 上的 opmake推出了基于 RK3576D 的预组装套件版本。本文将从硬件架构、训练方法论、仿真到现实的迁移策略、以及实机部署四个层面系统剖析这一项目的技术实现。目标读者是对强化学习和机器人控制有初步了解、希望建立从理论到工程的完整认知的开发者。1. 迪士尼 BDX 的技术遗产1.1 BDX 原始论文的核心贡献迪士尼研究院发表的 BDX 论文提出了一种针对双足角色机器人的强化学习控制架构。与传统的工业双足机器人不同BDX 的设计目标不是搬运重物或穿越极端地形而是在主题公园环境中展现有性格的运动风格。论文的核心贡献在于第一提出了一种将艺术性动作风格编码为运动先验motion prior的方法使机器人的步态看起来像卡通角色而非工业机械第二设计了基于命令信号的运行时控制接口允许远程操控人员通过简单的速度指令驱动机器人完成复杂的动态行走第三证明了在仿真中训练的策略可以直接部署到实机上中间仅需少量的参数校准。1.2 从闭源到开源的路径BDX 论文公开了算法框架但硬件设计、电机选型、通信协议等工程细节均未开源。Open Duck Mini v2 的创建者 Antoine Pirrone 在仔细分析论文和公开视频后做出了若干关键的工程简化决策。首先是尺寸缩小——从 BDX 的约 70 厘米缩减到 42 厘米降低了对电机扭矩的需求其次是执行器降级——用单价约 12 美元的 Feetech STS3215 串行总线舵机替代迪士尼使用的定制无刷电机最后是算力平民化——用树莓派 Zero 2W 替代高性能嵌入式计算平台。这三项简化使整机成本从数万美元降至 400 美元以下但也引入了必须在软件层面解决的新问题廉价舵机的非线性特性如何建模低算力平台如何支撑实时推理这些问题的解决方案构成了该项目最有价值的技术贡献。2. 硬件架构2.1 机械结构与自由度分配Open Duck Mini v2 的机械结构通过 Onshape 平台设计所有结构件均可通过 FDM 3D 打印制造。机器人整体高度约 42 厘米总重量约 1.2 千克拥有 14 个自由度。自由度分配如下每条腿 5 个关节髋关节横滚、髋关节俯仰、膝关节、踝关节俯仰、踝关节横滚头部 3 个关节俯仰、偏航、横滚以及 1 个用于躯干配重调节的辅助关节。在强化学习控制中实际参与步态控制的是双腿的 10 个关节头部关节通常以固定角度或简单正弦波驱动以模拟角色表情。这一自由度配置的设计逻辑值得解释。踝关节的两个自由度俯仰和横滚对于小型双足机器人的平衡至关重要——它们允许脚底在不平坦地面上保持全面积接触从而获得更大的支撑多边形。这与许多简化的双足设计如只有髋、膝两关节的倒立摆模型形成对比。额外的踝关节自由度显著提升了静态和动态平衡能力代价是增加了控制复杂度和硬件成本。2.2 执行器Feetech STS3215 舵机Feetech STS3215 是一款基于串行总线协议的数字舵机单价约 12 美元。其核心参数为工作电压 6-8.4V堵转扭矩约 19 kg.cm7.4V空载转速约 62 RPM通信协议为半双工 UART 串行总线支持位置/速度/扭矩三种控制模式。在 Open Duck Mini v2 中所有舵机通过一条串行总线串联树莓派通过 UART 接口向总线发送位置指令。选择 STS3215 而非更高端的无刷伺服电机是该项目最大胆的工程决策。这一选择使成本降低了一个数量级但也带来了严峻的 sim2real 挑战。STS3215 的主要问题包括齿轮回程间隙backlash约 1-2 度导致小幅指令无响应扭矩-电流关系高度非线性内部 PID 控制器参数不透明且不可修改温度漂移导致同一指令在冷启动和持续运行后的实际输出角度不同。这些特性无法用简单的线性模型描述必须通过专门的辨识工具BAM建立精确的执行器模型才能在仿真中正确模拟实机行为。2.3 传感器与主控惯性测量单元IMU采用 Bosch BNO055安装在躯干中心位置。BNO055 集成了三轴加速度计、三轴陀螺仪和三轴磁力计内部运行传感器融合算法可直接输出绝对姿态四元数。在 Open Duck Mini v2 的策略推理中IMU 提供的关键信息是投影重力向量projected gravity和角速度angular velocity。投影重力向量告诉策略网络机器人当前倾斜了多少角速度则反映正在以多快的速率倾斜。这两组信息构成了策略感知平衡状态的核心输入。主控制器采用树莓派 Zero 2W搭载 BCM2710A1 四核 Cortex-A53 处理器主频 1 GHz内存 512 MB。这是一个计算能力相当有限的平台但对于运行 ONNX 格式的轻量级策略网络而言足够——在 100 Hz 的控制频率下每个推理周期有 10 毫秒的时间预算而策略网络的推理通常在 2-3 毫秒内完成。项目的高性能版本则使用了 RK3576D 平台提供更充裕的算力余量。3. 训练方法论模仿学习与参考运动3.1 为什么选择模仿学习在双足机器人步态学习领域存在几种主流的方法范式。最简单的是参考曲线法用手工设计的正弦函数生成关节轨迹模板让策略网络学习跟踪这条预设路径。其次是行为约束法不提供任何参考轨迹而是通过精心设计的十余项奖励函数和约束条件让策略在自由探索中涌现出合理的步态。第三种是对抗模仿学习AMP使用真人运动捕捉数据训练判别器让策略生成的动作在统计上无法与真人动作区分。Open Duck Mini v2 选择了介于第一种和第三种之间的路线基于规划器生成参考运动然后用强化学习训练策略去跟踪这些参考运动。这一选择背后有明确的工程考量。参考曲线法过于简陋正弦波无法捕捉真实行走中重心转移、摆动腿离地、脚底着地冲击等复杂动力学特征。AMP 方法虽然效果最好但需要高质量的运动捕捉数据而为一个 42 厘米高的鸭形机器人获取运动捕捉数据既不现实也无必要。基于规划器的参考运动生成则恰好处于两者之间——它产出的运动轨迹包含了正确的步态时序和运动学约束同时不需要真实的物理数据采集。3.2 PLACO 参考运动生成器PLACOPlanning and Control是一个开源的运动规划引擎最初由法国 Rhoban 团队开发用于 RoboCup 人形机器人足球比赛。Open Duck Mini v2 项目中的参考运动生成器基于 PLACO 的PlacoWalkEngine模块该模块能够根据给定的步态参数生成完整的行走运动学轨迹。参考运动的生成过程如下首先加载机器人的 URDF 模型以确定运动学链的几何约束然后设定步态参数——包括双支撑相比例double_support_ratio、单支撑相持续时间single_support_duration、质心高度walk_com_height、摆动腿抬起高度walk_foot_height、躯干前倾角度walk_trunk_pitch等最后通过设置前进速度dx、侧移速度dy和转向速度dtheta引擎在每个时间步长内求解满足零力矩点ZMP稳定性约束的全身运动学逆解。项目提供了一个名为auto_waddle.py的脚本能够自动扫描不同的速度参数组合批量生成数百条参考运动轨迹。每条轨迹覆盖一种特定的行走速度和方向组合。这些轨迹随后通过多项式拟合压缩为连续函数存储在.pkl文件中供训练时快速查询。这种设计使得策略在训练时能够接收到任意速度指令对应的参考运动而不是只学会一种固定步态。此外项目还提供了gait_playground.py交互式工具允许开发者通过 Web 界面实时调节步态参数并可视化生成的运动。这对于理解各参数对步态的影响、以及调试不合理的参考运动非常有帮助。3.3 训练环境MuJoCo PlaygroundOpen Duck Mini v2 的训练环境基于 MuJoCo PlaygroundMJX这是 DeepMind 开发的 MuJoCo 物理引擎的 JAX 加速版本。选择 MJX 而非 NVIDIA 的 Isaac Gym 有两个原因第一MuJoCo 的接触模型精度在足式机器人社区公认优于 PhysX——它使用凸优化求解器和椭圆摩擦锥而非 PhysX 的迭代式 PGS 求解器和线性化摩擦锥第二JAX 的函数式编程范式天然支持向量化可以在单块 GPU 上并行运行数千个仿真环境。训练环境的核心是Joystick类它继承自OpenDuckMiniV2Env基类。每个训练回合episode中环境向策略网络提供观测向量接收动作输出执行物理仿真步进计算奖励并检查终止条件。整个循环以 100 Hz 的策略频率运行物理引擎内部以更高频率通常 1000 Hz进行子步长积分以保证数值稳定性。3.4 观测空间设计策略网络接收的观测向量是精心设计的——它只包含实机上能够真实获取的传感器数据排除了所有仿真特权信息。这一设计原则是 sim2real 成功的关键前提之一。观测空间的具体构成如下观测项维度物理含义实机来源陀螺仪读数3角速度 (rad/s)BNO055 IMU加速度计读数3线加速度 (m/s^2)BNO055 IMU投影重力向量3躯干相对于重力方向的倾斜IMU 融合算法计算关节角度10各腿部关节当前位置 (rad)舵机内部编码器关节速度10各关节角速度 (rad/s)舵机内部计算或差分速度指令2-3期望前进/侧移/转向速度遥控器或自主导航上一次动作10前一时刻的策略输出内存缓存前前次动作10前两时刻的策略输出内存缓存前前前次动作10前三时刻的策略输出内存缓存电机目标位置10当前发送给舵机的目标内存缓存脚底接触2左右脚是否着地仿真中由接触检测得到模仿相位1当前在参考运动中的位置内部计时器值得注意的是历史动作的引入。策略接收最近三个时间步的动作输出作为观测的一部分这一设计的目的是让网络能够隐式推断执行器的动态延迟特性。由于 STS3215 舵机的响应存在不可忽略的延迟从接收指令到实际到位约 20-40 毫秒策略需要记住自己最近发出了什么指令才能正确预测当前的实际关节状态并做出合理的下一步决策。3.5 奖励函数结构训练的奖励函数由多项分量组合而成每项分量对应一个期望行为或一个需要惩罚的不良行为正向奖励鼓励的行为线速度跟踪tracking_lin_vel策略输出的实际行进速度与指令速度之间的误差越小奖励越高。这是驱动机器人学会行走的主要奖励信号。角速度跟踪tracking_ang_vel实际转向速度与指令转向速度的匹配程度。存活奖励alive每个时间步只要机器人没有摔倒就获得固定正奖励。这鼓励策略优先保持平衡。模仿奖励imitation当前关节状态与 PLACO 参考运动在当前相位的差异。这是引导步态风格的核心分量。负向惩罚抑制的行为关节扭矩torques惩罚过大的控制力矩鼓励节能运动。动作变化率action_rate惩罚相邻时间步之间动作的剧烈变化促进输出平滑性。静止惩罚stand_still当速度指令为零时惩罚任何偏离默认站立姿态的关节运动。模仿奖励的计算是一个加权组合它同时比较线速度、角速度、关节角度、关节速度和脚底接触状态与参考运动的匹配程度。每个分量通过指数衰减函数转换exp(-k * error^2)使得奖励在误差为零时为 1随误差增大迅速衰减至 0。这一设计使奖励信号对微小偏差不敏感避免过度约束但对大偏差强烈惩罚防止学到完全错误的步态。3.6 动作空间与 PD 内环策略网络的输出是一个 10 维向量对应双腿 10 个关节的位置增量。输出经过tanh激活函数限制在 [-1, 1] 范围内再乘以动作缩放因子action_scale加到默认站立姿态的关节角度上形成最终的目标关节位置。整个计算可以表示为target_joint_position action * action_scale default_joint_angle这里的action_scale通常设为 0.25 弧度约 14 度意味着策略输出的最大值对应从默认位置偏移 14 度。这一看似保守的设计是经过反复实验确定的——过大的动作空间会导致策略在探索初期频繁发出极端指令使机器人摔倒过小则限制了可学动作的幅度。目标位置发送给舵机后舵机内部的 PID 控制器负责伺服跟踪。这一分层架构——上层策略输出位置、下层 PD 控制器追踪位置——是足式机器人 sim2real 成功的关键设计范式。它的核心优势在于PD 内环以远高于策略频率的速率运行通常 1000 Hz能够快速响应外部扰动和关节动力学从而将复杂的连续力矩控制问题转化为相对简单的位置规划问题。策略网络不需要理解电机的电流-扭矩特性、齿轮摩擦模型或负载惯量只需要学会在正确的时机输出正确的关节位置序列即可。4. 从仿真到现实Sim2Real 迁移策略4.1 域随机化域随机化Domain Randomization是 Open Duck Mini v2 应对 sim2real 差距的第一道防线。其基本思想是如果策略在训练时经历了足够广泛的物理参数变化范围那么实机的真实物理参数只是这个分布中的某一个样本点策略自然能够泛化处理。Open Duck Mini v2 的域随机化覆盖以下物理参数随机化参数范围作用地面摩擦系数[0.5, 1.0]模拟不同地面材质静摩擦损耗[0.9, 1.1] 倍模拟摩擦模型不确定性电枢惯量[1.0, 1.05] 倍模拟电机转动惯量偏差质心位置偏移[-0.05, 0.05] m模拟装配误差和配重偏差各连杆质量[0.9, 1.1] 倍模拟结构件实际重量偏差躯干附加质量[-0.1, 0.1] kg模拟载荷变化初始关节位置[-0.03, 0.03] rad模拟编码器零点偏差PD 增益 Kp[0.9, 1.1] 倍模拟控制器参数不确定性此外传感器噪声也被注入到观测中陀螺仪、加速度计、重力向量和关节角度读数都会叠加高斯噪声以模拟实机传感器的测量不确定性。动作延迟同样被随机化处理——策略发出的指令不会立即被执行而是经过随机延迟模拟通信链路和舵机响应延迟后才生效。相比于使用高质量无刷电机的项目如达妙 DM 系列电机的双足方案其域随机化范围通常更宽——摩擦系数 [0.1, 2.75]、Kp [0.8, 1.2]Open Duck Mini v2 的域随机化范围看起来反而更保守。这并非因为 STS3215 舵机的不确定性更小恰恰相反——STS3215 的非线性特性太过复杂域随机化本身无法完全覆盖必须辅以精确的执行器辨识下一节详述。域随机化解决的是已知未知参数在合理范围内波动执行器辨识解决的是未知未知舵机的行为模型本身就与仿真假设不符。4.2 BAM 执行器辨识弥合廉价硬件的鸿沟BAMBetter Actuator Models是由法国 Rhoban 团队开发的舵机辨识工具它是 Open Duck Mini v2 实现 sim2real 的关键一环。如果说域随机化是用宽分布覆盖未知参数那么 BAM 则是直接测量并建模舵机的真实行为。传统仿真对舵机的建模通常非常简化假设舵机是一个理想的位置源发出位置指令就到达该位置或者最多加上一阶延迟和库仑-粘性摩擦。但 STS3215 的实际行为远比这复杂。它是一个电压控制的执行器内部有位置控制环和速度限幅逻辑。内部目标位置不会瞬间跳变而是以有限速率逐步逼近外部指令速度限幅。位置误差通过一个经验增益转换为占空比再转换为输出电压驱动电机。齿轮传动引入了非线性的间隙和效率损失。这些特性叠加在一起使得同一个位置指令在不同负载、不同温度、不同运动方向下的实际响应截然不同。BAM 的辨识流程分为数据采集和模型拟合两个阶段。数据采集阶段将舵机安装在摆锤测试台上通过bam.feetech.record脚本自动执行一系列运动轨迹如阶跃响应、正弦扫频、随机位置跳变同时记录关节位置、速度、输入电压、目标位置和时间戳。bam.feetech.all_record脚本能够自动扫描不同的 Kp 设置和输入电压组合生成覆盖舵机工作包络的完整数据集。模型拟合阶段使用 CMA-ES协方差矩阵自适应进化策略优化算法在六种递增复杂度的摩擦模型中选择最佳拟合。最简的 M1 模型只有库仑摩擦和粘性摩擦两个参数最复杂的 M6 模型包含二次速度依赖项能够捕捉高速运动时的非线性阻尼效应。辨识得到的参数被写入 JSON 文件可直接加载到 MuJoCo 仿真环境中。这一步骤的工程意义在于通过精确辨识每台舵机的独特特性仿真环境中的虚拟舵机的行为能够逼真地再现实机舵机的响应。这使得策略在仿真中已经见过真实舵机的非线性、死区和延迟从而在迁移到实机时不会因执行器行为的意外偏差而失败。对于使用高质量无刷电机如达妙 DM 系列的项目这一步骤通常可以省略——那些电机的行为足够线性和可预测域随机化就能覆盖其不确定性。4.3 Sim2Sim 验证双重保险Sim2Sim仿真到仿真验证是 Open Duck Mini v2 上实机前的最后一道安全检查。其思路是如果策略在 MJX 环境训练环境中训练后能够在另一个独立的 MuJoCo 标准环境使用不同的积分器设置和渲染管线中同样表现良好则说明策略没有过拟合到训练环境的特定数值特性。具体操作是将训练好的策略网络导出为 ONNX 格式加载到MjInfer推理类中。该类构建了一个独立的 MuJoCo 仿真循环每个decimation步收集一次观测、调用 ONNX 推理、应用动作滤波和电机速度限幅、将目标位置写入仿真控制输入。如果机器人在这个独立环境中能稳定行走数十秒而不摔倒就可以有较高信心将其部署到实机。为什么这一步骤重要因为不同物理引擎对接触动力学的处理差异巨大。训练环境MJX使用 JAX 编译优化的向量化步进与标准 MuJoCo C 库的数值行为可能存在微小差异浮点精度、积分步长舍入等。如果策略恰好利用了这些数值特性如依赖特定的接触穿透量来获得反弹力则 Sim2Sim 会暴露这一问题。5. 实机部署5.1 部署架构策略从训练到实机运行的完整路径如下5.2 实时推理循环的工程细节实时控制循环是部署阶段最关键的软件组件。在 Open Duck Mini v2 的 Runtime 代码中该循环以严格的 100 Hz 频率运行每个周期内完成传感器读取、推理计算和执行器指令发送。传感器读取阶段主控通过 I2C 总线从 BNO055 获取当前的角速度和加速度数据约 0.5 毫秒同时通过 UART 串行总线向所有舵机广播位置查询指令并收集回复约 1-2 毫秒。由于串行总线是半双工的舵机的读取和写入不能同时进行这对时序管理提出了要求。推理阶段调用 ONNX Runtime 的推理接口将观测向量输入策略网络获得动作输出约 2-3 毫秒。策略网络的结构是一个简单的多层感知机MLP通常由 3-4 层全连接层组成隐藏层宽度 128-256 个神经元。这一结构的参数量仅为数万级别确保在低算力平台上也能快速推理。动作后处理阶段应用低通滤波器平滑策略输出避免高频抖动损伤舵机齿轮并施加电机速度限幅确保目标位置的变化率不超过舵机的物理极限速度。最终的目标位置通过串行总线以同步写入指令Sync Write的形式一次性发送给所有舵机。时序对齐阶段计算本周期剩余时间并精确睡眠至 10 毫秒边界保证控制频率的稳定性。如果某一周期因异常原因超时如 I2C 通信重试系统会跳过等待直接进入下一周期同时记录告警日志。5.3 安全保护机制实机部署必须包含硬件安全保护逻辑防止策略输出异常指令导致机械损坏或人员伤害。Open Duck Mini v2 实现了以下保护层第一层是关节角度限幅。每个关节都有预设的物理极限角度范围策略输出经过限幅后才发送给舵机。即使策略在某些异常输入下输出极端值也不会超出机械安全范围。第二层是姿态看门狗。IMU 持续监测躯干倾斜角度当横滚或俯仰角超过阈值通常 60 度时系统判定机器人已失去平衡立即切断所有舵机使能信号使舵机进入无力矩状态自由落体比继续施力安全。第三层是通信超时保护。如果主控在连续多个周期内未能成功与舵机通信总线故障或接触不良系统同样执行紧急停止。6. 与同类项目的技术对比6.1 方法论层面的对比将 Open Duck Mini v2 放在双足机器人开源生态中审视可以更清楚地看到其技术定位技术维度Open Duck Mini v2bipedal-robot达妙NanoLoongTinkerroboto_originRoboParty步态学习范式模仿学习规划器参考参考曲线法正弦模板行为约束法NP3O对抗模仿学习AMP仿真器MuJoCo Playground (MJX)Isaac Gym (PhysX 4)Isaac Gym (PhysX 4)Isaac Lab (PhysX 5)硬件成本约 $400中等DM 电机较贵 15,000 RMB中等执行器类型廉价串行舵机高质量无刷电机中端无刷电机高质量无刷电机是否需要执行器辨识必须BAM不需要不需要不需要可学动作种类仅行走仅行走多种走/站/跳/舞多种走/跑/跳/舞/拳部署推理格式ONNXONNXTVM AOT (.so)ONNX从这张对比表可以看出 Open Duck Mini v2 的独特位置它是唯一一个使用廉价舵机作为执行器的项目因此也是唯一必须进行精确执行器辨识的项目。这既是其最大的技术挑战也是其最有价值的技术贡献——它证明了即使使用 12 美元的消费级舵机通过正确的建模和辨识方法也能实现可靠的双足行走。6.2 为什么不同项目选择不同的方法理解各项目的方法论选择需要回到其设计目标Open Duck Mini v2 的目标是400 美元复刻 BDX 步态——只需要学会一种特定风格的行走像迪士尼 BDX 那样摇摆因此使用规划器生成精确的参考运动、然后让策略跟踪这一参考是最高效的路径。达妙 bipedal-robot 的目标是教学演示 sim2real 全流程——需要最简单可理解的方法因此选择正弦模板法。…详情请参照古月居