运动学
在研究控制机械臂之前,有必要学习一些运动学知识,比如学习反向运动学内容,解决命令任意串行操纵器沿预先计划的轨迹朝向目标的问题等等。
下面是一个大纲,介绍了“运动学-机械手介绍及分类”这个主题下的一些主要的内容。
- 自由度(DoF)
- 参考框架
- 广义坐标
- 联合类型
- 主要类型的串行机械手
- 串行机械手应用
1. 自由度
“自由度”(DoF)是指定义空间机制的位置或配置所需的最小变量数。
实例:两个自由度的机械手
这是一个两个自由度的机械手,其原点时p0(0, 0),中间节点p1, 和最终控制点p2。
下面使用matplotlib来完成对两自由度机械臂的模拟。
import matplotlib.pyplot as plt
import numpy as np
# 定义一个函数来计算机械手的位置
def compute_arm_config(link1_length, link2_length, joint0_angle, joint1_angle):
joint1_x = link1_length * np.cos(joint0_angle)
joint1_y = link1_length * np.sin(joint0_angle)
p2_x = joint1_x + link2_length * np.cos(joint1_angle)
p2_y = joint1_y + link2_length * np.sin(joint1_angle)
return joint1_x, joint1_y, p2_x, p2_y
# 随机生成一个机械手的位置
link1_length = np.random.random() * 30 + 20
link2_length = np.random.random() * 30 + 20
joint0_angle = np.random.random() * 2 * np.pi
joint1_angle = np.random.random() * 2 * np.pi
joint1_x, joint1_y, p2_x, p2_y = compute_arm_config(link1_length, link2_length, joint0_angle, joint1_angle)
print("joint0_angle =", round(joint0_angle * 180 / np.pi, 1), "degrees")
print("joint1_angle =", round(joint1_angle * 180 / np.pi, 1),"degrees")
print("End Effector at x =", round(p2_x, 1),"y =", round(p2_y, 1))
base_x = 0
base_y = 0
plt.plot([base_x, joint1_x, p2_x], [base_y, joint1_y, p2_y])
# 画出原点位置并以一个蓝色正方形表示
plt.plot(base_x, base_y, 'bs', markersize=15, label='Base')
# 画出节点1(joint-1)位置并以一个红色圆形表示
plt.plot(joint1_x, joint1_y, 'ro', markersize=15, label='Joint-1')
# 画出最终执行器的位置以一个绿色三角形表示
plt.plot(p2_x, p2_y, 'g^', markersize=15, label='End Effector')
# plot图的x, y坐标范围
plt.xlim(-100, 100)
plt.ylim(-100, 100)
plt.legend(fontsize=15)
plt.show()
以下为程序的输出,因为机械手的坐标是随机生成的,所以每次运行程序得到的图形都不会一样。
下面是compute_arm_config()
函数的数学解释。
x
1
=
l
1
c
o
s
(
Θ
1
)
x_1=l_1cos(Θ_1)
x1=l1cos(Θ1)
y
1
=
l
1
sin
(
Θ
1
)
y_{1} = l_{1}\sin(\Theta_{1})
y1=l1sin(Θ1)
x
2
=
l
2
c
o
s
(
Θ
1
+
Θ
2
)
x_2=l_2cos(Θ_1+Θ_2)
x2=l2cos(Θ1+Θ2)
y
2
=
l
2
sin
(
Θ
1
+
Θ
2
)
y_{2} = l_{2}\sin(\Theta_{1}+\Theta_{2})
y2=l2sin(Θ1+Θ2)
x
2
=
l
1
c
o
s
(
Θ
1
)
+
l
2
c
o
s
(
Θ
1
+
Θ
2
)
x_2=l_1cos(Θ_1)+ l_2cos(Θ_1+Θ_2)
x2=l1cos(Θ1)+l2cos(Θ1+Θ2)
y
2
=
l
1
sin
(
Θ
1
)
+
l
2
sin
(
Θ
1
+
Θ
2
)
y_{2} = l_{1}\sin(\Theta_{1}) +\ l_{2}\sin(\Theta_{1}+\Theta_{2})
y2=l1sin(Θ1)+ l2sin(Θ1+Θ2)
当我在编写程序时,我忘记了在第二个节点的位置需要加上第一个节点的角度,这个失误在以上的程序已经进行了更正。
2.广义坐标
同样的逻辑,计算一个2自由度机械手的末端执行器的位置可以应用到任何类似的n自由度系统的关节和链接约束到一个平面。对于每个新的关节/链接对,都要添加一定程度的自由度,并且需要一个额外的坐标来完整地描述系统的配置。
用于描述系统的瞬时配置(时间快照)的坐标通常称为广义坐标。“广义”一词指的是这样一种概念:对于任意的系统,这些角可以是角、x和y坐标,甚至是一些没有几何意义的其他量。
在前面的2自由度手臂示例中,所使用的广义坐标集由两个关节角组成。但是,也可以用其他的广义坐标,比如,第一个连杆的角度和末端执行器的x和y位置,或者关节和末端执行器的x和y位置。然而,在这些情况下,会有3和4个坐标,分别。这是因为关节和末端执行器的x和y位置不是独立的。它们通过固定链接长度(L)的约束相互关联
DoF =独立广义坐标个数
描述系统构型所需的独立广义坐标的个数等于自由度的个数。在2自由度机械手的练习中选择了两个特定的关节角度相对于一个特定的参考系,但是我们也可以很容易地选择其他角度相对于其他参考系。事实上,描述一个系统的广义坐标的可能选择数是无限的,但明智的选择是使用哪一组坐标最能简化需要解决的问题。
在串行机械手的机器人技术中,经常会遇到“位型空间(configuration)”或“关节空间(joint space)”这个术语,它指的是机械手可能具有的所有可能构型的集合。理解位型空间对于路径规划和避障非常重要。
3.空间坐标
一个刚体在空间坐标中具有六个自由度
- 位置(x, y, z)
- 角度(α,β,γ)
一个点在空间中具有3个自由度
- 位置(x, y, z)
4.节点连接类型
机构学运动副
如图所示,节点可以分为具有一个自由度(DoF)的低阶对和具有两个或三个自由度(DoF)的高阶对。用于串行操作器,最常见的关节类型是转动副和移动副,分别允许一个转动自由度和一个平移自由度。
出于建模目的,高阶对总是可以被低阶对的集合所取代,因此在不失一般性的情况下,我们可以将注意力仅限于转动副和移动副的1自由度的关节连接类型。
这里所示的系列机械手有n=3个关节:2个转动关节(圆柱)和1个移动关节(正方形)。每个关节连接两个连杆,所以连杆总数为n+1 = 4。注意,
θ
1
θ_1
θ1描述的转动连接地面和关节1和关节2之间的连杆上。因此,任意具有3个1自由度关节的串联机械手的自由度总数为:
D
o
F
=
6
(
连
接
体
的
数
量
)
−
5
(
1
自
由
度
关
节
数
量
)
DoF = 6(连接体的数量)- 5(1自由度关节数量)
DoF=6(连接体的数量)−5(1自由度关节数量)
=
6
(
3
)
−
5
(
3
)
= 6(3)-5(3)
=6(3)−5(3)
=
3
=3
=3
结论:
对于只有转动关节和/或移动关节的串行机械手,自由度的数量总是等于关节的数量。这个规则的例外是当机械手的两端都是固定的(闭合链链),如下图所示。
如果机械手的自由度超过了给定任务的要求,则称为运动学冗余或过度约束。例如,如果用一个三自由度臂来定位平面上的刚体,它将有一个冗余度,因为只需要两个广义坐标来定位平面上的一个点。然而,为了同时控制平面上刚体的位置和方向,需要一个具有至少三个自由度的机械手。
运动学冗余机械手具有许多优点。额外的自由度意味着他们更灵巧(末端执行器可以达到更多的点与任意方向)和更好地避免障碍。因为它们在路径规划方面有更大的灵活性,它们也可以更有效地利用能源。然而,冗余是有代价的,需要更复杂的控制手段。
5.机械手类型
机械手大致有一下几种类型
- 笛卡尔(PPP)
- 圆柱(RPP)
- 拟人(RRR)
- SCARA(RRP)
- 球形(RRP)
首先先介绍一下工作区的概念
工作区
工作空间是末端效应器可到达的所有点的集合,并且是在为任务选择操纵器时的主要设计约束。
工作空间可以分为两个区域:可到达的工作空间,即简单术语工作空间所暗示的内容.
以及灵巧的工作空间。灵巧工作空间是末端效应器可以任意方向到达的所有点的集合。灵巧的工作空间是可到达工作空间的子集。
在许多情况下,例如,加工或涂漆,工具尖端必须以特定配置与环境相互作用以便具有期望的结果,从而确保任务完全位于操纵器的灵巧工作空间内是。但是,精确定义灵巧工作空间的边界可能非常困难
(1)笛卡儿机械手(ppp)
笛卡尔机械手的前三个关节是具有相互正交平移轴的平移关节。
优点:
• 可以具有很高的定位精度
• 大型有效载荷(龙门架)
• 最简单的控制策略,因为没有旋转运动
• 非常坚硬的结构
缺点:
• 所有固定装置和相关设备必须位于其工作空间内
• 需要大的操作量
典型应用:
• 码垛
• 重型装配操作(例如汽车和飞机机身)
(2)圆柱机械手(RPP)
顾名思义,圆柱形机械手的关节是腕部中心相对于基部的圆柱坐标。
优点:
• 大,易于可视化工作范围
• 它们的尺寸和有效载荷相对便宜
缺点:
• 平均速度低
• 比SCARA重复性更低
典型应用:
• 取决于尺寸,用于精密装配的小型版本,用于材料处理的大型版本,机器装载/卸载
(3)拟人机械手(RRR)
拟人化(有时称为铰接式)操纵器提供相对较大的工作空间和紧凑的设计。第一个旋转关节具有垂直旋转轴,可以被认为是模仿人类在腰部旋转的能力。另外两个旋转关节具有垂直于“腰部”的旋转轴,并且模仿一个DoF“肩部”和一个DoF“弯头”。
优点:
• 大工作空间
• 设计紧凑
缺点:
• 位置精度和可重复性不如其他一些设计好
典型应用:
• 焊接,喷漆,去毛刺,材料处理
(4)SCARA(RRP)
SCARA,或选择性顺应装配机器人手臂,是由山梨大学(日本)教授Hiroshi Makino在20世纪80年代初发明的。SCARA机器人通常采用单个旋转腕部,其旋转轴线平行于其他两个旋转关节。由于基部连杆通常容纳用于前两个关节的致动器,因此致动器可以非常大并且移动连杆相对较轻。因此,通过这种设计可以获得非常高的角速度。臂在垂直(z轴)上非常坚硬,但在xy平面上相对柔顺,这使其成为诸如将钉子或其他紧固件插入孔中的任务的理想选择。
优点:
• 快速
• 结构紧凑
缺点:
• 需要大垂直运动的操作
典型应用:
• 平面环境中的精密,高速,轻型组装
(5)球形(RRP)
像圆柱形机械手一样,球形机械手的手腕中心也可以描述为众所周知的坐标系。这种运动类型最着名的版本可能是斯坦福的Scheinman手臂,由Victor Scheinman于1969年发明。
它被制造商改编成为组装和点焊产品的领先机器人,从用于汽车的燃油泵和挡风玻璃刮水器到用于打印机的喷墨墨盒。
优点:
• 大工作空间
缺点:
• 复杂坐标更难以可视化,控制和编程
• 精度低
• 比较慢
典型应用:
• 物料搬运
• 点焊
在这里没有涉及的另一种类型,称为并行机械手。并联机械手具有许多变型,但它们的特征在于都具有至少一个闭合运动链。动力学和控制策略可能比串行操纵器复杂得多,但一般来说,由于它们的结构刚性,它们具有更精确的运动。