这篇文章来源于DevicePlus.com英语网站的翻译稿。
您有没有想过拥有一款可以帮您满足日常需求的设备?而且该设备能够区分您(主人)和其他非授权用户,这并非简单的普通工具。在本教程中,我们将向您介绍一款能够识别并理解您语音命令的智能机器人手臂。此机器手臂通过OpenCV软件实现了人脸识别系统。(为了测试目的,我们开发了算法来检测小球颜色。)
作为MakeMIT硬件马拉松项目的一部分,我与同事Isac Andrei和VladNiculescu合作研发了该智能机器人手臂。由于其创新程度和创造性,该项目在硬件马拉松中排名前10。
硬件
Arduino UNO
麦克风
网络摄像头
伺服电机
软件
Arduino IDE
GitHub (https://github.com/DevicePlus/SmartRoboticArm)
工具
胶枪
丙烯酸树脂
螺丝
胶带
电锯
第一步:结构与力学
处理机器手臂的手腕时,必须非常小心。如果不考虑伺服电机角度就开始组装手腕部件,那么可能会导致手臂发生故障——机器人手臂可能发生您无法控制的混沌行为。在步骤1中,您需要做的就是将5台伺服电机连接到Arduino开发板上,并找到每个伺服机构的正确位置。正确的顺序是自下而上进行校准。
I.底座
底座设计为可向左移动90度,也可向右移动90度。将它放置在金属升降机上进而使基座可以旋转。这是一个关键部分,因为当发出语音命令的人移动时,手臂必须跟随并追踪人物。而且这种跟随必须准确,以便摄像头总能发现人脸。
底座随动系统安装在一个40 x 30厘米的大亚克力板上,以保持稳定。您也可以用更强大的材料替代亚克力板,从而支撑能够拾起重物的大机器人手臂。
伺服电机安装在一块12 x 12厘米的较小亚克力板上。我们在小板中间钻取了一个与伺服电机尺寸相同的孔。然后,将伺服电机用螺丝拧到孔上(图2)。
II.肩部
肩部由两台伺服电机组成,它们相互配合以拾取物体并放置在正确的位置。该项目最重要的校准就在肩部。这两个伺服系统必须完美结合,从Arduino开发板上获得完全相同的命令,并且必须反相同步。为了获得良好的同步性,将两台电机放置在机器人手臂上之前,必须将其面对面放置并通过编程摆动到同一侧。
如果它们的行为不一致,那么处于上游位置的伺服电机会强制第二个电机移动,从而产生短路,最终导致第二个伺服电机烧掉。
如果伺服系统的分辨率不一样,您将无法使它们同步。在这种情况下,最好的办法则是仅使用一种伺服电机。如果它们质量很好,那么实际扭矩会与数据表相同,并且具有提升重物的能力。
另外,为了安全起见,在肩部的基座上装一个旋钮非常好。您也可以使用金属支架,将其放置到所需角度,以防止机械臂坠落。
图4显示了我们之前构建的安装在底座上的肩部。伺服机构固定的部位采用旋转结构。肩部必须牢固地固定在基座上,但也必须能够自由旋转。平衡旋转部分的每一边也很重要,因为我们的装置含有一些较重的支撑金属部件。中心重量必须相同,这样机器手臂旋转时才不会掉落。对于这一部分,我们还放置了一个金属筋(即金属弯头),以便伺服机构没有插入时维持机器臂重量。
III.肘部
现在,我们来看一下肘部。肘部伺服部分通过手臂高度控制。由于手臂必须返回到原来位置,所以肘部延伸部分与肩部之间的最大角度不得超过100度。我们对该机器人手臂原型的肘部伺服系统进行编程,让手臂捡起一个球——系统会协调捕捉器和肩膀,两者相互配合,最终将球拾起。
肘部的工作原理如下:
当肘部延伸部分与肩部之间的角度较小时,肩部的角度将增大;
当肘部和肩部之间的角度较大时,肩部的角度将会减小。
肘部使用SketchUp STL设计,并用3D打印机打印。(STL扩展可以将图形转换为能够打印的3D模型)。根据设计,肘部在允许弯曲的角度连接2个延伸部分。
当然,肘部的延伸部件需要能够很容易地抬起,所以除了肘部,延伸部分不应连接其他任何东西。每个丙烯酸树脂延伸部件尺寸为20 x 7厘米。延伸部分的另一端用小丙烯酸片粘合起来,以便将两部分固定在一起。您可以改变尺寸,但是由于伺服机构的限制,机械臂的尺寸不应太大
如果您决定更改尺寸(比如制作一个较小的手臂),那么请确保计算出零件的正确尺寸。否则,手臂将发生故障,无法拾起重物。网络摄像机安装在延伸部件上。
VI.手腕
手腕由能够抓取某些小物体的爪钳/捕捉器构成。在本文中,我们以抓取小球为例。当然,手臂还可以抓取并提起适合爪钳的其他物体。您还可以根据您的具体偏好进行设计——必要时请使用SG90 SketchUp文件进行必要修改。您需要做的就根据所抓物体的形状来改变爪钳形状。
手腕部分也使用SketchUp中的3D模型构建。如果我们想要拿起较重的物体,可以用爪钳抓住它们。但是,爪钳抓取物体时比较有力,可能会对其造成损坏。
步骤2:连接伺服电机
底座
底座伺服(图2)被设置为从0度开始,这意味着它将从左侧开始搜索用户。其旋转角度为140度——机器人手臂可追踪人员递送物体的范围。我们在0度进行校准——这是伺服的中心,叶片面向上方垂直放置。
在控制功能中,基座的分辨率为4度。这是因为在这种情况下,精度不需要太完美。较高的精度反而会导致处理变得缓慢。
每次我们都都需要检查伺服电机的位置,因为相互作用实时进行。为此,我们开发了两个功能:左方和右方。这两个功能可以从35个不同位置追踪人员。
肩部和肘部
肩部与肘部一起能够完成一项重要功能。他们必须弯曲机器人手臂。我们应当指出以下限制,这很重要:
由于前臂的长度,肩部的操作角度不能小于45度,我们有2个例子:
当肩部处于最低位置时,机器人手臂可以拾起最远的物体;
当肩部处于最高位置时,机器人手臂可以拾起最近的物体;
我们选定的角度对于肩部来说已经足够,因为它足以让手臂拾起物体并将其交给正确的人员。
肘部的最大位置不能超过140度,因为该项目的目的是在平面上构建机器人手臂,并且将摄像头与用户处保持在同一高度。我们认为只用70度即可,因为这足以弯曲机器人手臂。
肩部角度和肘部角度之间的组合使手臂具有很大的灵活性,从而形成完整的机器手臂,最终实现拾取物体的功能。
本智能机器人手臂教程的第1部分描述了手臂的一般机械结构,以及伺服电机如何与手臂不同连接处进行连接的方法。本教程的第2部分将会介绍几款用C#编写的机器人手臂控制程序。敬请关注!