上一节已经展示了机械臂的正运动学求解方法,即在给定关节坐标以及可选工具和基座变换的条件下,如何确定末端执行器的位姿。
实际应用中的另一个问题是运动学的逆问题:给定期望的末端执行器位姿 ξ E \xi_E ξE,如何求取所需的关节坐标?例如,如果我们知道一个物体的笛卡儿坐标位姿,那么机器人需要什么样的关节坐标才能接近这个物体?这就是逆运动学问题,写成函数形式如下:
q = K − 1 ( ξ ) q=\mathcal{K}^{-1}(\xi) q=K−1(ξ)一般而言这个函数的解不是唯一的,而且对于某些类型的机械臂甚至没有解析解存在,只能求出一个数值解。
解析解
对于一个六轴机器人,其逆运动学具有解析解的一个必要条件是:三个腕关节的轴相交于一个点。这意味着腕关节的运动只改变末端执行器的姿态,而不改变其位置。这种机构被称为球腕,而且几乎所有的工业机器人都具有这样的腕关节。
我们将继续使用Puma机器人模型来探讨逆运动学问题。机器人标准状态的关节坐标为
>> mdl_puma560
>> qn
qn =
0 0.7854 3.1416 0 0.7854 0
对应的末端执行器位姿是
>> T = p560.fkine(qn)
T =
-0.0000 0.0000 1.0000 0.5963
-0.0000 1.0000 -0.0000 -0.1501
-1.0000 -0.0000 -0.0000 -0.0144
0 0 0 1.0000
Puma560 是一种包含一个球腕的六轴机器人,因此我们使用ikine6s
方法来计算其逆运动学的封闭解(ikine6s
方法会检查机器人的 D-H 参数,以确定它是否满足这些标准)。要实现位姿T
,所需的关节坐标为
>> qi = p560.ikine6s(T)
qi =
2.6486 -3.9270 0.0940 2.5326 0.9743 0.3734
奇怪的是,这些解与我们开始采用的标准状态关节坐标完全不同。但是,如果我们进一步探究一下:
>> p560.fkine(qi)
ans =
-0.0000 0.0000 1.0000 0.5963
-0.0000 1.0000 -0.0000 -0.1500
-1.0000 -0.0000 -0.0000 -0.0144
0 0 0 1.0000
我们发现,两组不同的关节坐标值得到了相同的末端执行器位姿,而这两组坐标值对应的机器人位形如图所示。该 Puma 机器人的肩关节相对于腰部有个水平偏移,所以一组坐标解对应的机械臂在腰部的左侧,而另一组则对应在右侧,它们分别被称为左手运动学位形和右手运动学位形。一般来说,有 8 8 8 组不同的关节坐标值可以得到相同的末端执行器位姿——正如前面所提到的,逆解不是唯一的。
我们可以人为指定获得右手位形解:
>> qi = p560.ikine6s(T, 'ru')
qi =
-0.0000 0.7854 3.1416 -0.0000 0.7854 0.0000
它就是我们最初的那组关节角度,并且是肘关节在上的右手位形。
除了左手位形和右手位形的解,还有一些解对应肘关节在上或在下,以及手腕翻转或不翻转。对于 Puma560 机器人的腕关节 θ 4 \theta_4 θ4 ,具有一个较大的旋转范围,因此其可以采用两个相差 π \pi π 的关节角度。又由于大多数机器人夹持器只需两个手指,因此相差 π \pi π 并不会改变它抓取物体的效果。
由ikine6s
返回的运动学位形由一个或多个字来控制
左手或右手 | 'l' ,'r' |
---|---|
肘部在上或在下 | 'u' ,'d' |
手腕是否翻转 | 'f' ,'n' |
由于关节转角上的机械限制以及连杆之间可能发生的碰撞,并不是所有 8 8 8 种位形解在物理上都可以实现,有时甚至可能不存在可以实现的解。例如:
>> p560.ikine6s(transl(3, 0, 0))
警告: point not reachable
> In SerialLink/ikine6s (line 210)
ans =
NaN NaN NaN NaN NaN NaN
以上位姿就没有对应的解,这仅仅是因为手臂的长度不足以达到这个位姿。另外,由于奇异位形的存在,即关节轴线重合而减少了有效自由度(再次出现万向节锁问题),某个姿态也可能是无法实现的。Puma560 有一个奇异位形,即当 q 5 q_5 q5 等于零时,关节 4 4 4 和关节 6 6 6 之间的轴线重合了。在这种情况下,ikine6s
可以做到最好的是限制 q 4 + q 6 q_4+q_6 q4+q6,但它们各自的数值却是任意的。例如,考虑位形:
>> q = [0 pi/4 pi 0.1 0 0.2];
其中 q 4 + q 6 = 0.3 q_4+q_6=0.3 q4