
1. 项目背景一只鸭子凭什么刷爆机器人圈Microduck 最近在机器人学习圈子里火得有点离谱。GitHub 上 star 涨得飞快Twitter 上做 RL、机器人操作、仿真迁移的人都在转连一些做嵌入式硬件的老哥都跑来围观。一只 399 美元的机器鸭为什么能引起这么大的动静先说结论Microduck 不是一个硬件玩具而是一套完整的 Sim2Real 学习系统。它的核心意义在于用极低成本的硬件平台把从仿真训练到真实部署的全链路打通了而且在开放程度和可复现性上做得非常彻底。过去这类工作通常出现在顶级机器人实验室里硬件成本动辄几万美元代码和训练细节还经常藏着掖着。Microduck 直接把价格打到 399 美元代码开源训练管道完整开放这就等于把 Sim2Real 研究的门槛砸碎了一大截。我看完它的技术报告和代码仓库之后最大的感受是这东西看起来是一个鸭子外形的桌面机器人但骨子里是一套设计得非常讲究的 sim-to-real 工程化方案。它解决的不是让鸭子动起来这种简单问题而是如何让一个在仿真环境里学会的技能迁移到真实物理世界依然表现稳定这个机器人学习领域的核心难题。适合谁来参考我觉得有三类人收获最大做机器人强化学习的同学尤其是被 sim-to-real gap 折磨过的人想入门操作类 RL 任务、但被硬件成本劝退的研究者和工程师做低成本机器人产品的团队想了解如何用仿真训练替代大量人工示教就算你是做软件出身、对机器人不太熟这篇文章也可以帮你理解为什么仿真训练这么难落地、以及低成本硬件如何改变这个局面。接下来我按自己的理解把 Microduck 这套系统一层一层拆开讲。2. Sim2Real 到底难在哪为什么仿真里学会的东西一到现实就翻车在聊 Microduck 的具体设计之前有必要先搞清楚 Sim2Real 的本质困难。因为你不理解这个就看不懂 Microduck 里那些设计决策到底在解决什么问题。**Sim2Real从仿真到现实**是指让机器人在仿真环境里通过强化学习等算法学会某个技能然后把训练好的策略部署到真实机器人上执行。听起来很美好但实际情况是——仿真里跑得好好的策略一到真机上就各种抽风。问题主要出在仿真环境和真实世界之间存在偏差这就是大家常说的sim-to-real gap。具体拆开看偏差来源有三类第一类是物理参数偏差。仿真器里设置的摩擦系数、质量、惯性矩、电机力矩响应跟真实硬件不可能完全一致。比如你仿真里设的鸭子腿部关节摩擦是 0.3真实电机的减速箱里可能因为温度不同、润滑油状态不同实际摩擦在 0.2 到 0.5 之间波动。策略在仿真里习惯了 0.3 的摩擦到真机上碰到 0.5 的摩擦动作就会迟钝甚至卡死。第二类是观测偏差。仿真里传感器读数是理想化的真实传感器的噪声、延迟、量化误差都是仿真里很难精确建模的。比如 Microduck 使用关节编码器反馈角度真实编码器有分辨率限制和采样噪声仿真里如果不把这些加进去策略会对角度值过度敏感。第三类是动态特性偏差。电机和驱动器的动态响应在仿真里往往被简化成理想力矩源但真实的直流电机有电流环响应延迟、PWM 死区、电压饱和等问题。高频动作在仿真里没问题真机上可能直接造成电机过流保护或者发热严重。这就是为什么很多人在仿真里训练了上千万步、拿到了 99% 成功率一上真机就掉到 20%。不是训练代码写错了而是策略过拟合到了仿真环境的具体参数上。解决 Sim2Real gap 的主流手段目前有三大流派域随机化Domain Randomization在训练时不断随机化仿真环境的物理参数、观测噪声、延迟等让策略见识各种可能的情况从而学会对参数变化鲁棒的策略。这个思路通俗讲就是练的时候别太舒服什么天气都让它在里面跑一遍。系统辨识System Identification精确测量真实硬件的物理参数尽量让仿真模型贴近真实。这个方法在动力学比较简单的系统上效果不错但复杂系统很难测准所有参数。仿真到现实的二次适配比如在仿真里训练后用真实数据做微调或者用元学习让策略天生就具备快速适应新环境的能力。Microduck 选择的路线非常明确以域随机化为主结合系统辨识做基础物理参数的校准。它在低成本硬件上的成功恰恰说明这套组合拳如果打得好完全可以让一个 399 美元的机器人在真实桌面上走出稳定步态。这也解释了为什么 Microduck 被称为Sim2Real 教科书——它几乎把这一类方法的每个环节都做成了标准示例仿真搭建怎么做、参数怎么随机化、奖励怎么设计、策略怎么部署都有清晰可查的代码和文档。3. 为什么是 399 美元的机器鸭硬件选型的门道聊完痛点来看硬件。399 美元这个价格在机器人学习领域确实属于低得离谱的级别。一台常见的四足机器人比如 Unitree Go1要一两万人民币一只机械臂更是几万起步。Microduck 选择了机器鸭这种双足步行形态明显是有意为之。机器鸭本质上是一个双足机器人外形参考鸭子走路的姿态有那种摇摇晃晃的感觉。它和四足机器人相比稳定性挑战更大——四足天生有更大的支撑多边形不容易倒双足则在静态和动态稳定性上都有天然难度。而 Microduck 还要做出鸭子那种左右摇摆的步态这算是主动给自己上难度了。从 Sim2Real 学习的角度来看双足步态恰恰是比较理想的训练任务因为它对动力学精度和策略鲁棒性都很敏感。如果训练出的策略能在双足鸭子上稳定行走那说明这个 sim-to-real 管道是可验证的不是只有在理想化任务上才能伪装成功。硬件配置方面我看了拆解信息大概是这样部件规格推测作用主控低成本的 ARM 开发板类似树莓派级别运行推理和控制系统电机多路小型直流减速电机成本极低驱动鸭子的腿部关节伺服驱动单路 PWM 驱动无高级力矩控制输出电机控制信号传感器关节编码器反馈角度提供状态观测电源小型锂电池组供电支持离线自主运行机身3D 打印外壳和结构件低成本制造和替换从这套硬件方案能看出几个关键设计思路第一个思路是计算单元和电机控制分离。策略推理在高性能的 ARM 开发板上完成电机控制由独立的驱动板实现。这样策略代码可以相对复杂一些不必压缩到嵌入在主控里的单片机级别。代价是控制频率不可能太高但双足步态这种任务控制频率在几百赫兹以下已经够用。第二个思路是电机和关节直接映射。Microduck 大概率没有复杂的连杆机构和差速器电机轴直接带动关节这让动力学建模变得非常简单。仿真里的模型可以直接用刚体加关节力矩实现不需要考虑齿轮传动间隙等非线性因素。第三个思路是模块化和可替换性。3D 打印机身意味着零件坏了可以重新打印这对实验调参过程中频繁摔坏机器人来说非常友好。我在实验室里调试机械臂的时候一个零件撞坏了往往要等重新加工非常磨人。Microduck 的 3D 打印方案直接解决了这个问题。这里有一个容易被忽视的点硬件选型决定了域随机化的参数空间设计。因为电机没有高级力矩控制Microduck 只能走位置/速度控制模式这意味着仿真里需要重点随机化的是关节角度跟踪精度、电机响应延迟、输出力矩上限等参数而不是力矩控制相关的参数。硬件成本低的同时也限制了一些控制方式的尝试但作为 Sim2Real 学习项目这个 trade-off 完全值得。有一点必须提醒399 美元是物料成本还是套件价网上说法有出入但不管哪种口径跟实验室研究平台相比都便宜了一个数量级。这个价格让一个本科生、甚至有兴趣的高中生都有可能买一台来做实验——这在两年前是很难想象的场景。4. 训练管道拆解Microduck 的 Sim2Real 全链路Microduck 最有价值的资产其实不是那个小鸭子硬件本身而是完整的训练代码和仿真环境。我花了不少时间把它的管道从头到尾梳理了一遍大致流程是这样的4.1 仿真环境搭建用 Isaac Gym 做大规模并行训练Microduck 的仿真训练基于 NVIDIA 的 Isaac Gym。Isaac Gym 的特点是支持 GPU 大规模并行一次性可以跑数千个并行环境训练效率比传统 CPU 仿真高好几个数量级。为什么这个选择很关键因为域随机化需要在大量不同的环境下训练同一个策略如果没有 GPU 并行训练时间会被拉长到完全不可接受。举个例子假设你只开 1 个仿真环境跑 1000 万步需要多少时间按每秒 1000 步算要将近 3 个小时。但如果你并行开 4096 个环境同样 1000 万步只需要 20 多分钟而且是所有环境共享一次策略更新。这就是 Isaac Gym 这类工具的核心价值。在仿真建模上Microduck 使用了刚体动力学模型。从代码仓库看模型是通过 URDF 文件定义的包含鸭子的机身、腿部结构、关节约束和惯性参数。URDF 是 ROS 生态的标准机器人描述格式Isaac Gym 直接支持加载所以这个环节相对标准。但这里有一个很活的细节仿真的刚体模型是基于 3D 打印原型的几何和材质推测出来的。打印件的质量和惯量跟 CAD 模型有偏差所以作者做了系统辨识的校准。常用的做法是单独测每个部件的质量估出质心位置然后把惯量参数填入仿真模型。不用特别精确但关键参数不能差太多否则域随机化的范围会覆盖不过来。4.2 动作空间和观测空间设计Microduck 的动作空间设计非常有讲究。我看仓库里的配置它选择的是关节目标位置target position外加一个增益控制作为动作空间而不是直接输出关节力矩。这意味着策略学的是期望关节走到什么角度而不是期望关节输出多少力。这样做的好处是位置控制天然具备更强的鲁棒性。位置控制对电机参数的不确定性没那么敏感因为 PID 闭环会主动修正误差。如果策略直接输出力矩那摩擦力、电机力矩常数、减速比这些参数的精确度就极其关键稍微偏差策略就会失效。这里的代价是位置控制上限不如力矩控制高。如果未来想学非常精细的操作任务比如抓取鸡蛋位置控制可能不够灵活。但对于鸭子走路这种任务位置控制的稳定性远大于灵活性上的牺牲。观测空间方面Microduck 的策略输入包含鸭子身体的俯仰角pitch和横滚角roll由 IMU 提供关节角度和角速度由编码器反馈计算上一时刻的动作值用于平滑控制可能还包含一些任务相关的参考信号比如目标速度或目标转向角度这里要特别提一下动作平滑的处理。很多新手在 RL 训练时忽略了动作平滑结果训练出的策略输出剧烈抖动。对于真机来说这种抖动会直接转化为电机的激烈来回摆动轻则磨损电机重则直接过热保护甚至烧毁驱动器。Microduck 在训练时加入了动作平滑项限制相邻时间步的动作变化幅度。这个技术在 sim-to-real 实验里几乎是标配但很多入门教程不说导致很多人复现时只学了训策略而没学训稳定策略。4.3 域随机化参数的设置经验域随机化是 Microduck 能够成功迁移的核心魔法也是很多人最容易忽视或者设置不当的地方。从代码仓库看到的随机化项主要包括物理参数随机化摩擦系数在一个区间内均匀采样质量可以在标称值的 50%-150% 之间变质心位置有少量偏移电机增益也有波动区间。观测噪声和延迟给 IMU 读数加高斯噪声给关节编码器加量化误差控制指令的延迟也做了随机化。初始状态随机化每轮 episode 开始的时候鸭子的初始位姿会有随机扰动这样策略不能在完美站立的起点上过拟合必须学会在不太理想的初始状态下也保持平衡。控制频率随机化模拟真实控制频率波动让策略不要依赖精确的控制周期。仿真器参数随机化连仿真器的时间步长、求解器迭代次数都做了随机这属于比较细节但也比较有效的做法。有一点我印象很深域随机化的范围不是越大越好。之前我自己做实验的时候觉得随机化范围拉满肯定更鲁棒结果训练出来的策略在仿真中表现反而更差因为任务难度被随机化范围撑得太大了策略学不到一个有效的平衡点。Microduck 的做法更理性先通过系统辨识把仿真模型的标称参数校准到和真实硬件接近然后再在这个基础上做适度范围的随机化。随机化覆盖的是不确定性的边界而不是代替精确建模。用一个比喻来说域随机化就像你练投篮的时候故意在刮风天、雨天、逆光条件下都练这样比赛的时候不管什么天气都能投进。但如果训练条件是台风天你连球都拿不稳还练什么投篮。先建模建准再随机化扩大鲁棒性这才是正确的顺序。4.4 奖励函数设计的核心思想Microduck 的奖励函数设计也是教科书级别的。它的整体设计遵循了稀疏任务奖励 密集状态引导的混合结构。主要奖励项包括前进速度奖励鸭子的实际前进速度接近目标速度时获得奖励这是任务的核心目标。这里的微妙之处在于如果只看前进速度策略可能会发展出奇怪的滑动步态而不是类的行走步态。所以通常还需要引入方向约束让速度投影到期望的前进方向上而不是只看合速度大小。姿态稳定奖励身体保持直立、俯仰横滚角接近零时给奖励否则给惩罚。这个项保证了走路过程中不会东倒西歪。关节限制惩罚关节角度超出机械极限时惩罚。3D 打印的关节如果被打到极限轻则卡死重则直接断裂。这个惩罚项在真机长时间运行中特别重要。能量消耗惩罚动作幅度和力矩输出过大时惩罚。低功耗设计让电池能撑更久同时也减少了电机发热。动作平滑惩罚相邻时间步动作差过大时惩罚防止抖动。存活奖励每一步活着都有一点微小的正奖励鼓励策略尽量避免摔倒。这些奖励项的权重设置在具体的训练配置里都有默认值。但我想强调一个实操经验奖励权重的调节不要一上来就追求面面俱到先把核心任务奖励调出来让策略学会往前走然后逐步增加约束项否则策略会被各种惩罚项压制得动不了。Microduck 的仓库配置里应该有相对合理的初始值直接跑通应该问题不大但你要做自己的任务一定要学会这套先任务、后约束的调参顺序。4.5 训练策略算法PPO 依然是主力讲到训练算法Microduck 用的是PPOProximal Policy Optimization。虽然学术界这几年出了很多新算法但 PPO 在机器人控制任务里依然是事实标准因为它稳定、调参友好、对超参数不那么敏感。PPO 算法的核心思想是在每次策略更新时限制更新的幅度不会因为某批数据里的极端情况而做出剧烈的策略改变从而保证了训练过程的稳定性。通俗讲就是小步快跑——进步可以慢但方向要稳。具体的数据管道大致是模拟器生成经验数据把观测、动作、奖励、状态价值估计存到 buffer 里然后 PPO 用这批数据做多轮 mini-batch 更新更新结束后继续用新策略在环境中采样数据。不断循环。从训练时间来看以 Isaac Gym 的并行能力一个默认配置的 Microduck 策略在像 RTX 3090 这样的 GPU 上可能几个小时就能训出一个不错的步态。CPU 训练的话就非常痛苦了我建议有条件的朋友至少搞一张能跑 GPU 的卡别折磨自己。训练完成后策略会被导出成一个轻量模型文件。真正部署到鸭子上的时候做的推理非常轻量——一个多层感知机MLP网络输入尺寸也就是几十维前向推理每次只需要不到一毫秒。所以在 ARM 开发板上跑起来完全没压力不需要额外的硬件加速器。5. 实操过程中的坑与解法从仿真到真机的最后一公里这部分是我自己平时做 sim-to-real 项目时最头疼的部分也是我认为 Microduck 这类开源项目最有参考价值的地方。仿真训练成功只是起点从训练好的策略到真机上稳定跑起来中间有大量细节需要处理。5.1 真机部署的系统结构Microduck 的运行架构大概是这样的ARM 主控负责跑策略推理周期性地读取传感器数据、构造观测向量、输入给策略网络、输出关节目标位置然后把目标位置发给底层控制器。底层控制器执行位置闭环控制驱动电机转动。这个架构里最关键的参数是控制频率。仿真里训练的频率需要和真机部署保持一致否则策略对时间间隔的假设就失效了。比如你在仿真里用 50Hz 的控制频率训练真机部署时就得想办法稳定在 50Hz 左右。如果真机跑不到这个频率或者频率波动很大策略性能会显著下降。Microduck 在训练时做了控制频率随机化就是为了应对真机上主控负载波动导致的频率不稳定。这个细节很多人会忽略但在实际部署中经常是导致 sim-to-real 失败的隐形杀手。5.2 仿真到真机的模型转换训练好的 PyTorch 策略模型在真机上部署时有两种主流方案直接在 ARM 主控上用 PyTorch 跑推理。优点是简单直接不用做模型转换缺点是依赖 PyTorch 运行环境内存占用和启动时间都偏大。把模型转换成 ONNX 格式或者 TensorRT 模型用推理引擎部署。优点是运行效率更高启动更快缺点是转换过程可能有算子兼容性问题。Microduck 的仓库提供了导出脚本我建议你按照脚本走一遍。如果遇到算子不被支持的情况比如某些激活函数或自定义层先检查一下是否把模型里的自定义操作替换成了标准算子。多数情况下MLP 网络转换都非常顺利不会有太大问题。5.3 真机调参的独家心得这部分我觉得是全文最有价值的内容。我在多个 sim-to-real 项目里踩过不少坑分享一些针对低成本机器人的调参心得**第一个心得先确认硬件的原生能力如何再期待策略表现。**做真机实验之前先把电机的响应特性摸个底。比如你设定一个目标位置看实际到达需要多长时间、跟踪误差有多大。这个数据对调整仿真里的电机增益参数非常有帮助。我一直觉得仿真和真机的差距很大程度上在电机这一环就决定了。Microduck 做系统辨识也是从这个角度出发的。**第二个心得训练时加一点故意找茬的物理扰动。**比如在仿真里偶尔给鸭子一个横向推力或者在随机位置放一个小障碍物。这样策略学会的是应对意外状况而不是在完美条件下行走。Microduck 的随机化项里应该有类似的设计但如果你自己搭任务记得主动加上。**第三个心得一到真机上先把安全措施做好。**最简单有效的方式是给鸭子挂一个牵引绳这样它即使摔倒也不会摔坏。我还建议在代码里加一个跌倒检测逻辑如果 IMU 检测到长时间非直立姿态就立即停止动作并恢复待机姿态。没有这些保护你可能一台鸭子摔几次就要重新打印零件了。**第四个心得真机实验要留出足够的玄学余量。**即使你的仿真训练成功率是 99%真机上第一次跑可能还是会有各种意想不到的问题——地面材质不同、光线影响如果用了视觉传感器、电池电压波动导致电机力矩下降。不要指望一次成功实验本身就是个迭代过程。我做过一次双足实验仿真里 98% 成功率真机前 20 次试验全部摔倒后来发现是仿真里设置的步态频率在真机上超出了电机带宽——这种问题在仿真里几乎不可能发现。5.4 常见问题速查表根据 Microduck 社区和类似项目的经验我把常见问题整理成一张表方便遇到问题的时候快速对号入座问题现象可能原因解决方法仿真里策略很好真机上完全站不住电机响应比仿真慢很多校准电机的实际响应延迟降低控制频率期望真机上走几步就摔倒摩擦系数比仿真低脚底打滑增大训练时的摩擦随机化范围或给脚底加防滑垫真机上关节抖动明显训练时没加动作平滑惩罚策略输出抖动在奖励函数里加入平滑惩罚并重新训练动作幅度不敢做大走得很慢能量惩罚权重过大降低能量惩罚或改为稀疏惩罚只惩罚超限真机电池掉电很快电机频繁加减速、堵转检查是否动作频率太快加入动作低通滤波打印件有咔咔异响关节位置可能超限检查关节角度限制惩罚是否生效加软件限位每次实验结果都不一样电池电压、地面材质、打印公差做多次实验取统计结果保证测试条件标准化6. Microduck 带来的一些思考Sim2Real 研究的门槛真的降下来了聊完技术细节我想说说这个项目更深层的意义。Microduck 最大的贡献不是鸭子的外形也不是 399 美元这个数字而是一种可负担的 Sim2Real 实验范式。过去做 sim-to-real 研究基本是大型实验室的专属游戏——硬件贵、算力要求高、实验周期长。Microduck 把成本和控制难度都降到了个人开发者可以承受的范围这意味着什么呢意味着强化学习社区里那些有能力、有意愿但缺乏资源的人现在可以真正动手做了。学生可以用它做课程项目业余爱好者可以用它验证新想法独立开发者可以探索机器人产品的快速原型。这个群体的加入会让相关方法的迭代速度比以前快得多。另外Microduck 在开源精神上也值得点赞。训练代码、仿真配置、部署脚本都开放了甚至连系统辨识的方法论都作为文档写清楚了。这正是国内很多项目和团队最应该学习的地方。我一直觉得一个项目的价值不只是它自己跑通了什么而是它能让多少后来者在它的基础上继续往前走。从技术路线上看Microduck 选的方案不是最前沿的没有模型预测控制MPC、没有视觉基础模型、没有大规模强化学习基础设施。它用的都是成熟技术Isaac Gym、PPO、域随机化。但它把这些成熟技术组合得非常扎实而且完整地暴露了所有工程细节。把正确的事情重复做到位比研究新概念更具社会价值。这也是为什么我愿意把它叫教科书。7. 如果你想复现/上手几条面向不同基础的建议Microduck 对不同的人上手的路径是不一样的。我给几个分级建议完全没接触过 RL 和机器人的人先别买硬件。第一步是用电脑跑通仓库里的仿真训练脚本理解任务定义和奖励函数。等你能让仿真里的鸭子走出稳定步态了再考虑硬件的事。这一步最大的门槛是配置 Isaac Gym 环境多看看官方文档。做强化学习、但没做过真机的人建议直接按仓库的教程买套件。训练阶段对你来说不难难点在真机部署。建议严格按照官方文档部署一遍流程然后把注意力放在我上面讲的那些工程细节上控制频率、延迟、观测对齐。真机上的每一步都是增量体验。做嵌入式/机器人硬件、但对 RL 陌生的人可以把重点放在仿真部分。了解域随机化和 PPO 的基本原理尝试修改变量观察步态变化。你会发现很多看似高深的控制表现其实就是一堆简单数学规则的组合。做产品落地的人可以重点研究它的硬件选型逻辑和系统架构。如果你想做一个消费级的小机器人产品Microduck 的成本结构和技术选型是一个非常有参考价值的起点。我个人最推荐的实操路径是先花一天把仿真训练跑通然后花一天做真机软硬件对接最后留一周调真机稳定性的坑。这个时间安排是经验之谈——仿真环节如果配置顺利其实很快真正的坑全在真机那一环。8. 最后一句话别等完美平台先用手边的东西跑起来最后我想说一点个人的感受。这几年看着机器人学习领域发展有一个明显的趋势做研究不再需要顶级实验室的硬件资源了。像 Microduck 这样的项目给出了一个很好的示范——用一个几百美元的机器鸭子配上一套严谨的 Sim2Real 方法照样能做出有说服力的实验让很多之前停留在纸面上的想法有了落地验证的机会。我在实际调试低成本机器人时最深的体会是别纠结于硬件的性能上限把精力花在建模准确性和仿真设计的严谨性上小平台一样能验证核心问题。Microduck 的仿真管道、随机化参数、奖励设计这些细节完全可以迁移到其他形态的机器人上。换一对腿、换个机身、加个机械臂底层方法大同小异——这大概就是它作为教科书最大的价值所在。如果你手头已经有适合做 sim-to-real 验证的小机器人哪怕不是机器鸭也建议装上这套训练方法试试。方法本身的价值往往比一个具体形态的硬件更持久。