今天小编给大家带来的是来自马尔代夫的Maker hannu\\_hell 的机械宠物手,该作品的灵感来自国外的动漫电影“亚当斯一家”,主体结由3D打印机制作完成,使用树莓派Pico控制16个舵机,可以进行移动和抓握动作。
硬件清单:
软件:
- Thonny IDE
硬件:
- 舵机*16
- 小型径向轴承*16
- 树莓派 Pico
- 电容 1000 µF
- TIP31C NPN 晶体管
- 1300mAH锂电池
- 开关
- 定制PCB
- SSD 1306 OLED 显示屏 (128 x 64)
其他:
- 丙烯颜料
- 胶棒胶枪
- 数据线
- 滚珠脚轮
受到亚当斯家族宠物无实体手的启发,这个东西的机械构造给我带来了很挑战和乐趣。从童年到现在,我都很喜欢这部电视剧,该剧将虚构人物“怪物”描绘成宠物和亚当斯家族的成员。
除此之外,你还可以将它放在一个古董盒子的顶部(在电视剧中描述为它的休息处),然后让这个东西做它的事情。
这款机器人版本的 Thing 由 Raspberry Pi Pico W 供电,可以使用蓝牙进行远程控制。它具有 16 个自由度 (DOF) 的运动,并且可以表达物体的某些姿势。 3D 模型是使用 Fusion360 创建的。每个手指都有 3 个自由度,均在上下方向移动。
电视剧中描绘的怪物的动作有点像蜘蛛,但又不完全一样,因为手指之间的距离并不精确,试图重现这样的角色是一个相当大的挑战。
在设计的每个阶段都必须考虑机器人的整体平衡。话虽如此,它也有其局限性,当您阅读构建说明时您就会了解它们。
手指设计
手指被设计为三个部分。每个部分都可以上下移动,允许进行一系列运动。
现实的手指能够进一步向下移动,而不是向上移动,因此考虑到舵机的整个范围是从 0 到 180 度,连接到舵机的所有关节都是固定的,允许向上 40 度和向下 140 度。中间部分和底部部分是相同的,底部部分固定到指关节(用于组装手指的底座)。手指的尖端的小孔用于填充热胶,并粘贴橡胶片,以在移动时在地面上产生足够的摩擦力。指甲单独打印需要粘贴在手指上。会有一个额外的指甲破裂,可以粘在除拇指之外的任何手指上。我选择在中指上粘贴破裂的指甲,以便在移动时效果更好。
组装手指部分
在组装手指部分之前,最好给这些部分上漆并让它们干燥。由于之前的金色喷漆我不喜欢,所以我选择用丙烯酸涂料重新上色。
您也可以组装然后涂漆,但这样您可能无法获得更均匀的涂层,并且可能夹缝区域无法上色。丙烯涂料可以使用浅棕色和深棕色与一些黑色的各种混合来呈现皮肤般的颜色。
将舵机舵盘安装到插槽中,然后用螺钉固定到位,将小型径向轴承推入分配的孔中,把将舵机拧入到位,然后将其安装到手指部分中。
伺服线从每个部分的顶部穿过插槽,连接到容纳电子设备的手腕部分。您需要焊接一些导线线来延长舵机线,使其到达手腕部分。
在固定舵盘之前,将舵机对准正确的位置非常重要。舵机应能够自由向上移动 40 度和向下移动 140 度。
由于机械限制,拇指的基部将无法像其他手指一样向下移动,但是舵机的安装角度与其他手指一致。
一旦舵机就位,直径为 4 毫米 x 长度为 10 毫米的销钉将从另一端插入,以确保接头的稳定性。
大拇指的尖端部分没有用于填充胶水的槽,但具有用于安装球脚轮的槽的切口。球脚轮将紧密贴合,因此无需粘合。球脚轮允许手在地面上移动时轻松移动。
理想情况下,我希望在移动时能够抬起拇指,但为了始终保持平衡,拇指和小指需要保持接触地面,但稍后会详细介绍。
指关节设计
支撑手掌是迄今为止该构建中 3D 打印的最大部分,它负责连接各个手指。
再次最好在将手指组装到指关节之前对零件进行油漆。在将每个单独的手指组件组装到指关节之前,舵机被插入分配的空间中并拧紧。指关节的后部有一个宽阔的区域,用于连接手掌的前部。它还具有一个用于轴向轴承的孔,该轴承可以承受由手掌和连接到手掌的拇指组件的重量施加在指关节上的轴向载荷。
手和手掌组件设计
整个手掌由拇指和掌部和腕部组成。手掌的前部还装有一个伺服器,需要拧入并组装到指关节上。在拧入舵机之前,需要将一个小型径向轴承推入分配的孔中。
您应该使用伺服器附带的圆形舵盘连接到 3D 打印伺服支架,方法是将其在中间对齐,拧入直径 2.5 毫米 x 长度 10 毫米的六角螺钉,然后从下方安装螺母。
必须通过钻孔将舵盘上的孔弄大一点,以安装 2.5 毫米六角螺钉。
此后,您可以将手掌上的舵机设置到 90 度的中立位置,并将手掌部分安装到关节中带有轴向轴承的孔中,并将舵机支架推入舵机的齿轮头中。
然后,您可以继续将支架固定到指关节部分,方法是在两侧小心地钻两个孔,并用两个 2.5 毫米直径 x 15 毫米长的六角螺钉和螺母将其固定到位。
完成此操作后,您可以从手掌部分底部推动 4 毫米直径 x 20 毫米长的销钉,并拧入小型 3D 打印板以防止销钉掉落。
电池组装
手掌和指关节部分组装完毕后,我们现在可以继续将电池放入电池盒中。锂电池的输出连接到降压转换器的IN(输入端)。
转动降压转换器上的小螺丝,直到万用表上的读数稳定为 5V。将 micro USB(公头)电缆的开放端线焊接到降压转换器的 OUT(输出端子)并暂时将其引出。
稍后将其插入手腕下方的微型 USB 端口。我使用了微型 USB 电缆而不是普通电线,因为如果电池耗尽,您可以选择使用外部电源为机器人供电。
确保将电池放入电池仓时,充电线(平衡充电线和电池的主充电线)伸出,以便于为电池充电。
现在,您可以将电池使用热熔胶,然后将降压转换器放到电池侧面,并使用一些热胶将其固定到位。
完成后,您可以盖上电池盖并用 2.5mmx10mm 六角螺钉将其拧紧到位。之后,可以通过对齐两侧将电池盖附件粘在电池盖顶部。
手腕部件
手腕由下手腕、上手腕和手腕盖板三部分组成。下手腕用 2.5mmx10mm 六角螺钉拧到手掌顶部。
下手腕内部是空心的,并有切口用于从舵机布线,因为所有电子设备都安装在该部分内。它还具有用于安装开关的切口和用于连接电池或外部电源的微型 USB 端口(母头)。
上手腕也与下手腕具有相似的轮廓。
您需要先固定下手腕,然后将电子设备安装在内部,然后将上手腕拧到下手腕顶部。腕套安装在上手腕顶部,并具有用于访问 Raspberry Pi Pico W 进行编程的切口。
将 LED 光扩散片切割成手腕盖板的形状并粘贴在顶部。我使用了三个 1.5 毫米直径的螺钉将腕套固定在上手腕上以增加刚性,可凭需求使用。
您需要先固定下手腕,然后将电子设备安装在内部,然后将上手腕拧到下手腕顶部。腕套安装在上手腕顶部,并具有用于访问 Raspberry Pi Pico W 进行编程的切口。
将 LED 光扩散片切割成手腕盖板的形状并粘贴在顶部。我使用了三个 1.5 毫米直径的螺钉将腕套固定在上手腕上以增加刚性,但它是可选的。
安装电子产品
固定下手腕后,您可以将排针焊接到 PCB 面包板上并安装 Raspberry Pi Pico W。根据原理图焊接组件,包括开关和 micro USB 端口。
PCB 将用螺钉固定在支架上,支架将粘在下手腕的底部。现在,舵机和 LED 灯带的所有电线也应该焊接到 PCB 上。
最后,您可以通过指定的孔拧入 2.5 毫米六角螺钉,将上手腕连接到下手腕。
到现在为止,您几乎已经完成了构建。整理线路,避免舵机连接线路混乱,使用手腕部分将覆盖它们,要小心不要暴露任何引线。
一旦所有电子设备就位,您就可以戴上手腕盖板。安装盖板后,从顶部将 USB 电缆插入 Pico W。
遥控总成
Raspberry Pi 最近宣布,通过最新的软件更新,我们现在可以在 Raspberry Pi Pico W 中使用蓝牙连接。遥控器通过蓝牙连接到机器人,并且还需要用于遥控器的 Pico W 板。
遥控器有 6 个可编程按钮、两个拇指杆、两个旋转编码器和按钮 LED 指示灯。由于 Raspberry Pi Pico W 只有 3 个可用的模数转换器 (ADC) 引脚,因此只能在右侧拇指杆中读取一个电位计。
由四节 AAA 电池提供的 6V 电压通过为遥控器供电的降压转换器调节为稳定的 5V 电压。
定制 PCB 有助于使电路紧凑、整洁,我要感谢 Seeed Studio 为遥控器提供定制 PCB。 Seeed Studio Fusion PCBA 服务由 Seeed Studio 提供,提供全面的 PCB 制造、原型 PCB 组装等。他们的服务涵盖从 PCB 制造、零件采购、组装到测试的各个方面,确保整个过程的一流质量。
重要事实是,我使用的 SSD 1306 oled 显示器的 VCC 和 GND 引脚与我通常看到的引脚相反。以下是两个版本的 Gerber 文件的链接,因此如果您打算构建遥控器,您可以选择适合您的 OLED 显示屏的 PCB。
运动分析
由于机器人有 16 个自由度,我们可以获得广泛的运动,但随之而来的是不稳定和不平衡。
手指间隔不均匀,当用指尖支撑时,手腕部分需要在手的拇指和小指上保持良好平衡。
因此,在放置组件时有必要粗略地了解重心,以了解其平衡方式。在分析机器人的运动时,还必须考虑拇指上电池增加的重量。
手的不同部分的运动顺序对于转移力矩以实现不同的姿势很重要。
在理想情况下,当一根手指抬起时,手应该能够用四个手指保持平衡,但这几乎是不可能的,因为拇指始终需要接触地面才能保持平衡。
小指在运动过程中也受到类似的限制,但在静止时,机器人可以以小指可以抬起的方式定位,同时手在其他四个手指上保持平衡。
使用数学模型来了解指尖在坐标空间中的位置对于加快开发过程和提高准确性非常重要。
建立了逆运动学模型,并在给定坐标空间中的特定位置的情况下反算每个手指中的三个舵机的角度。
通过获取手指每个部分的连杆长度和末端执行器(指尖)位置,我们可以确定手指每个部分中的舵机需要移动到所需位置的角度。
要向前移动,您需要将前面的四根手指一一向外放,然后返回到原始位置,同时保持指尖与地面接触。这同样适用于向后移动。
您可能需要比其他三个手指更快地移动小指,因为小指和拇指保持机器人的整体平衡,并在其余手指和手腕之间创建枢轴点。
下面是一段Python代码(也可以与Raspberry Pi Pico W上的micro-python一起使用),可用于计算角度theta1(手指底部伺服),theta2(手指中部伺服)和theta3(指尖伺服) 。
输入是手指部分长度(L1、L2 和 L3)、距原点 O(xe 和 ye)的期望指尖位置以及指尖相对于原点 O (theta\\_4) 的方向。
import math
xe = 30
ye = -90 # minus indicates downward from the coordinate space
theta_4 = 90 # finger tip is perpendicular to the ground
L1 = 42.3
L2 = 42.3
L3 = 56.8
x2 = xe - (L3*math.cos(math.radians(theta_4)))
y2 = ye + (L3*math.sin(math.radians(theta_4)))
print(x2, y2)
alpha = math.atan(y2/x2)
beta = math.acos((((L1**2)+(L2**2)-(x2**2)-(y2**2))/(2*L1*l2)))
theta_2 = 180-math.degrees(beta)
gamma = math.acos((((L1**2)+(x2**2)+(y2**2)-(L2**2))/(2*L1*(math.sqrt((x2**2)+(y2**2))))))
theta_1 = math.degrees(gamma)+math.degrees(alpha)
theta_3 = theta_4 + theta_1 - theta_2
print(f'alpha: {math.trunc(math.degrees(alpha))}\n')
print(f'theta_1: {theta_1}') # Finger Base servo angle
print(f'theta_2: {theta_2}') # Finger Mid servo angle
print(f'theta_3: {theta_3}') # Finger Tip servo angle
机器人编程
首先,您需要下载 Pico W 板的最新固件。以下是有关如何从 Raspberry Pi 官方网站启动和运行的说明。然后需要安装micro-pythonservo库。我使用 Thonny IDE 对 Pico W 进行编程,如果您打算使用它,可以直接在工具 -> 管理包中搜索库并将其下载到板上。这是一篇关于 Raspberry Pi Pico 的 Thonny 入门的精彩文章。对于蓝牙连接,导入了两个库(aioble 和蓝牙),它们内置在 Pico W 的最新固件中。
机器人可以放置在两个方向。它可以放置在指尖接触地面的位置,也可以直立支撑在手腕的底部。
对于后一种方向,您需要将其固定在平台上,因为它无法自行平衡。
理想情况下,我希望它能够自行从一个方向移动到另一个方向,但这将是一项非常困难的任务,即使考虑到机械限制和设计标准可以完成。
“trick\\_or\\_treat”功能可以在直立位置使用,以握住一碗糖果并进行一些动作。 “finger\\_count”功能也可以用在这个位置
在编写任何代码之前,您需要再次检查舵机的位置,并记下所有手指伸直时舵机的角度。
这是一种需要完成的校准,一旦完成,您就可以使用上一步中讨论的数学模型准确地获得您想要移动的位置。
运动功能是不言自明的,字符字节通过蓝牙从远程发送以触发功能。
对遥控器进行编程
我还使用了 pbm 格式的图像文件在遥控器启动期间在 OLED 上显示。这里有一个关于这些小型 OLED 显示器以及将它们与 Raspberry Pi Pico W 连接的精彩教程。如果您想了解更多有关使用 Pico W 蓝牙通信(特别是作为遥控器)的信息,Kevin McAleer 制作了一个精彩的视频来解释它。here.
按下遥控器上的按钮会以字符字节的形式发送到机器人,并且检查拇指杆读数的阈值,然后以字符字节的形式发送。
确保在打开机器人后等待大约一两秒,让电容器充电,然后再通过遥控器发送命令。 Raspberry Pi Pico W 上的板载 LED 将以 250 毫秒的速度持续闪烁,直到机器人连接到遥控器。
一旦连接,它就会每秒闪烁。当按下每个按钮时,按钮上方相应的 LED 会亮起,并保持亮起状态,直到按下另一个按钮为止。
OLED 显示屏还通过显示简单的文本来指示机器人的哪些动作与按下的按钮相关。
结论
这个构建更多的是一个实验项目,而不是一个经过尝试和测试的项目。主要原因是手的手指间距不均匀,无法在指尖上完全保持平衡,特别是虚无的手指。
然而,建造它是一个概念证明,如果构建的所有组件都以平衡的方式放置,不会产生太多的时间来使其翻倒,并且可以使用适当的运动自由度,那么它就可以工作。
不过,它的动作也有很多限制,比如后退时步幅较大,前进时保持直线。
电池还单独增加了拇指的额外重量,与其他手指相比,这反过来又给拇指带来了更大的压力。这限制了它的灵活性,在对机器人的某些运动进行编程时必须考虑到这一点。
在拇指尖使用滚珠脚轮有时会在运动过程中带来好处,但有时又是一个缺点,因为很容易产生滑动,这需要拇指上的舵机提供更多的保持扭矩,而拇指上已经承受了电池的负载。