![ABB工业机器人进阶编程与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/794/44819794/b_44819794.jpg)
1.5.2 PDispOn用法及原理实现
如图1-69所示,已经在左侧产品完成了轨迹示教(轨迹移动指令使用wobj0)。为方便演示,轨迹起点处(Target_10),工具TCP的y方向与产品短边平行,工具TCP的x方向与产品的长边平行,工具TCP的z方向垂直于产品表面。此时,另一个同样的产品被摆放到右边。由于产品相同,理论只需要示教右边产品的起点即可完成整个右边轨迹。
针对图1-69的情况,可以使用PDispOn指令。由于轨迹涉及旋转,需保证右侧示教的起点(Target_10_New)姿态和右侧产品关系与左侧起点(Target_10)姿态和左侧产品关系一致。例如,左侧TCP的y方向与左侧产品短边平行,工具TCP的x方向与左侧产品的长边平行,工具TCP的z方向垂直于左侧产品表面;右侧的起点的TCP的y方向与右侧产品短边平行,工具TCP的x方向与右侧产品的长边平行,工具TCP的z方向垂直于右侧产品表面:
PDispOn [\Rot] [\ExeP:=ExePoint] ProgPoint Tool;
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_63_1.jpg?sign=1738882537-DVvPUNlp0suTdAnJAKndbdx760uzlNkl-0-edde7e0b32c5fd8aca368711e9f3d608)
图1-69 PDispOn实现旋转
(1)ProgPoint为旧轨迹的起点,如图1-69中的左侧起点Target_10。
(2)Tool为使用的工具坐标系。
(3)可选参数ExeP表示新轨迹的起点,即指令PDispOn会计算ProgPoint到ExePoint的转化关系并存入后续使用的位移坐标系。
(4)若不选ExeP参数,新轨迹的点默认使用机器人当前停留的点。
(5)若选可选参数Rot,则计算ProgPoint到ExePoint的平移和旋转关系,否则只计算ProgPoint到ExePoint的平移关系。
针对图1-69,示教完左侧轨迹,并且示教完右侧起点Target_10_New,可以使用如下代码完成左右轨迹:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_63_2.jpg?sign=1738882537-Tax9QFTLp5fLaliWQgEaossDvlS96sND-0-6c8d5558dc9347bb994a7a86c0d5dea6)
对于“MoveL Target_100,v1000,fine,MyTool”,机器人在执行时会先将坐标系wobj1下的点Target_100转化到wobj0下,然后做轨迹插补和运动学逆解(具体解释见第2章),即转到wobj0下的p100的位姿表达式:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_1.jpg?sign=1738882537-ZqDQkr5IkkVtcQhX9vymMiDYloXtJrXG-0-3fd5befdb6c7956a7b3893513d9665e5)
若使用了PDispSet或者PDispOn指令后,机器人在工件坐标系的oframe上右乘了一个DispCoordinate,则Target_100转化到wobj0下的位姿表达式:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_2.jpg?sign=1738882537-G52oFX5nn354ZPXFYbPWT5I4SzwOo2U9-0-6cfa80080eaea3b8feab134ffa5be0bc)
也可用上式去验证1.5.1节中的PDispSet功能:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_3.jpg?sign=1738882537-AELv6qSD3lD3dYKzoq1g9Wn8cI49dvkf-0-da383573bb950c5ac2fa37bbe73e7076)
执行完以上代码第一行后,机器人走到图1-69中的左侧起点位置。当执行完第二和第三行后,发现机器人走到图1-69中的右侧起点位置。而第一行和第三行的代码是一样的。第三行代码的Target_10转化到wobj0下的表达式,如式(1-35)。实质上第三行代码机器人走到的位置就是Target_10_New,所以可以得到式(1-36)。其中dispFrame就是要求的位移坐标系:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_4.jpg?sign=1738882537-1nlSujAhCnYHBbXhkxqts6uB0cxnMMI7-0-dbf030e52c19205a87b94805c98a385b)
根据式(1-36),编写如下代码,计算得到位移坐标系pose数据。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_5.jpg?sign=1738882537-av0BPjVUPbkCNfT789nJIeaIVgKHojtn-0-2831aff4e1c868580d8802bfd36a9699)
RAPID编程提供了progdisp数据类型用来存储位移坐标系,提供系统数据C_PROGDISP获取当前使用的位移坐标系。运行自行编写的cal_disp函数,计算结果与系统数据C_PROGDISP返回的结果一致,可知式(1-36)正确:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_6.jpg?sign=1738882537-HaKyBRlEn1lM7ZMI1fcw06xqRYusoSz8-0-eae7b4d5ace5e05695b25372a8df63c8)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_65_1.jpg?sign=1738882537-qp9bTx1vhuIFtA7Yse9m93U1k6SKVWkG-0-6d5048b4fa931b1eda8357519afd65a2)
根据以上代码,整理后可以编写自定义指令PDispOn1(PDispOn指令的原理实现),后续参数和实现功能与系统提供的PDispOn指令完全相同:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_65_2.jpg?sign=1738882537-lfrf7i4I5judZWR8Ma9Uq9oAZ5gulPft-0-c7b957cb39f94c2d85ec55f477c5f0ea)
“PDispOn\Rot\ExeP:=Target_10_New,Target_10,MyTool”指令实质就是希望构建一个dispFrame坐标系,使得在dispFrame坐标系下的Target_10转化到wobj0下就是Target_10_New位姿。由于原始轨迹path_10中的其他点与Target_10参考的坐标系相同,那这些点在位移dispFrame坐标系下的点若转化到wobj0下则与新产品的特征点刚好对齐,如图1-70所示。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_65_3.jpg?sign=1738882537-q071bhrSWDspyuFiBmVOcJ9DawpXKWvT-0-fc383d5d535d185636856f2f38551748)
图1-70 PDispOn位移坐标系修正原理