1.4.4 左乘与右乘
由1.1.1节所知,机器人的姿态数据可以由3×3的旋转矩阵表示,位姿可由4×4的齐次矩阵表示。矩阵的乘法不满足交换律,即矩阵A×B通常不等于B×A。
由1.1.4小节所知,姿态数据A右乘一个姿态数据B得到新的姿态C(C=A×B),相当于姿态A绕着自身旋转了姿态B得到新姿态数据C,参考坐标系为姿态A,如图1-53所示。
而姿态数据A左乘一个姿态数据B得到新的姿态C(C=B×A),相当于姿态A绕着姿态A参考的坐标系方向(w0)旋转了姿态B得到新姿态数据C,参考坐标系为姿态w0,如图1-54所示。
图1-53 姿态数据的右乘
图1-54 姿态数据的左乘
使用工具MyTool,在工件坐标系workobject_1下记录原始点位p3000[见图1-55(a)]。使用姿态数据右乘相当于使用了RelTool(p3000,0,0,0\Rx:=rx\Ry:=ry\Rz:=rz)的效果(注:RelTool的旋转顺序为x-y-z),即绕原有点位p3000的姿态旋转。执行以下代码,机器人最终的姿态如图1-55(b)所示。
图1-55 姿态数据的右乘
使用姿态左乘,相当于把workobject_1的原点平移到p3000位置(x-y-z),p3000的姿态绕着平移到p3000后的workobject_1的姿态旋转。执行以下代码,机器人最终的姿态如图1-56(b)所示。
图1-56 姿态数据的左乘
机器人当前的TCP如图1-57(a)所示,此时TCP的z方向沿着抓手方向(与工件产品平行),TCP的x方向垂直于工件产品表面。
通过外设(激光测距等设备),可得知当前工件设备绕自身旋转了一定角度(如10°),如图1-57(b)所示。
图1-57 机器人当前的TCP和工件设备绕自身旋转一定角度
希望机器人能调整自身姿态,使得抓手与旋转10°后的产品平行,并沿着产品方向前进100mm。此时即可使用姿态的左乘调整姿态(令图1-58中原始位姿的tx、ty、tz绕着与Base坐标系平行的一个坐标系的z轴旋转10°),再使用RelTool沿着工具方向前进,具体实现如以下代码所示。
图1-58 机器人的原始位姿
综上,可以编写如下基于工具/工件坐标系的偏移和旋转函数:
若选择参考tool,则实现方式采用RAPID标准的RelTool指令;若选择参考wobj,则先沿着wobj平移,再绕着wobj的姿态方向旋转,使用参考wobj,效果同在示教器中使用重定位,参考坐标系为“工件坐标系”,如图1-59所示。
图1-59 重定位参考坐标系为工件坐标系
同理,在使用PoseMult函数时也存在左乘与右乘的区别。右乘为绕着当前坐标系先平移后旋转(如图1-60所示,位姿A先沿着坐标系A平移到A′,再绕着A′旋转得到位姿C,即C=A×B)。PoseMult左乘则为位姿A绕着参考的固定坐标系(位姿w0)的原点先旋转位姿B中的姿态数据,再沿着原有参考坐标系(w0)平移位姿数据B中的位置部分,得到新位姿C(C=B×A),如图1-61所示。
图1-60 位姿数据的右乘
图1-61 位姿数据的左乘
使用工具MyTool,在工件坐标系workobject_1下记录原始点位p3000[见图1-62(a)]。使用p3000中的位姿数据右乘位姿数据pose1([[30,0,0],OrientZYX(45,0,0)]),即先沿着p3000原始姿态的x方向平移30,得到图1-63中的x1、y1、z1,再绕x1、y1、z1的z轴旋转45°得到x2、y2、z2。执行以下代码,机器人最终的姿态如图1-62(b)所示。
图1-62 位姿数据的右乘
图1-63 位姿数据的右乘
使用工具MyTool,在工件坐标系workobject_1下记录原始点位p3000[见图1-64(a)]。使用p3000中的位姿数据左乘位姿数据pose1([[30,0,0],OrientZYX(90,0,0)]),即p3000绕着参考坐标系workobject1的原点的z轴旋转90°,得到图1-65中的位姿1,再将位姿1沿着workobject1的x方向平移30得到图1-65中的位姿2,即最终位姿。执行以下代码,机器人最终的姿态如图1-64(b)所示。
图1-64 位姿数据的左乘
图1-65 位姿数据的左乘