1.3 工件坐标系
ABB工业机器人有不同的坐标系(见图1-31)。其中,世界坐标系(World coordinates)不可修改。对于非Multimove机器人控制系统,通常ABB工业机器人的基坐标系(Base coordinates)与世界坐标系(wobj0坐标系)重合。对于Multimove机器人控制系统,需要设置机器人的基坐标系相对wobj0坐标系的关系,如图1-32所示。设置基坐标系与wobj0坐标系时,可以通过进入示教器的“校准”界面,选择图1-33中的“基座”完成设置。设置结果可以在示教器的“控制面板”—“配置”—“主题”—“Motion”—“Robot”中查看,如图1-34所示。

图1-31 ABB工业机器人的不同坐标系

图1-32 机器人基坐标系相对wobj0坐标系的关系

图1-33 设置机器人基坐标系时的界面

图1-34 机器人基坐标系的数据记录界面
图1-31中的工具坐标系即1.2节所述的TCP,图1-31中的wobj1坐标系即工件坐标系(Workobject coordinates)。图1-35中的坐标值表示当前工具mytool2所代表的TCP在wobj1坐标系下的值。

图1-35 机器人手动操纵界面
1.3.1 数据解释
ABB工业机器人工件坐标系中的wobjdata数据由以下成员构成:

wobjdata数据中的各成员解释如下。
● robhold
数据类型:bool。
TRUE:表示机械臂正夹持着工件,即使用一个固定工具。
FALSE:表示机械臂未夹持工件,即机械臂正夹持着工具。通常为FALSE。
● ufprog
数据类型:bool。
TRUE:表示uframe可以编程修改,通常为TRUE。
FALSE:表示uframe不可编程修改,常用于uframe被外轴驱动或者被输送链驱动。
● ufmec
数据类型:string。
默认为空。若ufprog为FASLE,此处输入驱动uframe移动的外轴,如输送链或者变位机。
● uframe
数据类型:pose。
表示当前工件坐标系中的用户坐标系(见图1-31中的用户坐标系)在坐标系wobj0(世界坐标系)中的位置关系。
● oframe
数据类型:pose。
表示当前工件坐标系中的目标坐标系(见图1-31中的Object coordinates)在坐标系uframe中的关系,即在用户坐标系中定义目标坐标系。
ABB工业机器人的工件坐标系由两个坐标系(用户坐标系和工具坐标系)构成。如图1-35所示的机器人位置是当前TCP在工件坐标系中oframe下的值。
1.3.2 定义工件坐标系
可以使用三点法定义工件坐标系。例如,要定义工件坐标系wobj1里的uframe,可以使用已经校准好的TCP。分别移动TCP到如图1-36所示的User下的 X 1 、 X 2 和 Y 1 点,记录各自位置,然后单击示教器中的“计算”按钮,得到在工件坐标系wobj1下的数值。
注:工件坐标系wobj1的 X 方向为 X 1 到 X 2 点, Y 1 点与 X 1 X 2 连线的垂线的垂足为坐标系原点(uframe的原点),垂足指向 Y 1 点为坐标系的 Y 方向。坐标系的 Z 方向根据右手法则获得(见图1-37)。

图1-36 定义工件坐标系

图1-37 右手坐标系法则
定义工件坐标系中的uframe的具体步骤如下。
(1)如图1-38所示,在“手动操纵”中选择已经校准的“工具坐标”。

图1-38 选择已经校准的“工具坐标”
(2)如图1-39所示,选择要定义的工件坐标系并单击“定义”。

图1-39 选择要定义的工件坐标系并单击“定义”
(3)选择“用户方法”(见图1-40),参照图1-36所示的记录点位并获得计算结果。此时,由于只选择了“用户方法”,所以计算得到的结果会赋值到工件坐标系wobj1的uframe数据中,oframe数据均为0。

