![ABB工业机器人进阶编程与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/794/44819794/b_44819794.jpg)
1.1.4 pose数据相关函数
假设位姿pose数据p1在坐标系wobj0下的值为pose1(x,y,z,rz,ry,rx),其中,rz,ry和rx为欧拉角,则p1在wobj0下的位姿如图1-8所示,即先将pose数据沿着wobj0的x0、y0和z0三个方向平移x、y和z距离,得到新的pose数据wobj0′。再将wobj0′绕着wobj0′的本地坐标系旋转欧拉角R(rz,ry,rx)。
注:欧拉角旋转过程为绕当前的动坐标系,即先绕z轴,其次绕旋转后新的y轴,最后绕旋转后新的x轴,具体参见1.1节中的图1-6。
1.PoseMult
如图1-9所示,坐标系p2在坐标系p1下的位姿表示为pose2,p1在坐标系p0下的位姿表示为pose1,那么坐标系p2在坐标系p0下的位姿可以表示为pose3,pose3=pose1*pose2。对于以上公式,ABB工业机器人RAPID编程提供了PoseMult函数来实现,即
pose3:=PoseMult(pose1,pose2)
简单来说,PoseMult(pose1,pose2)可以理解为一个与pose1相同的坐标系,在pose1坐标系下平移pose2.trans,再绕着新的坐标原点旋转pose2.rot,此时的新pose在p0坐标系下表示为pose3。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_19_2.jpg?sign=1739409560-dJkMk73gf7THhbs303OoA0snNkIXfhw9-0-594050ca58f29a9294152c84242899e9)
图1-8 p1在坐标系wobj0下的变换
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_19_3.jpg?sign=1739409560-4AUOFVlRn5E8yAZXE26zvSlLThRDDySr-0-59d27947583dd4b8c07f998b51d7efba)
图1-9 p2在2个坐标系下的表示
由前文所知,对于位姿数据,可以用pose表示,也可用齐次变换矩阵表示。若把图1-9中的pose1和pose2用齐次变换矩阵表示,则可以得到如下公式:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_19_4.jpg?sign=1739409560-a0w9tzUJx9U1BV0ZPYhktnQyrcCt7CVy-0-e945a3370ddb3507acf443b543a837a4)
其中:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_20_1.jpg?sign=1739409560-ln1iKPbGqHLGFOR5LhcFqC43CcTp92zb-0-fb4a92eaf0c697d47169e7cc3c84042a)
对于PoseMult函数,也可自行编写函数来实现,即将pose转化为4×4的齐次变换矩阵并完成2个矩阵的乘法,最后将4×4的矩阵转为pose类型的数据即可,具体代码如下:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_20_2.jpg?sign=1739409560-C98AUeO0FPXDeZ7RvCfwnLupz1wcNfcJ-0-d3cbb40a767d985a9c07dc9b422dabf3)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_21_1.jpg?sign=1739409560-OuooixVBIInN3NKsczv3WkNhxwYLGPaf-0-0809fbdbf4bd6654c28d51e20208bdbd)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_22_1.jpg?sign=1739409560-hmK5SX3vNjNaXDZ6BNHDN5sWImoYKWlH-0-2f66d31380bcd05984e2c81d32b018b5)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_23_1.jpg?sign=1739409560-Kqxt9llkrwSXLyQo3VcjEN5cVIYJ91kf-0-611d7e30ec4211b31db5d8d8ccd9f2d0)
2.姿态数据旋转及求逆
对于某位姿数据p1,若只需要绕自身原有姿态旋转一定角度(见图1-10),则可采用PoseMult(p1,[[0,0,0],EulerZYX(Rz,Ry,Rx)])实现,即不平移只旋转。实际上,位姿绕自身旋转,就是姿态数据的右乘。RAPID可以采用如下语句实现:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_24_1.jpg?sign=1739409560-lyOM5izoHUijQ9T6gyy0fVDhdYdTDzZt-0-6216ddaa8b04722df646c06da7341d55)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_24_2.jpg?sign=1739409560-rUs2mTLOyGOoNijPkBprrJLlq3N2HuME-0-efac3e1efddbabbf88aa1f0b57e703f3)
图1-10 位姿绕自身旋转
考虑到直接对四元数赋值不方便,上面指令语句也可写为
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_24_3.jpg?sign=1739409560-1I1AmMVRVBHWQAj7iYGDnol0YGo5fApy-0-f4a2910c9cbeef5e39e5ea0f35a84de6)
例如,绕姿态数据o0的Z轴旋转90°,可以使用如下代码:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_24_4.jpg?sign=1739409560-cT7jQdNFbKtOA0Mdd00jkx9O0fmrCOX0-0-878f9c0b0d1d2caabf7c17b008cf56a9)
根据四元数的定义,其乘法实现如式(1-14),可以自行编写RAPID代码实现2个四元数的乘法。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_24_5.jpg?sign=1739409560-szuSfrNjavXMEtAliUNX5FqAbZOKTq3u-0-bc19838e0671a38864761f105182c689)
图1-10显示了p0.rot绕自身旋转了姿态数据o2后得到新的姿态数据p1.rot。假设o0:=p0.rot,o1:=p1.rot,则o1:=o0*o2。其中,o2为姿态绕o0旋转的姿态数据。那么绕姿态o1旋转一定角度后得到o0,这个旋转姿态就称为o2的逆,可以用o2-1表示。姿态数据乘姿态数据的逆,得到零姿态数据[1,0,0,0],对应的欧拉角为RzRyRx:=[0,0,0]。
RAPID函数未提供四元数求逆函数。根据四元数的逆就是四元数的共轭四元数,即Q(w,x,y,z)-1=Q(w,-x,-y,-z),可以自行编写姿态数据求逆函数,具体代码如下:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_24_6.jpg?sign=1739409560-x1Yjyd2yOYZm9tjxa3Bd7PzmiRFNVZDr-0-433fc5b3a372a39520332ca7d0d53efa)
3.PoseInv
位姿p0到位姿p1的变换为pose1,那么位姿p1到位姿p0的变化pose2就可以称为pose1的逆。图1-11显示了pose1与其逆(pose2)的关系。
pose1*pose1-1=[[0,0,0],[1,0,0,0]],也就是位姿乘其逆等于单位pose(单位矩阵)。单位pose如果用矩阵形式表示,则如下:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_25_1.jpg?sign=1739409560-hcttUu0KIIEN5UGZCe44CuH9zTwXy7wo-0-d048a881dbe1a35cb907ccbcd58f5282)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_25_2.jpg?sign=1739409560-9pKYKENfOq7BalRjXXz7pTjKP8M61dyY-0-fb454896ccb0f6452d0954ea2bc2a320)
图1-11 pose1与其逆(pose2)的关系
RAPID编程中提供了位姿数据pose求逆函数PoseInv,其使用方法如下:
pose2:=PoseInv (pose1)
其中,pose2称为pose1的逆。
对于1.1.4节第2部分中计算姿态数据的逆,也可使用PoseInv函数实现。其中,将pose数据中的trans部分设为[0,0,0]:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_25_3.jpg?sign=1739409560-hY9qgAPfi5vojLSmEG8kVVo40U3i8TfP-0-b8cf2af002fd29780fca4867cf8d703f)
4.PoseVect
空间某点p1的位置用(x,y,z)表示。对于形式如(x,y,z)的数据,也可以称为矢量v。已知p1在坐标系1下的位置是pos1(x1,y1,z1),坐标系1在坐标系0下的位姿表示是pose1,则p1在坐标系0下的位置可以用pos2(x2,y2,z2)表示,如图1-12所示。RAPID编程提供了以上数据关系转化的函数PoseVect,即pos2:=PoseVect(pose1,pos1),该函数的典型应用如图1-13所示,已知TCP坐标系mytool(mytool数据基于tool0),又已知新的TCP是在mytool坐标系的z方向延伸150mm,则新的TCP坐标系mytool2就可以用如下代码实现:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_25_4.jpg?sign=1739409560-CuRSufv31hhoG8XNGejXNh88odKBbTq6-0-80095dee811de283a0cb1017df77fef8)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_25_5.jpg?sign=1739409560-p0G2FVR3fAmNiPHECHDYvuULzfuNmamq-0-a186b5834856eb8024dd50ffc6ffa9c5)
图1-12 p1在不同坐标系下的表示
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_25_6.jpg?sign=1739409560-7Wuh4ySaSantXwPlUi3zv2wV9aT6f2HX-0-f1e44e8a8ed7a611b4f81ddd1c4adcb0)
图1-13 沿工具方向调整TCP
PoseVect(pose1,pos1)的实现就是将pose1转变为Matrix4形式的矩阵,以及将pos1转变为4×1的矩阵(为了齐次化,添加一个元素,即[x,y,z,1]T)。具体RAPID实现如下:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_26_1.jpg?sign=1739409560-7Yqfz44duVqO42InWrysbmvPi7eLTjwu-0-6a9cd1ab1e0befa31dadf97c333037f3)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_27_1.jpg?sign=1739409560-2r3CEbbAIVGSBw0RHDBWUZHeWUAaOZB9-0-ec081072f0a6873d1e8b082fd2cfcc92)