![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=1738155269-KZVOL6CGmJ99DC76nZqp4JLlAnSd0spU-0-aabd59a9bde5201946c0a388f0f473c2)
图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=1738155269-dMLBgUAVUYcOca8ZTVo5sBqE5yCxvRze-0-1d38afcfdba1503f0c42444a70746b0c)
对于“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=1738155269-ao0kL3Q9hIsN6HoYVaxdYenfIAysKyhn-0-234520cb8ebc9aa8e808fe65f6708dbe)
若使用了PDispSet或者PDispOn指令后,机器人在工件坐标系的oframe上右乘了一个DispCoordinate,则Target_100转化到wobj0下的位姿表达式:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_2.jpg?sign=1738155269-znhEhBXxKq475qg1jfpHSAM5MBTczbnO-0-997a5448ad38d4935c0c96473037de85)
也可用上式去验证1.5.1节中的PDispSet功能:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_3.jpg?sign=1738155269-GernyOc4t2lG663jCDJq3fW9CAWuhMfD-0-36d1739a17bc6f909dffdb6c3f79c514)
执行完以上代码第一行后,机器人走到图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=1738155269-m8T9AWz7YRNaTmPo2shRj8vxdKWkNxHP-0-c538b3a2a390fbacddc4afdd42851987)
根据式(1-36),编写如下代码,计算得到位移坐标系pose数据。
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_5.jpg?sign=1738155269-PsccaC9R747d7dSrbA2nF1aOCyNMNJiL-0-5615fc8c7068254f0bced07bf0a7a878)
RAPID编程提供了progdisp数据类型用来存储位移坐标系,提供系统数据C_PROGDISP获取当前使用的位移坐标系。运行自行编写的cal_disp函数,计算结果与系统数据C_PROGDISP返回的结果一致,可知式(1-36)正确:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_64_6.jpg?sign=1738155269-udeFmHyxGdhoXNUaKCUbOYuBA40X3mre-0-96d3fd1523f657a4635183c3f4ec908d)
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_65_1.jpg?sign=1738155269-CCwWzm2tYB0UK8Boq9haq90OXYqFQqHk-0-ad0392a74c9744d05280692b1495ec31)
根据以上代码,整理后可以编写自定义指令PDispOn1(PDispOn指令的原理实现),后续参数和实现功能与系统提供的PDispOn指令完全相同:
![](https://epubservercos.yuewen.com/315336/23950325101463306/epubprivate/OEBPS/Images/43597_65_2.jpg?sign=1738155269-9MW6iWM5K0DYGuE6gqGOKSl3BKmi7YKQ-0-aaa672d11c73b08440e258dc70eeaf67)
“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=1738155269-w5rLcpdDt3KQ4QcACexZSBABjSoImoQm-0-bf130012a6f0f57062fdc9b5f2aeb2c3)
图1-70 PDispOn位移坐标系修正原理