Microduck 机器鸭装配篇:15 个舵机 ID 和总线怎么接

2026-10-26 17:03:59 168阅读

零件到手之后,中间那一段最难受:打印件摊一桌,十五个舵机长得一模一样,线分不清哪根接哪根,电源接错就是几百块。这篇只写这一段:该买什么、打印件怎么准备、ID 怎么分、总线怎么串、电源怎么接、IMU 装哪儿朝哪儿、先装什么后装什么。刷镜像跑模型是后面那篇,算账是前面那篇。

动作和参数对着 AI-FanGe 的 Microduck-build-tutorial 核过,MIT 协议的装机教程,BOM、ID 表和接线图都在里面。另外几份只做交叉验证:kissqy 的飞特 HD1910 构建指南、fanhao375 的装配顺序与紧固件统计、ncnynl 的 OpenDuckMini 组装教程。它们没写的,这篇不写。

整机物理布局图,鸭形轮廓里标出头部、颈部、躯干三块各放什么,跨过颈部的只有舵机总线和电源两根线

该买什么:三样别换,其余都是通用件

清单不长。控制板 Raspberry Pi Zero 2 W 一块,跑控制程序、蓝牙手柄、Wi-Fi 和 SSH;舵机控制板 ROBOTIS OpenRB-150 一块,USB 挂在 Pi 上,专门跟舵机总线说话;舵机 XL330-M288-T 十四个,双腿十个、头颈四个;电池成品 6V 可充电包配一个开关;16GB 以上 microSD;IMU 用 BNO080、085 或 086 模块。剩下是打印件一套、M2 和 M2.5 自攻螺丝若干、Dynamixel 三芯线若干。

不能换的第一样是舵机型号:XL330-M288-T 走 Protocol 2.0 的 TTL 总线,OpenRB-150 和整套代码都按这个协议来,换型号通信层先不通。第二样是那块控制板:代码启动时优先按 USB 设备名找 OpenRB-150,找不到才退回 ttyACM0 这类通用串口,等于默认你手上就是这一块。要找的名字长这样:

/dev/serial/by-id/usb-ROBOTIS_OpenRB-150_*

第三样最容易被忽略:舵盘和所有跟舵盘配合的打印件是一套的。fanhao375 对比两款舵机时看到,飞特 HD1910 的舵盘凸出来、XL330 凹进去,外形接近但所有咬合舵盘的件都得改——左右上腿、小腿、偏航转横滚共八个配合件,他那边飞特版文件全带 -FT 后缀。

能换的部分:电池只要是能给足瞬时电流的成品 6V 包就行,不用自己做 2S 电池组、BMS 和充电板,官方教程专门交代过;螺丝、三芯线、SD 卡是通用件,螺丝多备,自攻螺丝拧进塑料是一次性的;主控也能换,kissqy 那条线用 Radxa Zero 3W 顶掉 Pi Zero 2 W,代价是镜像和系统版本跟着变。

SolidWorks 里的零件清单与装配体预览,列出软下巴、软嘴顶部、壳体、躯干底座、电池、舵机、镜头座、锁扣和轴承

fanhao375 反推的装配体里,零件是按名字列出来的:软下巴 jaw_soft、软嘴顶部 soft_mouth_top、头部上壳、左右壳、躯干底座 trunk_base、电池 np_f970、电源支架、XL330 舵机、M12 镜头座、香蕉形 PCB 锁扣,还有四个 16×22 轴承。

打印件:两套不能混用,柔性件别跟着默认 PLA 走

官方教程关于打印只有一句:用 microduck/cad/ 里的模型,推荐 PLA,没有层高、没有墙数、没有支撑。所以先说清楚:逐件的支撑和摆放朝向这几份资料都没给,谁递给你一张「照这个设支撑」的表,那是他自己试的。

能核到的是排盘和材料。fanhao375 有一份排好的 Bambu Studio 工程:P2S、0.4 喷嘴、PLA Basic、层高 0.2mm,五盘五十二个对象,2026-10-20 的 v2.2 版;kissqy 那边是三十六个 STL、同样五盘。前提是那份 3MF 给飞特舵机版排的,XL330 版没有整套排盘,得从 SolidWorks 源文件导出 STL 再切片,换机器还要重设参数。

材料上有个坑:软下巴、软嘴顶部,还有轮滑变体的合体轮胎,这三样按清单要用 TPU,不能跟着默认 PLA 一起打。fanhao375 专门提醒过,因为原表材料栏还写着 PLA,照抄就是打出一堆硬邦邦的「软」件。

