2026/10/23 1:28:57

开源双足机器人Microduck:硬件选型与步态控制

开源双足机器人Microduck:硬件选型与步态控制 头一回在小区里看见有人遛狗不稀奇如果看见有人遛着一只摇摇晃晃的机器鸭那确实能引来不少围观。今天要聊的就是这个开源双足机器鸭 Microduck。它不是玩具店里那种按一下走两步的电动鸭而是一个能自己保持平衡、迈腿走路、甚至完成简单避障的开源双足机器人平台。上街遛鸭听起来很欢乐但背后涉及硬件选型、步态算法、姿态闭环、户外适应性等一系列工程问题。这篇文章想做一份比较完整的深度解析兼顾想入门双足机器人的新手和已经玩过几台机器、准备进阶改造的老玩家。1. 项目整体设计与思路拆解1.1 为什么是双足鸭型机器人做机器人最容易上手的是轮式底盘四个轮子加两个电机就能跑几乎不用考虑平衡。双足机器人则完全不同它天然就是一个不稳定系统要在每一步落地与抬脚之间不断调整重心这既是难点也是乐趣所在。Microduck 选择双足而不是四足或轮式出发点很简单想用最低成本让大家理解“双足步态到底是怎么回事”。很多人第一次看到双足机器人时第一反应是“它怎么不会倒”。这就是双足控制的核心命题。为了让这个命题更有趣项目组把外壳做成鸭子造型本质上是在用一个讨喜的外观降低入门心理门槛。鸭子的尾巴和宽脚掌还能充当配重和支撑比一个裸露的金属骨架更有亲和力。这种“外形服务功能、功能反哺外形”的设计思路在开源硬件项目里非常实用一个个人的毕设或者小作品也完全可以沿用。Microduck 这个名字也暗示了它的小体积整体高度大概在二十厘米上下桌面就能跑不需要专门的大场地。这部分和很多开源机械臂、开源小车不一样它更强调“随时拿出来玩”的场景。同时开源的意义在于你拿到的不是一台封闭成品而是原理图、外壳模型、固件源码、步态参数全开放的参考设计。这意味着你可以改脚掌大小、换舵机型号、调步态曲线最后变成一只属于你自己的鸭子。1.2 开源方案选型与整体架构Microduck 的整体架构可以拆成四个层次结构层、驱动层、控制层、应用层。结构层就是 3D 打印的鸭型外壳和腿部骨架驱动层是舵机及其供电线路控制层是一块带无线功能的主控板和姿态传感器应用层则是手机遥控、PC 端调试或者后续加装的各种传感器。这种分层设计有很现实的好处出现问题可以逐层排查不用一上来就怀疑整个系统。比如鸭子不走直线先看结构层左右腿是否等长再看驱动层舵机零位是否一致最后才去调控制层的步态参数。我自己在调试类似项目时最忌讳的就是把固件和硬件混在一起改改到后面根本不知道是哪里坏了。方案选型上Microduck 没有采用定制集成板而是选了市面上非常常见的模块化组件。主控板、舵机驱动板、 IMU 传感器模块、蓝牙/WiFi 模块全部独立。这样做看似线材多了但它的兼容性和可替换性极高。某天舵机烧了直接换一个同型号即可想升级主控也只需要改动少量固件适配代码。对于开源项目来说这种“模块化妥协”反而是最可持续的路线因为它降低了复制的门槛也让更多人能参与改进。2. 硬件核心与关键参数解析2.1 主控与舵机系统Microduck 的主控选型在同级别项目里最常见的是 ESP32。为什么是它而不是 Arduino Uno 或 STM32ESP32 有两个内置 Xtensa 处理器主频能跑到 240MHz处理步态解算和 PID 姿态闭环绰绰有余。更重要的是它自带 WiFi 和蓝牙后面做手机遥控、网页调试、甚至接入 ROS 网关都非常方便。Arduino Uno 虽然简单但算力和无线能力都偏弱STM32 性能强但上手门槛和调试成本对新手不友好。ESP32 是在“够用、便宜、无线、资料多”几个维度上最平衡的选择。舵机是整个鸭子最重要的动力来源。Microduck 每条腿有两个自由度髋关节负责抬腿和迈步膝关节负责小腿摆动。加上头部的一个舵机用于卖萌和转向辅助总共五个舵机。为什么是五个而不是六个少一个自由度可以减重、减功耗、减控制复杂度而且鸭子走路不需要太灵活的后肢两条腿各两个自由度加上头部辅助已经能走出比较自然的摇摆步态。舵机型号通常在 SG90 和 MG996R 之间选。SG90 是微型塑料齿轮舵机扭矩约 1.8kg/cm轻巧但容易扫齿MG996R 是金属齿轮舵机扭矩能达到 9.4kg/cm 左右抗冲击能力好很多。如果只放在桌面上跑SG90 够用如果你打算真的上街遛鸭户外路面不平、可能有小石子我强烈建议至少使用 MG996R 级别的舵机否则某个关节卡住时很容易扫齿报废。舵机扭矩和鸭子的体重、步幅直接相关一个简单的估算方式是单腿髋关节舵机需要的扭矩约等于整鸭重量乘以大腿长度再乘以一个 1.5 到 2 的安全系数。例如整鸭 0.8kg大腿长度 4cm扭矩需求大概是 0.8 * 4 * 1.8 5.76 kg·cm这已经超出 SG90 的承受范围所以上街遛鸭版建议直接上 MG996R。2.2 姿态传感器与电源系统双足机器人光靠“预设动作表”是走不稳的必须实时知道身体倾斜了多少这就要用到姿态传感器。Microduck 用的是常见六轴 IMU典型型号是 MPU6050内部集成了三轴陀螺仪和三轴加速度计。陀螺仪告诉你角速度加速度计告诉你重力方向。单独使用陀螺仪会有积分漂移单独使用加速度计会有高频抖动所以通常要做数据融合得到稳定且不漂移的横滚角和俯仰角。常见做法是 Madgwick 算法或 Mahony 算法输入原始六轴数据输出四元数再转成欧拉角。这套流程在开源社区里已经很成熟实际代码量不过几百行不建议自己从头写卡尔曼滤波。电源系统往往是被忽略的重灾区。五个舵机同时动作时的峰值电流可能到 2A 以上如果主控和舵机共用一个电源电压跌落会导致舵机无力、主控重启。Microduck 的参考设计通常会把舵机电源和逻辑电源分开18650 锂电池直接给舵机供电再通过一个低压差稳压芯片给主控和传感器供电。18650 单节标称 3.7V充满 4.2V正好适合两个串口舵机串联而且 18650 的放电能力比干电池强得多能扛住舵机启动瞬间的大电流。电池容量怎么选根据实测一个五舵机的鸭子正常行走时平均电流大约在 500mA 到 800mA上街遛鸭时频繁变速会更高一些。一颗 2000mAh 的 18650理论续航在 2.5 小时到 4 小时之间但实际受舵机堵转、路面阻力影响能连续走个把小时已经很不错。我建议出门遛鸭前准备两块备用电池并时刻关注电压降到 3.5V 左右就换电池因为低压下舵机扭矩明显下降鸭子很容易走着走着瘫下去。2.3 结构件与外壳设计Microduck 的外壳和骨架几乎全部来自 3D 打印推荐打印材料是 PLA。PLA 便宜、不易翘边、打印难度低作为机器人外壳足够。但要注意PLA 在夏天长时间阳光直射下会变软变形上街遛鸭时尽量选择阴凉时段或者在表面喷一层透明漆做保护。如果环境温度频繁超过四十摄氏度建议换成 PETG 材料韧性更好且耐热一些。重心设计是双足机器人最容易被新手忽略的地方。很多人打印完外壳、装上舵机后发现鸭子一站起来就往后仰。原因很简单电池和主控被安排在鸭背上重心太高。Microduck 的优势在于鸭型外壳内部有较大空腔可以把电池尽量往下放贴近鸭肚子位置。实在不行就在脚掌内部添加配重块降低整体重心。重心越低姿态闭环需要补偿的力矩就越小舵机负担也越轻。脚掌尺寸同样关键。脚掌太小会导致支撑面小站不稳脚掌太大虽然稳但迈步时容易绊到另一条腿。参考做法是脚掌长度约为大腿长度的 70% 到 80%宽度略大于身体宽度的一半。另外脚掌底部可以贴一层硅胶垫或防滑胶带这能显著提升在瓷砖和柏油路面上的抓地力。我实测下来没贴防滑垫前在室内瓷砖上打滑明显贴了之后稳定性提升了一个档次。3. 软件与控制算法实现3.1 步态规划与控制双足走路的本质是“受控的摔倒”。你先把重心移到一条腿上另一条腿抬起来向前甩然后身体重心再落到前脚循环往复。对于 Microduck 这种静态稳定步态控制节奏比控制力矩更重要。也就是说不需要做像波士顿动力那样复杂的动态步态规划只需要在合适的时间切换支撑腿并在切换时让身体倾斜方向缓慢变化就能走出相对自然的鸭步。具体到代码实现常见做法是“步态周期 相位偏移”。定义一个步态周期 T然后两条腿的动作分别是正弦波或者梯形波髋关节角度按相位差 180 度控制膝关节配合髋关节做弯曲。比如leftHip swingAmp * sin(2 * PI * t / T) rightHip swingAmp * sin(2 * PI * t / T PI)这样左右腿就会交替摆动。关键参数是摆动幅度 swingAmp 和周期 T。幅度太大容易让鸭子摔倒太小则步幅不足。实测参数范围通常在 20 度到 40 度之间周期大约在 0.6 秒到 1.2 秒。初学者可以先从周期 1 秒、幅度 25 度开始配合重心微调再一点点加快。不过只靠这部分代码鸭子走不了直线。因为每个舵机的响应速度、机械误差都不一样左腿和右腿实际动作可能差那么一两度走路就会偏。所以需要一个简单的方向校正环路在每一帧控制中加入 YAW 偏移量当检测到鸭子偏航时给左右髋关节叠加相反的补偿角度。换句话说把“走直线”这个任务简化成一个非常粗糙的航向 PID能用但不够好。这也是为什么下一步要引入姿态闭环。3.2 姿态闭环与自动纠偏姿态闭环是 Microduck 能不能站稳的关键。典型控制框架是IMU 测量出当前的横滚角 p和俯仰角 q与期望姿态角通常接近 0 度做差通过 PID 控制器计算出髋关节和膝关节的修正角再叠加到步态角度上。这样即使身体在行走中发生了倾斜控制器也会在下一次步态指令中自动调整腿部角度让身体回到中位。我在实际测试时感受最深的是几乎没有一组 PID 参数能一次调好。建议调参步骤是先关闭步态只让鸭子原地站立调 P 的大小让身体能快速回正但不震荡然后加一点 I 消除静态偏差最后加很小的 D 增加阻尼。每一步都要观察 30 秒以上不要看到鸭子没倒就觉得调好了还要看它是否在持续小幅度抖动。如果整个机器人都在高频震动通常是 P 太大或 D 太小。倒地检测和起立策略也是双足机器人的必修课。Microduck 可以借助鸭型外壳实现一种比较聪明的复位方式当 IMU 检测到姿态角超过 45 度并持续一秒判定为倒地然后控制腿部执行一个“翻正”动作——把两条腿都收到身体下方通过摆动骨盆让鸭身翻滚回站立姿态。听起来简单但实际操作中腿部结构必须能承受几次翻滚冲击所以前面提到金属齿舵机在这种场景下优势明显。3.3 遥控与自主模式Microduck 的默认控制方式通常是手机或 PC 通过蓝牙连接主控板。ESP32 上跑一个简单的 BLE 服务接收方向指令和速度指令再通过串口把指令传给控制线程。为了让界面更好用很多开发者会用网页方式在局域网内打开一个 HTML 页面用虚拟摇杆发送 UDP 数据。这类项目的好处是跨平台手机电脑都能控制不用安装 App。除了遥控Microduck 还支持自主巡线或避障。常见方案是加装一个超声波传感器 HC-SR04安装在鸭头前方距离小于三十厘米时自动减速或转向。这里要注意传感器的安装高度和角度最好和地面平行避免测到地面反射波导致误判。状态机的设计也比较简单遥控模式、自动避障模式、摔倒恢复模式三个状态切换用按键或手机指令触发。如果想进阶一点可以用 ESP32 的 WiFi 连接 MQTT 服务器在电脑端实时记录鸭子的姿态数据和步态参数甚至让鸭子定时巡逻。这个能力的上限完全取决于你的想象力但基础框架始终是“步态发生器 姿态闭环 无线指令”把这个三角吃透后续加摄像头、加机械臂、加语音控制都只是锦上添花。4. 从桌面到上街遛鸭实操指南4.1 基础调试与安全设置上街遛鸭之前务必先在室内把基础调试完成。第一步是舵机零位设置给每个舵机供电用一个小程序把舵机转到 90 度位置然后安装舵机臂和腿部连杆确保左右两条腿初始姿态完全一致。这里有个很容易踩的坑如果舵机臂在安装时偏了几度传感器角度和实际行走角度就会不一致姿态闭环再怎么调都救不回来。第二步是限位保护。双足机器人的关节活动范围有限如果没有软件限位舵机在极端情况下会一直往前顶导致齿轮卡死甚至舵机损坏。在固件中给每个关节定义一个安全角度范围例如髋关节只能在 -45 度到 45 度之间运动超出范围就拒绝执行。这一步非常关键尤其是自动避障撞到障碍物时舵机很容易被外力堵转有限位保护可以降低损坏概率。第三步是电量管理和紧急断电开关。在鸭屁股上装一个物理按键开关能够直接切断舵机电源这比在手机软件上断电可靠得多。一旦鸭子失控你按一下开关就能让它立刻趴下避免它跑到马路上发生意外。我出门遛鸭时一定会带一个便携移动电源不是为了给鸭子充电而是给主控和遥控设备应急补电防止手机没电导致失控。4.2 路面适应与步幅调整室内地板和室外柏油路的物理特性差异非常大。室内瓷砖摩擦小鸭子容易打滑室外柏油路面摩擦大但如果步幅太小舵机推力不足鸭子会在原地“小碎步”无法前进。所以上街前需要针对不同路面重新调整步态参数。在柏油路面上建议把步态周期缩短到 0.8 秒左右摆动幅度增加到 35 度这样每一步的用力更果断不容易被路面阻力卡住。在草地或沙地上阻力更大建议使用较小步幅和较慢周期宁可走得慢也要让每一步都能踩实。这里的判断标准是观察鸭子的俯仰角变化如果每走一步身体都在前后摇晃超过 10 度说明步幅和周期不匹配需要调小幅度、加快周期。还有一个被忽视的参数是“抬脚高度”。很多双足步态算法默认抬脚高度是 2 到 3 厘米在平地上没问题但室外遇到小石子或路沿这个高度不够就容易绊倒。增加抬脚高度的同时要注意膝关节舵机的扭矩抬脚越高需要的扭矩越大。如果舵机出现明显啸叫或者发热说明抬脚高度超出了硬件的承受能力。我的建议是给 Microduck 加一个小型“路况模式”循环在不同路面按下遥控器上的不同按键切换参数组而不是每次出门都重新编译固件。4.3 上街遛鸭注意事项上街遛鸭最大的问题不是技术是围观。第一次带鸭子出门我刚走到小区门口就围了一圈人有人蹲下来摸鸭头有人拿起手机拍视频。这种情况对鸭子本身没什么影响但作为操控者要格外注意不要让陌生人触碰鸭子的腿部关节尤其不要在鸭子站立时从侧面按压它那样很容易损坏舵机或外壳。可以准备一块小型围栏布或者警戒线在调试时把鸭子圈起来。同时要特别注意公共安全。鸭子毕竟是双足机器人一旦失控冲上公路非常危险。我在上街时把最大速度限制在 0.3m/s 左右并且始终保持鸭子在视线范围内。遇到台阶、斜坡、积水区域我一定会绕行因为 Microduck 的脚掌很小爬不了斜坡也怕水。虽然外壳是打印件但舵机和主控板并不防水一旦进水基本报废。下雨天和下雪天绝对不要出门遛鸭。还有一个实用的建议给鸭背或者鸭头装一个微型蜂窝网络定位模块成本也就几十块钱。这样即使鸭子跑丢或者被人快速拿走你也能通过手机定位找回。我在市集演示时就用这个方案心里踏实很多。出门前也养成检查所有螺丝和舵机臂的习惯室外振动会让某些螺丝松动长时间行走后关节间隙会变大这会直接导致步态失真和姿态传感数据出现异常。5. 常见问题与进阶玩法5.1 常见问题速查表现象可能原因处理方案鸭子站立时持续抖动PID的P值过大或D值过小调低P适当增加D走路偏向一侧左右舵机零位不一致或步态幅度参数不对称重新校准零位检查左右腿参数舵机啸叫或发热舵机堵转或负载过大检查关节是否卡滞降低抬脚高度蓝牙连接不上主控蓝牙未初始化或频道冲突重启主控在固件中增加重连机制走着走着突然倒地无法起来倒地翻正姿态算法不完善舵机力矩不足优化翻正动作升级到MG996R电压不足导致重启电源内阻过大或电池老化更换大放电倍率电池检查稳压电路外壳松动打印件公差过大或螺丝滑丝在接触面加垫片使用螺纹胶避障误判超声波传感器角度不对或受到噪声干扰调整传感器朝向增加滤波和置信判断这个表格是我在实际测试中总结出来的高频问题覆盖了从硬件、软件到环境的大部分异常。正常情况下按表格逐项排查绝大多数问题都能解决。如果解决了但现象复现那多半是某些机械件已经出现永久形变需要更换。5.2 进阶改造方向Microduck 的开源生态决定了它很适合折腾。第一个值得尝试的改造是加装摄像头模块比如 ESP32-CAM 或树莓派摄像头。你可以用摄像头做最简单的颜色追踪让鸭子跟着一个红色小球走。这听起来不算新鲜但放到双足平台上复杂度就提升了不少因为摄像头看到的目标和步态控制的坐标系之间有延迟和偏移需要做平滑处理。第二个方向是接入 ROS 或微型 ROS 平台让鸭子成为多机器人协同系统里的一员。通过 ROS 的话题通信你可以把鸭子的姿态数据发布出来其他机器人或者上位机就能实时监控。再进一步还能做一个简单的点云导航让鸭子在 5 米范围内自主规划路径。这项工作的核心在于把 Microduck 的步态控制和上层规划器解耦也就是说上层告诉鸭子“往 30 度方向走 1 米”而下层负责把这个指令转换成步态序列。第三个方向是外形和功能扩展。有人给鸭子加了一对翅膀里面藏了两个小舵机走路时翅膀会跟着摆动观赏性直接拉满。还有人在鸭嘴和鸭肚子里装了 LED 灯带夜晚遛鸭时分外醒目同时也能让行人提前看到它的运动轨迹。功能扩展最重要的原则是控制总重量每多一分重量舵机负载和电池消耗都会增大所以要尽量选择轻量化的扩展件。5.3 参与开源社区的正确姿势玩开源项目不只是拿来用更要学会反向贡献。Microduck 的仓库里除了源代码和 STL 模型通常还有一个 issues 区、一个讨论区和一份参数对照表。第一次跑通基础版本后我建议你做三件事第一把自己的配置文件和步态参数上传到仓库的示例目录这对其他人是非常宝贵的参考第二如果在某个路面上发现步态参数需要特殊调整可以提交一个针对该路面的参数建议第三发现问题时不要只提“坏了”而是附上主控日志、电池电量、舵机型号、外壳打印材料、环境温度和复现步骤这样维护者才能快速定位。我个人在实际操作中还有一个习惯每次修改完硬件或固件都会给鸭子拍一段带长度标尺的行走视频放到文档链接里。这样既能记录改进效果也能帮助后来者判断自己的鸭子是不是处于正常状态。开源社区最缺的不是代码而是可复现的实测数据和踩坑记录。最后再分享一个小技巧给 Microduck 加一个简单的语音提示模块在上电、低电量、倒地恢复时播放对应的提示音。这不仅让遛鸭过程更有趣也能在鸭子出问题时让你第一时间注意到。曾经一次在户外测试我全程盯着遥控器没发现鸭子已经因低电量自动停机直到听到语音提示才发现好在没有造成意外。小的细节往往能在关键时刻帮你省下大麻烦。