构建基于 Arduino 的 SCARA 机器人(译文)

前言

在本教程中,我们将学习如何构建基于 Arduino 的 SCARA 机器人。我将向您展示构建它的整个过程,从设计机器人到开发自己的用于控制它的图形用户界面。

总览

该机器人具有 4 个自由度,由 4 个 NEMA 17 步进电机驱动。另外,在这种情况下,它具有用于控制末端执行器或机器人夹具的小型伺服电机(MG996R)。这个 SCARA 机器人的大脑是一个 Arduino UNO 板,该板与 CNC Shield V3 和四个用于控制电机的 A4988 步进驱动器配对。

SCARA 机器人

使用 Processing 开发环境,我制作了一个图形用户界面,同时具有正向和反向运动控制功能。借助正向运动学,我们可以手动移动每个机器人关节以获得所需位置。使用左侧的滑块,我们可以设置每个关节的角度。计算末端执行器的最终位置,X,Y 和 Z 值,并将其打印在屏幕的右侧。

另一方面,使用逆运动学(Inverse Kinematics),我们可以设置末端执行器的所需位置,程序将自动计算每个关节的角度,以使机器人到达所需位置。

我实际上以一种可以在同一屏幕上同时使用这两种方法的方式来编写程序。连接的角度以及末端执行器的 X,Y 和 Z 值已连接,并且始终显示在屏幕上。

当然,机器人也可以自动操作。使用程序上的 “保存” 按钮,我们可以保存机器人的每个运动或位置。然后,当我们按下 “运行” 按钮时,机器人将一次又一次地循环执行从第一个到最后一个循环的存储动作。我们还可以通过用户界面调整运动速度和加速度。

3D 模型

我使用 3DEXPERIENCE SOLIDWORKS 设计了这台 SCARA 机器人,这也是该视频的赞助商。

3DEXPERIENCE SOLIDWORKS 基本上是具有通过 3DEXPERIENCE 平台获得的云功能的 SOLIDWORKS。一切都通过云进行,因此您或团队中的任何人都可以随时随地从世界上任何地方访问数据或模型。3DEXPERIECE 平台还包括许多有用的生产力和管理应用程序。

例如,项目计划器是组织任务,设置截止日期并跟踪进度的好方法。借助 3D 标记应用程序,您可以从任何设备(例如笔记本电脑,平板电脑甚至智能手机)查看,浏览和记录模型。

3D 模型

还有一个单独的基于云的3D建模器,称为SOLIDWORKS xDesign,可在您的浏览器中运行。它可以与Solidworks结合使用,也可以单独使用,非常适合随时随地在任何设备上建模。

3D 模型

因此,非常感谢 Solidworks 赞助这样的教育内容。如果您想知道 SOLIDWORKS 和 3DEXPERIENCE 平台是否可以为您工作,请查看以下链接。

通过我的特殊链接免费试用 3DEXPERIENCE:www.solidworks.com/HTMTryNow

了解有关 3DEXPERIENCE SOLIDWORKS 的更多信息:www.solidworks.com/HTMLearnMore

好的,让我们回到模型并解释我是如何提出这种设计的。我对机器人的目标是要进行 3D 打印的大部分零件。因此,即使在打印范围较小的3D打印机上,您在此处看到的所有内容也都可以进行 3D 打印。GT2 皮带轮也可以 3D 打印。我使用参数设计来制作它们,因此如果需要,我们可以轻松更改它们的大小。我们只需要更改齿数,所有尺寸都会自动更新,以使滑轮尺寸合适。

对于第一个关节,我们通过这些定制设计的皮带轮分两个阶段实现了 20:1 的减速比。我在这里使用的两条 GT2 皮带是长度分别为 200mm 和 300mm 的闭环。机器人关节由两个推力轴承和一个滚珠轴承组成。

对于第二个关节,我们以相同的方式实现了 16:1 的减速比,而第三个关节只有一个阶段的减速,具有 4:1 的减速比。接头是空心的,因此我们可以用它穿过电动机和微型开关的电线。对于每个皮带,都有槽,我们可以在这些槽上安装惰轮以张紧它们。

机器人夹具由 MG996R 伺服电机驱动,我们可以轻松更改夹具端部以实现不同的夹持尺寸。机器人的Z轴由8毫米导丝杆驱动,而整个手臂组件在四个 10 毫米光轴和直线轴承上滑动。机器人的高度仅取决于光轴的长度,在这种情况下为 400mm。丝杆杆需要短 20mm 才能适合此配置,否则,可以使用垫片螺母将Z电机提升 20mm。

Gripper Mechanism

您可以在原文下载 3D 模型以及用于 3D 打印的 STL 文件。

打印零件

原作者使用 Creality CR-10 3D 打印机打印所有零件,并表示这是一款价格实惠的 3D 打印机。

在此仅作一个简短的说明,我在切片软件中将所有这些打印时均启用了–0.1mm的水平扩展。这使零件具有更精确的尺寸,并更好地与其他机械零件(如轴承,杆和螺栓)配合。