切片软件里第一盘的零件排布,同一色 PLA 的件平铺在盘面上

排盘工程里的第一盘,件按同一色 PLA 平铺在盘面上。

15 个舵机 ID 和总线:先编号,再串线

顺序不能颠倒:先把十五个舵机一个个接上调试器把 ID 写进去,再装进结构里。舵机装进腿里就被螺丝和舵盘锁死了,想再单独接上去改编号,等于把这条腿拆开重来。官方教程的说法是,烧镜像之前或第一次运行之前,先用 Dynamixel Wizard 把每个舵机设好。

编号是这样。一到五是右腿,从下往上:一右踝、二右膝、三右髋俯仰、四右髋横滚、五右髋偏航。六到十是左腿,同样从下往上:六左踝、七左膝、八左髋俯仰、九左髋横滚、十左髋偏航。十一是头部俯仰,十二是颈部俯仰,十三是头部偏航,十四是头部横滚。十五是嘴部舵机,可选,当前行走模型不依赖它。

为什么非得跟关节名死死对上?代码里写的是关节名,它按名字去总线上找 ID。编号错了不报错,只错位——你让它抬右腿它抬左腿,或者膝盖往反方向折。这种错最难查,每个舵机单独测都是好的。

编号段本身可以自己划。fanhao375 那条线没按 1 到 15 排,他用右腿 10 到 14、左腿 20 到 24、头颈嘴 30 到 34,IMU 板单独占 200。他自建的调试台上每条腿、每个关节名和 ID 摆在一起,一眼看出哪个关节在动。必须固定的只是「名字对物理关节」。

舵机调试台,左侧整机 3D 姿态,右侧按左腿 20-24、颈头嘴 30-34 分组列出关节名和实时角度

fanhao375 的舵机调试台:左边是整机 3D 姿态,右边按左腿 20-24、颈头嘴 30-34 分组,列着关节名和实时角度。

线怎么串。XL330 是三芯串联总线,OpenRB-150 接出来分三路:右腿从五串到一,左腿从十串到六,头颈从十二串到十一、十三、十四。串的顺序不严格,按布线方便走就行,但每颗的 ID 必须对上。头颈这一路要留意:颈俯仰在最前面,然后才是头俯仰、头偏航、头横滚。

参数在 Dynamixel Wizard 里设五个。Protocol 选 2.0,XL330 的协议版本,选错连不上。Baud Rate 设 1Mbps,全总线必须一致,有一颗不是就时通时不通。Return Delay Time 设 0,收到指令不额外等待就回包。PWM Slope 设 255,装机阶段照抄,这值影响出力手感,改它是调参的事。最后是 Shutdown,把输入电压错误那个触发项去掉。

最后这条最容易跳过,偏偏也是新手最常撞的墙。电池电压在舵机全力输出时会往下掉,掉到阈值以下,舵机自己判定故障就停了。现象是鸭子走两步突然僵住、某条腿软掉,重启又好。摘掉这一项等于告诉舵机「电压抖一下别停」,这是官方教程明写的。

总线拓扑图,主控 UART 经半双工方向切换进总线,1Mbps 三线菊花链分右腿、左腿、颈头嘴三路

fanhao375 画的飞特线总线拓扑:主控 UART 出来经半双工方向切换进总线,1Mbps、三线菊花链,往下分右腿、左腿、颈头嘴三路,IMU 板也挂在这条总线上。

这张图画的是飞特那条线,编号段不同,但两件事共通:总线是 1Mbps 单线半双工的三芯菊花链,而且一定要在出主控之后分路,别让十五个舵机串成一根长蛇——末端那颗不用把信号跑完整机一圈,线短、接头少,通信错误就少。排障顺序同理:先看 OpenRB-150 有没有被认出来,再看电压、GND、线序,最后怀疑 ID。

走飞特那条线还有个额外的坑:飞特 AMP2.0 三芯插头脚序是一号信号、二号电源、三号地,Dynamixel 的 JST EH 是一号地、二号电源、三号信号,正好反着;两种插头间距 2.0mm 对 2.5mm,插不进对方,等于替你防了错插,只剩「压线压反」这一种。压完先用万用表点一遍再上电。

电源:电池直给舵机,主控另走一路

