近日,认证为Guerrilla Games 高级首席技术程序员的X用户Giliam de Carpentier@decarpentier_nl发布的会行走的“12 条腿的桌子”引起了网友的关注。
据Giliam de Carpentier介绍,这个项目名叫 Carpentopod,整个桌子有 12 条腿,里面内置了电机,是木工、电子和编程结合的产物。只要按下遥控器,桌子就会向你走来,像一台家用机器人一样。
从图上可以看出,Carpentopod 走起来非常平稳,有不少网友表示对这个项目非常有兴趣,并询问是否可以购买。
作者表示目前还没有这方面的计划,但在其博客中,作者介绍了从设计到材料选择,再到加工和装配的全过程。其中包括使用数控机床加工竹板部件,还包括控制电机和 Arduino 系统以实现桌子的移动功能,并已将其开源。此外,作者表示将参加近期的一个活动Maker Days Eindhoven,届时会做更多介绍。
原文翻译如下:
早在 2008 年,我就编写了一些软件来生成各种优化的行走机制。近年来,当我掌握了一些电子和木工技能后,我能够将其中一种机制变成真正的无线行走木制咖啡桌:Carpentopod。这篇文章简要介绍了这个项目的整个过程。
设计新的连杆
Carpentopod 腿部连杆本身是由我编写的软件生成的,该软件通过让腿部相互竞争,演化出数千代虚拟腿部变体。为了选出最佳变体,每个变体都会根据其行走速度、间隙和材料使用情况分配一个“适应度”分数。我还为那些腿部尖端在循环最低三分之一时移动更水平、更平稳的变体奖励额外分数,以使其有利于一组三条腿协同工作以最大限度地减少摆动和脚部滑动的解决方案。
然后比较每种腿部变体的适应度得分,只有最好的变体才有机会混合它们的基因(即腿部参数),从而一遍又一遍地创建下一代数千种变体,随着时间的推移,产生越来越好的解决方案。此外,除了通过“自然”选择混合基因外,还会定期引入基因突变,以帮助发现新的解决方案并保持变体,直到收敛为止。在用 C++ 编写了包括运动学求解器在内的所有内容后,此模拟能够每秒进化数十代,因此很容易看到糟糕的初始设计如何变成高度优化的设计。
视频链接:https://www.youtube.com/watch?v=AepO45iuH9U
上面的视频展示了 20 秒的进化过程。每一帧都展示了 5000 个“活着”的变体中的一个不同的个体。它还同时叠加了所有 5000 个个体的腿尖轨迹,这些轨迹随时间推移合并成一个红、绿色光晕,最终收敛成一个单一的解决方案。我最终最终选择的腿部连杆,是通过运行一个规模更大、时间更长的模拟程序简单选出的。而且,就像选择正式的动物名称一样,我通过结合古老的拉丁语和希腊语来选择它的名字:carpentum(马车)和 pod(脚或腿)。
任何看过 Theo Jansen 的 Strandbeest 雕塑的人都可能会发现他的腿部连杆和 Carpentopod 连杆之间的相似之处。然而,Carpentopod 连杆的组件比率非常不同,并且有一个额外的关节点和进化的圆形脚趾直径。这些额外的参数使进化过程能够找到更紧凑且更少造成脚部滑动的解决方案。
脚部滑动的原因是不同的脚趾着地的速度不完全一致,因此在实践中会导致这些腿试图相互减速。(不过,Strandbeest 的腿似乎通常都采用某种灵活 / 滚动的脚趾,而不是刚性的脚趾,这可能在一定程度上有助于弥补这种影响)。下面的视频比较了两种不同的设计,包括它们对尺寸、重心和脚滑动 / 滑行的影响。
视频链接:https://www.youtube.com/watch?v=k4qrjD_HK4E&t=21s
设计一张会行走的桌子
多年来,上述内容只是一个业余爱好项目的有趣最终结果。但随着近年来我对制作实物的兴趣越来越浓厚,这让我能够真正将这种连杆用于更实在的东西。我尝试制作的第一件东西是早期版本的进化连杆的微型模型(紧凑性较差,因此不太适合最终成为 Carpentopod 桌子的东西)。只是为了测试我新开发的技能,并在尝试更大的东西之前试用我的新 CNC(数控机床)。
接下来,我决定制作一张行走的木制咖啡桌。主要是因为我认为这既(相对)实用,又美观。由于 Carpentopod 连杆中的每一条腿只占地面行走周期的三分之一,因此桌子本身需要十二条腿才能始终保持稳定。为了平稳行走,腿部组件也需要以亚毫米的精度制造并保持这种精度。这就是为什么我将它们设计为用层压竹片 CNC 加工而成,这是一种特别坚固、天然、耐用和稳定的材料,非常适合将机器人与有机物混合的风格。
我使用 Autodesk Fusion 360 设计了桌子的所有组件,这样我就可以在一个软件包中建模、测试、渲染并完成所有 CNC 准备工作。而且,能够在软件中从任何角度、在其行走周期的任何阶段实际看到它完全组装,这使得调整美学和确保所有间隙都恰到好处变得容易得多。
在一端的六条腿和另一端的六条腿之间,我还留出了一个中空的“腹部”,用来放置电子设备、电机和电池。为了让它看起来不那么棱角分明,我把框架和腹部设计成弧形,就像一个倒置的百宝箱。
中央的腹部还能使所有支腿至少与中心保持一定距离,从而使所有支腿都能更有效地参与转弯。每组六条腿都被设计成与自己的曲柄轴相连,由一个电机驱动。这样,它们只需要两个单独控制的电机就能像坦克一样“驱动”和转动桌子。
构建过程
为了将 3D 设计实物化,我尽可能多地使用 CNC。这不仅因为精确度的需要,也因为这样可以更容易地批量制造出十二个相同的木制部件。由于这只是一个兴趣项目而不是生产线,所以作者决定使用他便宜的三轴 CNC 路由器亲手制作所有东西。
三轴 CNC 只能从顶部去除材料。但是由于许多零件也需要从底部和 / 或侧面移除材料,以制造更复杂的形状和凹陷,作者将大部分腿部零件设计成由三片层压竹子制成,他可以分别加工每层竹子,然后将其粘合在一起。
视频链接:https://www.youtube.com/watch?v=ayUlgEuYc0M
当然,即使是单个部件也可能需要使用不同尺寸和形状的切削刀具进行多次加工,并且/或者可能需要精确地倒置安装以加工两侧。但如果您不想花钱购买价格高得多的带自动换刀装置的 5 轴 CNC,也不想用塑料进行 3D 打印,那么这就是 CNC 加工的现实……
除了我用 CNC 加工、打磨、涂漆和组装的 100 多个竹制部件(使用更多滚珠轴承和钢轴)之外,该设计还需要两个曲轴。我最终通过有效地将 D 形轴和旋转偏移与 D 形孔锤在一起来制作它们,这些孔是我分别用普通铝棒和铝板非常小心地用 CNC 加工而成的。
桌子的弧形“腹部门”是通过在同一层压竹中精细地切割制成的,然后蒸汽处理使其更加柔韧,最后在弯曲夹具中干燥,以赋予其新的形状。然后,这些部分被粘贴在两个带有嵌入式磁铁的隐形铰链肋上,使得门易于打开和关闭。最后,我还焊接了一件与之高度相同的电视柜,并将一块芒果木加工成两件家具的桌板,有效地将它们组合成一套。
让桌子动起来
两个六腿部分应由各自的电机驱动。但实际上,是每个部分的单个曲轴协调腿部的相对运动。在下图中可以看到,我只是简单地推动一个没有电机的部分向前移动,该部分就可以表现得像一个轮子。
视频链接:https://www.youtube.com/watch?v=R5b97QwAwxg
视频中还展示了脚趾是如何轻触地面(由黑线表示),但并不试图穿透它的。这意味着,桌子在行走时不会有太多的“颠簸”。当然,最小化颠簸也是连杆在进化过程中的适应度指标之一。
为了让它自行移动,我订购了两个便宜的齿轮驱动的 24V 无刷电机,这类电机通常用于自动窗帘,输出最大 1.5 Nm @ 130 RPM。它们内置的电子设备还允许使用额外的 PWM 信号线直接控制速度。遗憾的是,当尝试让它们低速运行时,电机几乎立即进入了一种因温度过高而自动持续几秒的关机保护模式,即使仅在极小的负载下也是如此。幸运的是,将 PWM 信号保持在 100%,并直接改变电压,情况就好多了。如下图所示,直接将可调试的实验室电源连接到其中一个六腿部分的电机上。
https://www.youtube.com/watch?v=GyZDItwtMWM
为了能自动控制电机电压,我购买了两个便宜的升降压转换器模块,这些模块可以将任何电池的电压转换成 0 至 24 伏之间的任意电压。然后对这些模块进行了改造,使它们的输出电压可以直接通过一个来自改造后的 Arduino Nano 微处理器板的快速 PWM 信号来设定。这些电压转换模块还提供了一个可调的最大电流设定功能,这使我能够对每个电机的最大堵转扭矩进行控制,从而确保了操作的安全性,尤其是保护了手指。
接下来,将露出的霍尔效应电机传感器的信号接入了 Arduino 板,并用 C 语言编写了一套软件来实现自己的闭环电机控制系统。这样一来,电机现在能够独立且精确地控制到任何可能达到的速度和位置,而且这种控制不受负载的影响。
在最后一步,将一个蓝牙模块连接到 Arduino 上,并编写了一些 C 语言代码,使其能够连接并解析来自改造的无线 Nunchuck 操纵杆的数据。在安装了一个 14.8V 的锂电池之后,桌子就可以在客厅里任意走动了,可以通过一个小型遥控器控制桌子。
最后,下图是连杆图纸,想要复制该项目的读者可以参考。
原文链接:https://www.decarpentier.nl/carpentopod