ABB机器人编程随记
1. 目标点数据结构
基本数据类型和命令
bool
num
string
其他类型的数据类型都是以上三种数据类型的扩展类型。
Robtarget:机器人目标点数据
Trans:工具中心点相对于当前工件坐标系的位置,包含XYZ,单位mm。
Rot:(姿态——四元数),q1,q2,q3,q4,这四个数字的平方和为1。可能涉及到四元数和欧拉角的切换。
Robconf:(使用较少)表示机器人轴配置,包括cf1,cf4,cf6,cfx,前三者表示第一轴、第四轴、第六轴象限数,cdx取决于机械臂类型,对应数据类型是confdata,用来约束机器人姿态,共8种姿态。
问:为什么只关注1,4,6轴呢?有什么相同点?
答:1,4,6轴是旋转轴,2,3,5轴是摆动轴。旋转轴可能超过一圈,整个范围是400°,这样之后就不知道旋转了多少了,10°和370°无法分辨,这时候通过象限来约束。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R5RLnIKN-1638839685044)(C:\Users\Megamind\OneDrive\ABB机器人6个关节轴示意图)]
extax:外轴数据,表示旋转轴或者线性轴,默认为9E9,表示未包含外轴。
例1:
CONST robtarget p1:=[[600,500,225.3],[1,0,0,0],[1,1,0,0],[11,12.3,9E9,9E9,9E9,9E9]];
- 机器人TCP位置:在当前工件坐标系中,xyz分别是600,500,225.3mm
- 采用与当前工件坐标系方向相同的工具方位;
- 机器人的轴配置:轴1和轴4位于90-180°,轴6位于0-90°
- 外轴a和b的位置以度或者毫米表示(根据轴的类型),未定义轴c到f;
CongfL:指定机器人在线性运动及圆弧运动过程中是否严格遵循程序中已设定的轴配置参数。默认情况下轴配置监控是打开的,当关闭轴配置监控后,机器人在运动过程中采取最接近当前轴配置数据的某种配置到达指定目标点。(关闭轴监控后,机器人采取最少改变当前轴配置数据的形式完成指令)
例2:
目标点p10种数据[1,0,1,0]就是目标点的轴配置数据;
CONST robtarget p10:=[[*,*,*],[*,*,*,*],[1,0,1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
PROC rMove()
ConfL \Off;
MoveL p10, v1000, fine. tool0; // 机器人自动匹配一组最接近当前各种关节轴姿态的轴配置数据移动到目标点p10,到达该点时,轴配置数据不一定是程序中指定的[1,0,1,0].
ENDPROC
某些应用场合,如离线编程创建目标点或手动示教相邻两目标点间轴配置数据相差较大时,在机器人运动过程中容易出现报警“轴配置错误”而造成停机,此种情况下,若对轴配置要求较高,则一般通过添加中间过渡点,若对轴配置要求不高,则可通过指令ConfL \Off关闭轴监控,使机器人自动匹配可行的轴配置来达到指定目标点。
此外,ConfJ指令针对的是关节线性运动,例如MoveJ运动过程中轴配置监控状态的设置。
注意:
手动状态下,不管设置的speeddata是多少,限速250mm/s
自动状态下,设置的speeddata,机器人根据speeddata实际是设定值运动。
moveabsJ一般用在第一条指令和最后一条指令中,用来回到home点
VAR变量
程序运行过程中可以被赋值,运动结束,VAR返回默认值
PERS可变量
程序运行结束,PERS保留最后值
CONST常量
你懂的
函数
CalcJointT - 计算机器人位置的接头角
VAR jointtarget jointpos1;
CONST robtarget p1 := […];
jointpos1 := CalcJointT(p1, tool1 \WObj:=wobj1);
CalcRobT - 根据接头位置,计算机器人位置
VAR robtarget p1;
CONST jointtarget jointpos1 := […];
p1 := CalcRobT(jointpos1, tool1 \WObj:=wobj1);
CPos - 读取当前位置(pos)数据
VAR pos pos1;
MoveL *, v500, fine \Inpos := inpos50, tool1;
pos1 := CPos(\Tool:=tool1 \WObj:=wobj0);
CRobT - 读取当前位置(机器人位置)数据
VAR robtarget p1;
MoveL *, v500, fine \Inpos := inpos50, tool1;
p1 := CRobT(\Tool:=tool1 \WObj:=wobj0);
2. 工业机器人只有八种姿态:
3. 奇异点
六轴机器人无法避免奇异点,四轴没有这个问题。输入目标点后,机器人逆运算出来得到多个轴配置的情况,机器人无法运动,此时报错奇异点。腕奇异点最常见。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ejAkqwv-1638839685046)(C:\Users\Megamind\OneDrive\ABB机器人奇异点)]
手动操作时只需要切换到单轴模式打破奇异点状态就行;
编程时遇到奇异点怎么办:
- 前期布局设计时,应尽量避免机器人运动过程靠近奇异点;
- 在关节类型运动期间,机器人通过奇异点时一般不会出现问题;
- 在接近奇异点处执行先行或者圆弧路径时,某些关节周(1与6或者4与6)的速率可能极大,为避免超过最大关节速率,可降低直线路径速率;
- 在接近奇异点处执行先行或者圆弧路劲时,建议参考大幅运动过后的关节轴数据,从而尽量减少机器人在该运动过程中关节轴出现大幅度运动;
- 利用指令SingArea \Wrist,在线性或者圆弧运动至奇异点时,可让机器人TCP继续保持当前路径,但是这种方式可能会导致工具姿态发生变化,若工艺要求不允许工具姿态变化,就不能用这个指令。
- 不要让机器人停留在奇异点,不然会导致机器人关节发生不可预测的移动。
1. 工具坐标系数据结构
Tooldata:用于描述工具(例如,焊枪或者夹具)的特征,次类特征包括工具坐标系TCP的位置和方位以及工具负载的物理特征,如果工具是固定在空间中,则工具数据定义在大地坐标系种该工具的位置和方位,并且描述机器人所移动夹具的负载。
负载数据必须准确设定,否则往往会引起以下后果:
- 机器人运动精度降低,尤其是停止运动过程
- 机器人误触发动作监控报警
- 机器人结构过载,增加机械磨损
参数:Robhold
数据类型:bool
定义机器人是否夹持工具:TRUE 、FALSE
参数:tframe
数据类型:pose:[[x,y,z],[q1,q2,q3,q4]]
工具坐标系,即TCP的位置和工具方向,机器人夹持工具则其相对于腕坐标系tool0(末端法兰盘中心),固定工具(非机器人夹持工具)则其相对于大地坐标系;
注意:不同的工具安装方式(夹持/固定)需要对应的Robhold参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmD7Ihz8-1638839685046)(C:\Users\Megamind\OneDrive\TCP坐标系)]
参数:tLoad,
数据类型:Loaddata:[mass,[x,y,z],[q1,q2,q3,q4],[ix,iy,iz]]
- 机器人夹持工具,工具的负载
- 工具的重量以kg计
- 工具的负载重心(x,y和z),以mm计,并以腕坐标tool0表示
- 工具力矩主惯性轴的方位,以kgm^2 计算,如果所有的惯性不见定义为0kgm^2,则将工具作为一个点质量来处理。
- 固定工具,工具的负载
- 所移动夹具的重量,kg
- 所移动夹具的重心(X,Y,Z),以mm计,并以腕坐标系表示
- 所移动夹具力矩惯性轴的方位,用腕坐标系表示
- 围绕力矩惯性轴的惯性矩,以kgm^2 计,如果将所有惯性不见定义为0kgm^2, 则将夹具作为一个点质量来处理
2. 固定式工具坐标系
3.工件坐标系数据结构
Wobjdata:用于描述机器人处理的弓箭特征,有如下优势。
- 便于进行位置计算,例如离线编程,则常常可从图纸获得有关值
- 弓箭位置发生变化后,只需要重新定义用户坐标系,无需更改目标点位置
- 可通过外部传感器对工件坐标系进行补偿,例如视觉引导
- 如果使用固定工具或者协调外轴,则必须定义工件,因为路径和速率随后将与弓箭而非TCP相关
参数:robhold,其他同上
参数:ufprog
数据类型:bool
规定是否使用固定的用户坐标系:TRUE——固定的用户坐标系;FALSE——可移动的用户坐标系,即使用外轴协调,同时以半协调模式用于MultiMove系统
参数:ufmec
数据类型:string
用于协调机械臂移动的机械单元,仅在可移动的用户坐标系种进行规定(ufprog为FALSE)
规定系统参数中所定义的机械单元名称,例如Track_1
参数:uframe
数据类型:pose
- 坐标系原点的位置(X,Y,Z) ,以mm计算
- 坐标系的方向,四元数[Q1,Q2,Q3,Q4]
如果机器人正夹持着工具,则在世界坐标系中定义用户坐标系;如果使用固定工具,则在腕坐标系种定义用户坐标系。
对于可移动的用户坐标系(ufprog为FALSE),由本系统对用户坐标系进行持续定义。
参数:oframe
数据类型:pose
- 坐标系原点位置X,Y,Z,以mm计
- 坐标系的旋转,表示为四元数q1,q2,q3,q4
目标坐标系相对于用户坐标系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SgIF3KYa-1638839685047)(C:\Users\Megamind\OneDrive\image-20211121212436673.png)]
ABB机器人通讯介绍
引例——Offs指令
MoveL Offs(p1, 100, 50, 9), v100, …
- offs()代表一个距离参考点1点X轴距离偏差100,y轴偏差50, z轴偏差9的点,偏离都是mm单位,以工件坐标系Wobj为参考。
注意:工具坐标系原点tcp和工具原点不一定重合,tool0时(即未安装任何工具时)两者重合,安装了工具之后就不一定重合了,比如焊枪tcp是距离焊枪头10mm位置浮空的地方,而tool0是安装法兰中心,也就是tcp。
工具重量mass很重要,重心cog也很重要,对机器人运动控制影响很大。
ABB可以通过“甩枪”来计算工具重心。工具长度尽量在4臂长度的一半以下,不能使用太长的工具,不然重心甩不出来。
工具坐标的标定
4点法/TCP法
TCP通过4中不同的姿态,标定同一个物体。新建一个tool2_abb_zhuhai,选中=>编辑=>定义。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L2gRfbuv-1638839685047)(C:\Users\Megamind\OneDrive\ABB机器人标定——4点法(TCP法)])
tool的三个要点:1. 重量kg 2. 重心cog(X,Y,Z),相对于安装法兰中心的坐标 3.TCP
工件坐标系
工件坐标系同有特定附加属性的坐标系。它主要用于简化编程,工件坐标系拥有两个框架,用户框架——与大地基坐标相关和工件框架——用户框架相关。
具有两个作用:一是方便用户以工件平面方向为参考手动操纵调试;二是当工件位置更改后,通过重新定义该坐标系,机器人即可正常作业,不需要对机器人程序进行修改。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WDqvMhqN-1638839685048)(C:\Users\Megamind\OneDrive\ABB机器人工件坐标系标定)]
这三点的要求,X1–>X2是X轴正方向,Y1点与X1X2连线不共线,原点是Y1与X1X2延长线的垂线的交点。
三个点用打印机打出来,然后操纵机器人去对纸上的三个点。要使机器人运动轨迹与工件坐标系三轴尽量平行
TCP&Z法
TCP&XZ法
读取机器人位置姿态
CRobT 读取当前位置(机器人位置)数据和CJointT 用于读取机械臂轴和外轴的当前角度。
CRobT 示例
VAR robtarget p1;
MoveL *, v500, fine \Inpos := inpos50, tool1;
p1 := CRobT(\Tool:=tool1 \WObj:=wobj0);
CJointT 示例
VAR jointtarget joints;
joints := CJointT();
search搜索
SearchL: 在直线运动时,机器人会监控一个数字输入信号或者持续变量,当信号或者持续变量的值变为所需值时,机器人立即读取当前位置。
例1:
SearchL di1, sp, p10, v100, probe;
以v100的速度,使probe的TCP沿直线朝位置p10 移动。当信号di1的值改变为有效时,将位置储存在sp中,但是机械臂不停止。
例子2:
SearchL \Stop, di2, sp, p10, v100, probe;
将probe的TCP沿直线朝位置p10移动。当信号di2的数值改变为有效时,将位置储存在sp中,且机械臂立即停止。
DefFrame - 定义一个坐标系
DefFrame(Define Frame),用于计算一个坐标系,并从三个位置来定义该坐标系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emgr29Ow-1638839685048)(C:\Users\Megamind\OneDrive\DefFrame定义坐标系)]
与工件坐标系相关的三个位置p1- p3,用于定义新的坐标系frame1。第一个位置p1,定义新坐标系的原点。第二个位置p2,定义x轴的方向。第三个位置p3,定义xy平面的位置。可将已确定的frame1用作位移坐标系,如以下例子所示:
注意一定是CONST三个常量定点,才可以定义框架
CONST robtarget p1 := […];
CONST robtarget p2 := […];
CONST robtarget p3 := […];
VAR pose frame1;
… …
frame1 := DefFrame (p1, p2, p3);
… …
!Activation of the displacement defined by frame1
PDispSet frame1;
返回值 :数据类型:pose 。计算出的坐标系。 计算与有效工件坐标系相关。
pose - 坐标变换
OrientZYX - 建立欧拉角的定向
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUDqJRbn-1638839685049)(C:\Users\Megamind\OneDrive\注意图标)]
OrientZYX(Orient from Euler ZYX angles)用于建立一个包含欧拉角的定向变量。
以下示例介绍了函数OrientZYX。 例 1:
VAR num anglex:=30;
VAR num angley:=45;
VAR num anglez:=90;
VAR pose object;
…
object.rot := OrientZYX(anglez, angley, anglex);
返回值
数据类型:orient 。根据欧拉角来确定方位。
EulerZYX根据定向,获取欧拉角
EulerZYX(Euler ZYX rotations)用于从orient类型变量获取欧拉角分量。
VAR num anglex;
VAR num angley;
VAR num anglez;
VAR pose object;
anglex := EulerZYX(\X, object.rot);
angley := EulerZYX(\Y, object.rot);
anglez := EulerZYX(\Z, object.rot);
计时指令
clock数据必须定义为变量类型,最小即使单位1ms
计时指令和函数
ClkStart开始计时
ClkStop停止计时
ClkReset复位时钟
ClkRead读取时钟数值
示教器人机交互指令
TPWrite - 写入FlexPendant示教器
TPReadDnum - 从FlexPendant示教器读取编号
TPReadNum - 从FlexPendant示教器读取编号
TPReadFK - 读取功能键
例子:
PROC Routine1()
TPReadNum reg2, “How many products should you buy?”;
reg1 := 0;
count := 0;
WHILE reg1 < reg2 DO
MoveL [[921.11,95.78,1097.92],[0.499999,-1.4298E-7,0.866026,3.02225E-8],[0,-2,1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]], v1000, z50, tool1;
reg1 := reg1 + 1;
TPWrite “”\Num:=reg1;
ENDWHILE
TPWrite “while complete”;
ENDPROC
例子:
TPReadFK reg1, “More?”, stEmpty, stEmpty, stEmpty, “Yes”, “No”;
例子:
VAR intnum intno1; // d定义中断号
IDelete intno1; //取消当前中断符号intno1的连接,及初始化
CONNECT intno1 WITH tTrap; // 将终端符号与中断程序tTrap连接
ISignalDI di1,1,intno1;
例子:
以下实例介绍了指令ISignalDI:
例 1
VAR intnum sig1int;
PROC main()
CONNECT sig1int WITH iroutine1;
ISignalDI di1,1,sig1int;
下达关于每当数字信号输入信号di1设置为1时出现中断的指令。随后,调用iroutine1软中断程序。
例 2 ISignalDI di1,0,sig1int;
下达关于每当数字信号输入信号di1设置为0时出现中断的指令。
例 3 ISignalDI \Single, di1,1,sig1int;
仅下达数字信号输入信号di1首次设置为1时出现中断的指令。
速度限制
VelSet的作用是增加或减少所有后续运动指令的已编程速度。该指令也被用来限制最大TCP速度。 本指令仅可用于主任务T_ROB1,或者如果在MultiMove系统中,则可用于运动任务中。
例子:
VelSet 50, 800;
将所有的编程速率降至指令中值的50%。不允许TCP速率超过800 mm/s。
AccSet用于搬运易碎品或减轻振动和路径误差。它能放慢加减速的增减率,从而让机器人的运动更加平顺。 本指令仅可用于主任务T_ROB1,或者如果在MultiMove系统中,则可用于运动任务中。
例子:
AccSet 50, 50;
加速度增减率被限制在正常值的50%,将加速度限制在正常值的50%。
CounterPerMeter
标定:输送链每运行一米,
计算公式:CounterPerMeter = (位置2-位置1)* 当前
本案例中:
CounterPerMeter = (1592.64
错误处理程序
任意程序都可以有一个错误处理程序
PROC Routine1()
ERROR
ENDPROC
错误类型:
EXIT;
RETURN;返回上一级程序
TRYNEXT;执行导致错误的语句之后的语句
RETRY;最多个可以4次
,或者如果在MultiMove系统中,则可用于运动任务中。
例子:
VelSet 50, 800;
将所有的编程速率降至指令中值的50%。不允许TCP速率超过800 mm/s。
AccSet用于搬运易碎品或减轻振动和路径误差。它能放慢加减速的增减率,从而让机器人的运动更加平顺。 本指令仅可用于主任务T_ROB1,或者如果在MultiMove系统中,则可用于运动任务中。
例子:
AccSet 50, 50;
加速度增减率被限制在正常值的50%,将加速度限制在正常值的50%。
CounterPerMeter
标定:输送链每运行一米,
计算公式:CounterPerMeter = (位置2-位置1)* 当前
本案例中:
CounterPerMeter = (1592.64
错误处理程序
任意程序都可以有一个错误处理程序
PROC Routine1()
ERROR
ENDPROC
错误类型:
EXIT;
RETURN;返回上一级程序
TRYNEXT;执行导致错误的语句之后的语句
RETRY;最多个可以4次