链路是这样:成品 6V 电池包出来先进电源开关,开关出来进 OpenRB-150 的电源输入,OpenRB-150 再喂 XL330 总线;同时电池经一路 5V 稳压或 USB 给 Pi Zero 2 W。Pi 和 OpenRB-150 之间那根 USB 线是通信不是供电,别指望它带电机。

几个必须做的动作。上电前用万用表确认正负极,十秒钟的事,能救一块板。两侧必须共地,舵机侧和主控侧的地连在一起,怎么连以你手上的电源模块和 OpenRB-150 接法为准。焊点用热缩管或热熔胶包住,裸焊点蹭到壳就是短路。

电池选型上有句容易被当成废话的话:要能提供足够的瞬时电流。十五个舵机同时动作的电流跟待机不是一个量级,电池给不出电压就塌,表现是舵机停机或主控重启。这也是官方说不要自己搞 2S 电池组加 BMS 加充电板的原因——那不是省钱,是给自己加变量。

还有一层是电压余量。XL330 手册标的上限是 6.0V,官方这套硬件就是拿 6V 成品电池直接喂,fanhao375 在图上标了「官方超压跑」。配置本来就贴着额定值跑,满电还比标称高一截,往上加电压是拿舵机寿命换的。

缓冲电容官方教程没写,国内两位复刻者都撞过。kissqy 的做法是在整机总进电口的正负极之间并一只 1000µF 电容,他的实测是:没有这只电容,舵机全功率输出的瞬时负载会让主控重启。装的时候靠近总进电口、线尽量短;有极性电容正极接正极、负极接 GND,断电后再接线,带电接反就是炸电容;耐压要高于这个输入端的最高电压并留余量,他按约 7.3V 的配置选了 16V。他补一句:电容只缓冲瞬时负载,代替不了够用的电池、够粗的线和可靠的接头。

IMU:装在躯干,朝向写死在代码里

接线简单,四根。模块的 VIN 或 3V3 接 3.3V(按模块上标的选,别接 5V),GND 接 GND,SDA 接 GPIO2,SCL 接 GPIO3。软件默认用 I2C 一号总线,会自动试 BNO08x 的几个常见地址。

位置和朝向才是最容易装错的地方。位置必须在躯干,不能装头里,原因不是空间是算法:行走策略的观测里来自 IMU 的只有角速度和投影重力两项,只跟 IMU 固连的那个刚体的姿态有关。头挂在颈、颈俯仰、头偏航横滚三个串联关节后面,装头里读到的就是头的姿态,跟躯干差三个关节,而观测里没有脖子角度的补偿项。仿真绑躯干、实物装头上,这个差就是 sim-to-real 失配,表现是走两步往前栽。官方头里那颗 BMI088 设备树注释写 dormant,软件不用它。

朝向更严格,它是写死的常量,不是摆正就行。官方那块 imu_to_dxl 板在躯干里的姿态是绕 Y 轴转 +90°:躯干 X 对应芯片 +Z,躯干 Y 对应芯片 +Y,躯干 Z 对应芯片 −X。源码里那组四元数就是这个:

DEFAULT_MOUNT = [0.70710678, 0.0, 0.70710678, 0.0]

这组数就是 √2/2、0、√2/2、0,标量在前。它不是给你填的选项,是解码时把传感器读数转到躯干坐标系的固定旋转。装歪了,这组数不会跟着变,读数就被转错。

装歪多少会出事?fanhao375 那边有实测:他的二号鸭 IMU 装歪了 8.5 度,软件状态显示「方向已确认」,看着一切正常,一走就往前冲。八度半,肉眼几乎看不出来。所以装完别只看软件说 OK,手扶着让它走一次,看它是不是原地站得住。AI-FanGe 的排障清单里,「一启动就容易倒」的第一条就是检查 IMU 安装方向。

机器人中控界面,上手清单第二条为 IMU 方向,附注装歪 8.5 度一走就往前冲

fanhao375 的机器人中控:上手清单第二条是「IMU 方向」,下面写着——文件里写着已确认,装歪 8.5 度也会显示已确认,去 IMU 页站着核一次;坑是装歪 8.5 度一走就往前冲。

如果你用的不是官方那块板,而是独立的 BNO08x 模块,朝向大概率不一样——模块是平贴的,官方那块竖着转了 90°。两条路:把模块按官方方向摆,或者把代码里那组数改成你自己的。AI-FanGe 那条线把它放在 IMU_MOUNT_QUAT 配置项里,写明已和当前行走模型匹配;官方那边对应解码器的 mount 参数,构造函数本来就留给换朝向用。改数不是禁区,改完要重新核一次姿态。

