
事情得从一条讨论帖说起。有人在硬件群里贴了Micro-Duck的参数表我当时的真实反应其实和标题里那类“理工男”一模一样——就这也配叫难整机重量不到200g、电池500mAh、续航标称40多分钟、防护等级IPX7加一个红外信标返航。没有激光雷达、没有视觉算法、没有自研NPU这不就是一个Arduino课上能做完的泳池玩具吗评论区里最狠的一句是把这东西拆开物料成本也就一杯奶茶钱给我一周我连外壳都能重新建模。我当时还给这条点了个赞。三个月后我手里摆着五套打印废壳、四块焊废的主板、一台勉强能下水跑完完整流程但完全不敢标“防水”的工程样机。对着那个赞我沉默了很久。Micro-Duck不是那种靠参数唬人的项目它的参数恰恰是一层层约束被压到极简之后的结果。参数表只写了答案没写解题过程。看起来越干净背后藏的取舍越多。这篇文章就当是给自己复刻这段日子的复盘也顺便给所有想动手挑战它的人提个醒哪几堵墙前面的人已经帮你撞过了。1. “一周仿出来”的错觉从看见参数表那一刻就开始了1.1 那张表上少得可怜的信息恰好都是“结果项”Micro-Duck这个名字容易让人联想到某软件公司但它其实就是一只比真鸭小一圈的遥控鸭子。网上流传的拆机信息并不完整核心参数能列出来的大概只有这些参数数值嘲讽点真实约束整机重量约198g塑料壳加电池能有多重要同时满足防摔、防水、低密度浮体电池容量500mAh级别塞个大电池不就行了重量预算和配种位置被卡得很死防护等级IPX7打一圈胶水就完事涉及动态密封、温度冲击、长期浸泡返航方式红外信标加磁罗盘最简单的那种寻迹算法在水面环境里反而是最可行的方案主控低端MCU级别没什么算力说明很多问题被结构巧妙规避了你一眼扫过去会觉得每一项都能在现有开源方案里找到答案。重量不够轻量化外壳加小电池。防水灌胶密封。返航红外避障常用的光电传感器就能做。但把这些参数全部塞进一个“儿童能在水池边安全玩耍”的约束里难度立刻翻倍。目标用户如果是三到十二岁的小孩产品就不能有锐角、不能有小零件脱落风险、电池不能因为跌落挤压出问题、外壳材料不能一摔就裂。水环境里还有泳池消毒剂、防晒霜、头发丝、小玩具碎片这些乱七八糟的东西。鸭子落水时可能肚皮朝上也可能从一米高的台面被扔进水里。任何一个“看起来能用”的方案在这里都不一定能过。这就是第一个错觉来源参数表是产品定义完成之后的投影它把研发过程中的所有挣扎都擦干净了。1.2 为什么“参数党”会集体误判我复盘时想明白了一件事我们看参数表时默认了一个前提——这个产品核心是那几颗芯片、那几个传感器、那套算法。但实际上Micro-Duck这种产品的技术含量更多分布在结构和工艺里这些东西恰恰是参数表最不擅长表达的。“重量198g、防水IPX7、返航靠红外信标”这个组合你看不出它的壳体开模时为了浮心调整做了多少版看不出红外接收窗口的安装角度要避开太阳直射也看不出充电触点用了什么镀层才能在氯水里撑过几个月。理工科背景的人容易犯一个通病习惯把系统抽象成原理图。原理图里Micro-Duck就是一个MCU、一个电机驱动、一个罗盘、几个红外LED。可是真实的鸭子是会翻滚的刚体会被太阳晒、被氯水泡、被小孩摔会从泳池这头飘到那头。原理图不用管这些产品必须管。项目做完以后你再回头看“一周仿出来”那句话它的真正问题不是说时间估计得太乐观而是根本没意识到自己面对的是一个多物理场耦合问题。机械、流体、电子、控制、材料、制造六条线同时拧在一起的时候时间已经不是线性增长是按指数爆炸的。2. 浮态这件事让SolidWorks模型第一次和现实大规模翻脸2.1 能浮起来和能站稳是两个难度层级我最初设计外壳时做浮力计算用的还是造船和潜水器那套最基础的思路浮力等于排开水的重量。只要整只鸭子的排水体积对应的浮力大于重力就不会沉。公式很简单F_b ρ水 × g × V其中ρ水约等于1g/cm³g是重力加速度V是浸入水中的体积。整机质量大约198g理论上只需要排开198cm³的水就能达到悬浮状态。但真正的目标不是悬浮是让鸭子以某种姿态稳定漂在水面上水线刚好压在设计师画的那条装饰线附近。外壳总排水体积预留得比一半略大比如280到320cm³这样鸭子浮起来的时候有一部分壳体露在水面上既美观又不容易让水从缝隙灌进去。体积够了之后下一个问题是力矩平衡。重心是重力合力的作用点浮心是所有水压力合力的作用点。如果重心在浮心的正下方整个系统就像一只不倒翁倾斜之后会有扶正力矩把它拉回来。这是理想情况。真实产品的问题在于电池、PCB、电机这些重家伙全都集中在鸭子身体的前半段和底部重心位置不好控制。我用SolidWorks建模时计算出来的浮心看起来没问题但第一次下水测试鸭子直接歪着身子浮在水上左侧吃水很深右侧几乎要翻过去。原因就是重心相对浮心的水平投影偏了浮态根本对不上模型预测。模型算出来的重心只是“理论重心”实际装配时电池焊线的走向、PCB铜箔覆盖不均、胶水的量和位置全都会让重心偏移。必须用实物称重加吊挂法来实测重心然后把结果反馈回模型。2.2 配重不是塞一块铁那么随意我把原版拆开时电池下面有一块不太起眼的金属配重形状和电池舱严丝合缝。当时我还在想这种设计也太土了直接靠外壳厚度不就行了。后来自己设计配重方案时才知道这块金属的位置、厚度、密度都是算计好的。电池只有不到30g但它位于鸭子身体中后偏下的位置。要让重心落在浮心正下方且尽量低就需要在底部额外加配重。加多少、加在哪不是拍脑袋决定而是要做浮态模拟先确定目标水线位置然后算倾斜不同角度时的扶正力矩。我给自己定的标准是鸭子被浪打偏到30度时回正力矩不能太小但也不能大到碰到浪就“啪”地一下弹回来导致壳体接缝处反复受力。我最初的方案是把配重全堆在腹腔最低处结果鸭子确实非常稳但稳得过头了——水线被压低干舷露出水面的部分变高整体重心低得像一块石头遇到一点浪就开始高频晃动水花不断打上来。后来理解到重心过低会缩短横摇固有周期让船在水面变得过于“硬”反而不适合这种小水池场景。最终的配重方案不是一块铁是几片不同厚度的不锈钢片分布在壳体内不同位置。每次调整都要经历一遍拆壳、擦干内壁、贴配重、合壳、下水、观察姿态、记录干舷高度。前后折腾了将近两周才让鸭子在水里呈现出那种自然又稳定的漂浮姿态。2.3 水面上的“走直线”问题从浮态就埋下了伏笔浮态不只是好看不好看的问题。如果鸭子左右倾斜两个推进器的入水深度就不一样会产生不对称阻力游着游着自己画圈。初始横倾角哪怕只有1到2度放大到十米距离上就是很明显的偏航。这就是为什么结构设计阶段必须用三维软件算出完整惯性张量而不是只算一个重心点。鸭子在三维空间里绕三个轴都有转动惯量决定了它在水里受到扰动后的响应速度。模型里多算一步下水调试就少走十步弯路。第一次下水的测试我印象很深鸭子理论上应该能直行但它轻微向右偏。我一度以为是PID参数问题调了半天没效果。后来才发现是右侧推进器出水口位置比左侧低了0.5mm导致右侧阻力偏大。手工打磨壳体时差0.5mm根本不觉得怎么样在水动力面前就是肉眼可见的偏航。3. 标称IPX7三个英文字符逼掉复刻者大半头发3.1 第一版打孔加硅胶塞的方案连静水测试都没撑过我第一版设计图里给充电口留了一个USB座然后用硅胶塞堵住。当时想得很简单硅胶塞能防水大不了再在周围涂一圈密封胶肯定没问题。实际上电机的发热改变了整个局面。鸭子在水里跑二十分钟以后壳内空气被加热膨胀会从硅胶塞和外壳之间的微小缝隙挤出去。等鸭子停下来冷却壳内气压下降开始从外面吸水。哪怕硅胶塞看起来塞得很紧微小毛细通道里的水也会被负压一点点吸进去。我那次测试在跑了大概半小时后打开外壳USB插座附近已经有一层细密水雾PCB上甚至有水珠。这就是做防水产品的一条铁律不要试图在壳体上开你能打开的孔然后把希望寄托在“塞子”上。所有可维护接口都应该是电磁感应、触点接触这类非穿透方案。最终我把充电改成了底部两颗镀金触点加磁吸充电座外部结构没有任何活动的舱盖。开关也不再做机械按键而是用了电容触摸。触摸区域做在壳体内部通过壳体电容变化检测按压壳体本身没有开口。3.2 真正逼疯人的是电机轴那个必须要“穿墙”的旋转件不做开孔充电和开关的问题其实都不难绕开。但动力系统无论如何都得和外界产生机械连接——电机要带动桨叶转动桨叶在水里电机在壳体里轴必须穿过壳体。这里有几个路线每个路线都有各自的坑直接穿轴加O型圈结构最简单轴在密封圈里旋转靠O型圈的弹性抱紧轴实现密封。但轴高速旋转时会磨损密封圈而且电机轴如果同心度不够会在旋转中把密封圈挤成椭圆形导致缝隙忽大忽小。低速还好转速一高就容易渗水。磁力联轴器电机在壳内带动一个磁环壳外桨叶上也有一个磁环两个磁环隔着壳体壁传递扭矩。优点是完全没有动态穿透密封难度大大降低。缺点是扭矩有限桨叶被水草或手指挡住时内外磁环会滑脱。电机整体灌封把电机和桨叶做成一个独立的隔离模块只把电源线引回主壳体。防水性能好但坏了没法修只能整体更换。我最后做的是磁力联轴器方案。这个方案最大的坑在于磁环要对齐两个磁环之间的气隙如果稍微偏一点扭矩就会明显下降。而且磁铁本身带磁通电之后如果叶片被卡住磁环滑脱会有“咔哒”声周围PCB上的传感器还会受到额外磁场干扰。原版没有轴从壳体里穿出来大概率也是类似的隔离设计思路。但隔离设计背后还有一层考量外置桨叶容易被头发丝缠住。所以桨叶外侧还要加过滤网罩罩子本身又不能影响推力效率。环环相扣没有一处是能单独优化的。3.3 静态泡水不漏不代表跑起来不漏从第三版开始我的防水结构已经接近成熟静水测试也能过。但后来发生一次很诡异的漏水鸭子在水池里跑完一圈回来打开外壳内部没有明显水迹可是焊盘间有一些极细微的白色结晶物。用显微镜看才发现水汽已经渗入壳体内部在焊盘间形成了电解残留物。漏点不在动态密封而在壳体上下两半的超声波焊接线。那条焊线上有一小段宽度不足水汽在水下高压环境下会缓慢渗透。焊完的接缝用肉眼看是完全封闭的但微观上存在一条毛细通道。传统防水等级测试把设备浸在静水中看能不能撑过30分钟。但实际使用场景里鸭子落水时会有冲击、水温会变化、壳体内部会随着电机发热产生正负压交替。所以我后来的测试流程改成了三阶段把整台样机放进4℃冷藏室两小时让壳内空气收缩产生负压。迅速转移到40℃温水测试槽里浸泡20分钟让壳外压力高、壳内压力低水被“吸”向任何微小的漏点。取出后擦干外壳称重对比测试前后的重量差。重量增加超过0.1g就直接拆壳找漏。精确到0.01g的珠宝秤在这个环节非常好用。漏水量小到看不见时重量变化是唯一能提醒你“出事了”的信号。3.4 “防泼溅”和“能潜水”之间的边界混乱到让人崩溃IPX7的官方定义是把产品浸入1米水深、持续30分钟不进水损坏。但现实里没有标准化的测试条件水温和样品温度可能都是20多度。你通过这个测试不代表在儿童泳池里被扔来扔去也能扛住。我做过一次半破坏性测试把鸭子放在水面用一个装了水的矿泉水瓶从10cm高度砸向它模拟小孩把球砸到鸭子旁边时溅起的浪。浪头打过来鸭子的密封胶在接缝处承受了冲击压力几次之后边缘就出现了肉眼可见的形变。量产品牌会做更严苛的跌落、冲击、温度循环测试每项测试背后都是成本和时间。作为复刻者我第一次真切体会到IPX7不是一个状态而是一个需要持续维护的系统属性。4. “自己回来”才是这道题里最反直觉的部分4.1 水面上的定位比地面机器人难出一个维度第一眼看Micro-Duck那个红外信标返航很多人会想起循迹小车地面放一条黑线小车沿着线走就行。泳池场景的难点在于小车有轮子轮子转一圈对应的地面距离基本是确定的。鸭子在水里靠桨叶推进桨叶在水里会打滑水流和风力会让