此处省略机器人组装部分的讲解,因为机器人本身设计简洁,组装也很方便。

工作方式

电路连接

有两种方法可以控制机器人的位置和方向,即正向或反向运动学。

当我们需要从给定的关节角度找到末端执行器的位置和方向时,可以使用正向运动学。

另一方面,当我们需要找到端部执行器给定位置的关节角度时,可以使用反向运动学。这种方法在机器人技术中更有意义,因为大多数时候我们希望机器人将其工具定位到特定位置或特定的X,Y 和 Z 坐标。

利用逆运动学,我们可以根据给定的坐标计算关节角度。

我将用于正向运动学和逆向运动学的方程式均来自三角学的规则和公式。

控制程序

你可以在原文下载完整到完整的代码工程,这里仅介绍核心的运动学正逆解代码。

对于正向运动学,我们根据机器人两个手臂的设定关节角度 theta1 和 theta2 以及它们的长度 L1 和 L2 来计算末端执行器的X和Y值。

1
2
3
4
5
6
7
// FORWARD KINEMATICS
void forwardKinematics() {
  float theta1F = theta1 * PI / 180;   // degrees to radians
  float theta2F = theta2 * PI / 180;
  xP = round(L1 * cos(theta1F) + L2 * cos(theta1F + theta2F));
  yP = round(L1 * sin(theta1F) + L2 * sin(theta1F + theta2F));
}

运动学计算

而利用逆运动学,我们根据给定位置或X和Y坐标计算关节角度theta2和theta1。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// INVERSE KINEMATICS
void inverseKinematics(float x, float y) {
  theta2 = acos((sq(x) + sq(y) - sq(L1) - sq(L2)) / (2 * L1 * L2));
  if (x < 0 & y < 0) {
    theta2 = (-1) * theta2;
  }
  
  theta1 = atan(x / y) - atan((L2 * sin(theta2)) / (L1 + L2 * cos(theta2)));
  
  theta2 = (-1) * theta2 * 180 / PI;
  theta1 = theta1 * 180 / PI;
  // Angles adjustment depending in which quadrant the final tool coordinate x,y is
  if (x >= 0 & y >= 0) {       // 1st quadrant
    theta1 = 90 - theta1;
  }
  if (x < 0 & y > 0) {       // 2nd quadrant
    theta1 = 90 - theta1;
  }
  if (x < 0 & y < 0) {       // 3d quadrant
    theta1 = 270 - theta1;
    phi = 270 - theta1 - theta2;
    phi = (-1) * phi;
  }
  if (x > 0 & y < 0) {       // 4th quadrant
    theta1 = -90 - theta1;
  }
  if (x < 0 & y == 0) {
    theta1 = 270 + theta1;
  }
  
  // Calculate "phi" angle so gripper is parallel to the X axis
  phi = 90 + theta1 + theta2;
  phi = (-1) * phi;
  // Angle adjustment depending in which quadrant the final tool coordinate x,y is
  if (x < 0 & y < 0) {       // 3d quadrant
    phi = 270 - theta1 - theta2;
  }
  if (abs(phi) > 165) {
    phi = 180 + phi;
  }
  theta1=round(theta1);
  theta2=round(theta2);
  phi=round(phi);
  
  cp5.getController("j1Slider").setValue(theta1);
  cp5.getController("j2Slider").setValue(theta2);
  cp5.getController("j3Slider").setValue(phi);
  cp5.getController("zSlider").setValue(zP);
}

运动学计算

根据位置设置在哪个象限,我们使用这些 “if” 语句对关节角度进行一些调整。对于机器人的这种配置,我们实际上仅通过两个链接来计算逆运动学。我称之为 “phi” 的第三个角度用于设置抓手的方向。

图形用户界面是使用 Processing IDE 的 controlP5 库制成的。使用此库,我们可以轻松创建按钮、滑块、文本字段等。

为了控制步进电机,我使用了 AccelStepper 库。尽管这是一个很好的库,可以同时控制多个步进器,但是在控制这样的机器人时,它仍有一些局限性。当控制多个步进器时,库无法实现加速和减速,这对于机器人的平稳运行非常重要。

我仍然设法通过库实现加速和减速,但是它们并不像我想要的那样平滑。

结语

我认为问题在于几乎整个 SCARA 机器人 Z 轴和手臂仅由第一个关节支撑。移动时产生的全部重量和惯性力可能会对第一个关节所在的基座产生相当大的压力,并且由于它只是塑料,因此往往会弯曲一点。而且,这些皮带也不是无间隙的,因此我们也降低了机器人的刚性。但是,我认为整个项目足够好,您可以学习 SCARA 机器人的工作原理,并有勇气为自己创建一个。

附注

原文链接:https://howtomechatronics.com/projects/scara-robot-how-to-build-your-own-arduino-based-robot/

Licensed under CC BY-NC-SA 4.0