装配顺序:01 到 15,哪些必须在合壳之前做完

fanhao375 把整机拆成十五个组件,编号就是推荐装配顺序,骨架是「先立基准,再往上挂」。第一个是躯干主体,全部组件的装配基准件,承载左右腿、颈部和控制器;它不先固定好,后面挂上去的腿就没有参照。

躯干之后先装左腿,从髋往脚走:左髋、左髋横滚、左大腿、左小腿、左踝脚,编号二到六。然后转头颈:颈根、颈俯仰、头偏航横滚、头部总成,编号七到十。最后是右腿,编号十一到十五,跟左腿镜像。先左后右没有技术原因,纯粹给手一个固定顺序。

哪几件事必须在合壳之前做完,这是整篇最实际的一条。看躯干那个件的爆炸图,里面塞的是电池、电源支架、两颗 XL330 髋偏航舵机、躯干底座、四个 16×22 轴承、香蕉形 PCB 锁扣、左右壳、M2 铜柱、主控板。壳最后盖,所以先把这些东西在躯干底座上装好拧好,把线头从该出的孔里引出来,最后再合壳。壳一盖上,里面那排插口就摸不到了。

躯干组件爆炸视图,透明壳内可见蓝色主控板、电池、两颗舵机、铜柱和轴承

躯干组件的爆炸视图:透明壳里能看到蓝色主控板、电池、两颗舵机、铜柱和轴承,壳是最后盖上去的那一层。

同理,总线和电源线要在合壳之前走完。这条对两条路线都成立——不管主控在躯干还是头里,跨过颈部的线只有那么两根,一根舵机总线、一根电源,壳合上再想加线,等于拆半台机器。

螺丝这块有个口径差。官方 BOM 只写 M2 和 M2.5 自攻螺丝若干,没细到长度。fanhao375 拿脚本扫了 47 个 STL 的圆孔,反推出来整机一套 M2 系统:直径 2.2 的过孔 77 个、4.4 的沉头孔 28 个、1.6 的攻丝底孔 20 个,成对的过孔加沉头孔出现在偏航转横滚、小腿、踝、颈俯仰这些件上,典型的 M2 内六角圆柱头。采购建议是 M2×6 主力八十颗,M2×4 六十颗走薄壁位,M2×8 四十颗,M2×12 十五颗,M2 螺母五十、M2 热熔螺母六十。

两个口径怎么落地?自攻就直接拧进塑料,机牙就得配螺母或热熔螺母。反推那份文档建议打印件用 M2 热熔螺母,比直接攻丝牢得多;热熔螺母要用专用烙铁压头压,普通烙铁头压不正。FDM 收缩会让设计上 2.2 的孔实际偏小 0.1 到 0.3mm,开打前先打几个试件对孔径。另外提醒:OpenDuckMini 的教程里会出现 M3×10、M3×6 这类规格,那是那个项目自己的件,Microduck 这套 M3 基本用不上。

最后是方向性的东西。腿装反、舵机装反、IMU 装歪,这三个错误装配阶段都看不出来,只有上电跑起来才暴露。所以装完先别急着合壳装头,拿调试器把舵机一个个叫一遍,确认每个 ID 对应的关节确实在动。

最后

装配这一段的门槛不在手上,在脑子里那几条对应关系上:哪个 ID 对哪个关节、哪根线进哪一路、哪块板朝哪个方向、哪个件必须在壳合上之前进去。这四条对上,剩下就是拧螺丝。

真麻烦的是后面:舵机零位怎么标、参数怎么调、走两步就摔怎么查。那些是另一篇的活。

清单、编号表和接线对着 AI-FanGe 的 Microduck-build-tutorial 核过,MIT 协议;飞特线的做法、紧固件统计和 IMU 朝向的源码依据取自 fanhao375 的复刻记录与逆向文档;缓冲电容和总进电口的做法来自 kissqy 的装机注意事项,那仓库是个人非商业许可,商用要先取得书面授权;螺丝规格与 OpenDuckMini 的组装教程对过一遍。


作者:机械臂装配侠
链接:https://www.aiddithome.com/p/1c56e6644632e.html
本作版权归作者所有,未经允许请勿转载。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
0条评论
还没有人评论过~