![ABB工业机器人进阶编程与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/794/44819794/b_44819794.jpg)
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所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_56_1.jpg?sign=1739604762-N6bDYW6wY26qCqwlQCHiijSIEiRAXZ1C-0-f6a339cf9c60fdf81649d37d53025fc4)
图1-53 姿态数据的右乘
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_56_2.jpg?sign=1739604762-DsV0GcxEMM0OUPutdEMsXX7Rut60zgib-0-f317068ee29e9129298b410f138afab2)
图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)所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_56_3.jpg?sign=1739604762-gOXjzdHWVvfUrFbGPtpsW86b2ofXkcKz-0-de6230e69fba10c23b3e4384afe856ff)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_56_4.jpg?sign=1739604762-QMCFj1zLnuUTGdB6etS0tqxJjSkqhnYm-0-b0f8d9299c67e08e358f4b4da83031ee)
图1-55 姿态数据的右乘
使用姿态左乘,相当于把workobject_1的原点平移到p3000位置(x-y-z),p3000的姿态绕着平移到p3000后的workobject_1的姿态旋转。执行以下代码,机器人最终的姿态如图1-56(b)所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_56_5.jpg?sign=1739604762-SkojOzC8Ers2NHmlhcmAhcSl4KUKf5JW-0-4f83c74d43a1f11d637164f6d1569e7e)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_57_1.jpg?sign=1739604762-n56MOKDrzUNSNwgjussJ3X0bRplE5eVb-0-bfcd57a5a88cbd2f83d020eb7d28ba4f)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_57_2.jpg?sign=1739604762-oEVc3T5qevPkZCf4TOixSIrUZG2MB172-0-c382cfd8dde3b8850e68e0a8f1f6f6cb)
图1-56 姿态数据的左乘
机器人当前的TCP如图1-57(a)所示,此时TCP的z方向沿着抓手方向(与工件产品平行),TCP的x方向垂直于工件产品表面。
通过外设(激光测距等设备),可得知当前工件设备绕自身旋转了一定角度(如10°),如图1-57(b)所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_57_3.jpg?sign=1739604762-pblhWUJBKaUA3YKTpIPvLVEzOCaf2eo9-0-02dd01efb0d1bd1df9960e3ce8763faa)
图1-57 机器人当前的TCP和工件设备绕自身旋转一定角度
希望机器人能调整自身姿态,使得抓手与旋转10°后的产品平行,并沿着产品方向前进100mm。此时即可使用姿态的左乘调整姿态(令图1-58中原始位姿的tx、ty、tz绕着与Base坐标系平行的一个坐标系的z轴旋转10°),再使用RelTool沿着工具方向前进,具体实现如以下代码所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_57_4.jpg?sign=1739604762-Zy11vsv8NPz8NIKQcJTzVWo2ikAUNchb-0-d1415f71dc172e0023d3b2d3fb2c1874)
图1-58 机器人的原始位姿
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_58_1.jpg?sign=1739604762-D9gRRrnEPuUOmQSwY78MCl6Ji2mWRNWQ-0-7ad1f6b50da776ed415a6454b3778682)
综上,可以编写如下基于工具/工件坐标系的偏移和旋转函数:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_58_2.jpg?sign=1739604762-ZxoVFW5m5kUA34vVYmYcVMFDQgT9Oepf-0-8709a81c6cf1826d4a34539a7e890513)
若选择参考tool,则实现方式采用RAPID标准的RelTool指令;若选择参考wobj,则先沿着wobj平移,再绕着wobj的姿态方向旋转,使用参考wobj,效果同在示教器中使用重定位,参考坐标系为“工件坐标系”,如图1-59所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_58_3.jpg?sign=1739604762-PaP0XUcSYJ0DRBSl1b3uVLcIGR7I9uu7-0-13d66664ff6ce78128d44c3a5dfc1e5c)
图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所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_59_1.jpg?sign=1739604762-dr9Gs4UgZX046esgg6B8JTtYnWTs6Mc1-0-ff83d21d209322e3eb05518387edcbbd)
图1-60 位姿数据的右乘
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_59_2.jpg?sign=1739604762-8YddxMcnBVTnbTDHR9lvMEa8LF4qpUYH-0-77334e104e0ea3adf248319d12b601e8)
图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)所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_59_3.jpg?sign=1739604762-qmeqmcpfiHb5HTvQu5VINS3ffMbAi16A-0-b0443134c86942382e29cb4c52dfb88f)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_59_4.jpg?sign=1739604762-JmkfxMQY0TdbWYrUWV7MTXss7dFF009Z-0-e9629c864f1d64873aecd61b0a77b032)
图1-62 位姿数据的右乘
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_59_5.jpg?sign=1739604762-ybVPlLNVsA5QvquzvKrhaapuJVkv3c11-0-a21dab2464d41e82cf4e2a2b049e62d4)
图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)所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_60_1.jpg?sign=1739604762-4AlT0E5LaIxIlggVw3W0aGIhzgcjVlVA-0-8bb977e4b7fee993660831f468fda63b)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_60_2.jpg?sign=1739604762-6Nh6od8z0iOtLCo3nMXxqBfFyMinlROu-0-66508371613f446aca790625bd34cabf)
图1-64 位姿数据的左乘
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_60_3.jpg?sign=1739604762-Hkcsq1AuLOaasoTQsVNPFJRPyGq5kFdv-0-239aeada10699fe80be8466e3af692dd)
图1-65 位姿数据的左乘