图1-40 选择“用户方法”
(4)此时移动TCP到图1-36所示的uframe原点位置,在图1-38所示的界面中可以看到当前位置的“X”“Y”“Z”为0、0、0。若不为0、0、0,则可以检查坐标系中的oframe是否有数值,这是因为图1-38显示的是在oframe下的位置,而oframe又是相对于uframe的。
(5)记录完位置后,单击图1-40中的“位置”,保存示教器中记录的点位。
(6)若要同时定义uframe和oframe,可以按图1-41所示,同时选择两种方法,按照图1-36所示的示教器记录即可。
注:无论选择哪种方法,机器人在记录这些点时,均记录当前TCP在wobj0下的位置,若同时选择“用户方法”和“目标方法”,则机器人会在分别计算出2个frame值后将oframe的值从wobj0下换算到uframe下。

图1-41 同时定义“用户方法”和“目标方法”
1.3.3 DefFrame指令
1.3.2节介绍了使用示教器定义工件坐标系的方法。RAPID提供了定义坐标系(frame)的函数DefFrame,示教器就是通过调用该函数来定义工件坐标的。
(1)frame:=DefFrame ( p 1 , p 2 , p 3 \Origin:=1)
表示点 p 1 到点 p 2 为坐标系的 x 方向; p 1 、 p 2 和 p 3 点构成 xy 平面;Orgin:=1表示原点在点 p 1 处,如图1-42所示。

图1-42 DefFrame函数定义坐标系,Origin参数为1
(2)frame:=DefFrame ( p 1 , p 2 , p 3 \Origin:=2)
表示点 p 1 到点 p 2 为坐标系的 x 方向; p 1 、 p 2 和 p 3 点构成 xy 平面;Origin:=2表示原点在点 p 2 处,如图1-43所示。

图1-43 DefFrame函数定义坐标系,Origin参数为2
(3)frame:=DefFrame ( p 1 , p 2 , p 3 \Origin:=3)
表示点 p 1 到点 p 2 为坐标系的 x 方向; p 1 、 p 2 和 p 3 点构成 xy 平面;Origin:=3表示原点在点 p 3 到 p 2 p 1 连线的垂足处,如图1-44所示。

图1-44 DefFrame函数定义坐标系,Origin参数为3
DefFrame函数的使用示例如下:

1.3.4 工件坐标系计算原理及实现
1.3.3节介绍了如何使用DefFrame函数计算获得坐标系。在ABB工业机器人的示教器中定义坐标系时,默认使用的是“DefFrame( p 1 , p 2 , p 3 \Origin:=3)”的函数,即坐标系原点在点 p 3 到 p 1 p 2 连线的垂足处。
DefFrame函数返回的是pose类型的数据(位姿数据),即在计算时,要计算坐标系的原点位置( x 、 y 、 z )和坐标系姿态。
假设空间3点为 p 1 ( x 1 , y 1 , z 1 )、 p 2 ( x 2 , y 2 , z 2 )和 p 3 ( x 3 , y 3 , z 3 )。由点 p 3 向 p 1 p 2 连线做垂线,垂足为点 p 4 ( x , y , z ), p 4 即为需要求解的坐标系原点(见图1-45)。

图1-45 三点计算坐标系
把经过点 p 1 和点 p 2 的空间直线称为 L 1 ,可以用式(1-31)表示:

由于向量
垂直于
,根据向量点积规则,
。


为方便书写,记:

将式(1-31)和式(1-32)整理为式(1-33):

计算式(1-33)即可得到由点 p 1 、 p 2 和 p 3 构成的坐标系原点。RAPID提供求解 AX = B 的指令“MatrixSolve A , B , X ”,计算结果存储于 X 数组中。MatrixSolve中使用的数据类型为dnum,在调用时可以使用NumToDnum和DnumToNum函数进行转化。
对于坐标系原点姿态,则可以通过向量的叉乘得到,如图1-46及图1-47所示。

图1-46 三点计算坐标系姿态

图1-47 叉乘运算表示
计算过程如下:
(1)向量
单位化,得到单位向量
;
(2)向量
单位化,得到单位向量
;
(3)向量
叉乘向量
,得到单位向量
;
(4)单位向量
等于单位向量
叉乘单位向量
;
(5)得到单位向量
、单位向量
、单位向量
;
(6)将旋转矩阵
转化为欧拉角;
(7)利用OrientZYX函数将欧拉角转化为四元数。
综合以上计算坐标系原点与姿态的介绍,可以编写RAPID代码如下,运算结果与DefFrame(p1,p2,p3\Origin:=3)相同:



