前言:
此刻同学们对“轨迹纠偏算法”可能比较注意,各位老铁们都需要知道一些“轨迹纠偏算法”的相关资讯。那么小编也在网上汇集了一些有关“轨迹纠偏算法””的相关文章,希望小伙伴们能喜欢,我们快快来了解一下吧!1. ABB机器人Pdisp 轨迹偏移使用
1) 如果有下图两个产品,已经完成了右边产品轨迹,左边产品估计一样,如何快速生成左边轨迹(左边产品可能有平移和旋转)
2)完成右边轨迹示教Path_30,如上图。起点为Target_20。
3) 完成左边起点的示教,为Target_ref_start,如下图。
注:如果左边产品轨迹有旋转,示教的Target_ref_start相对于左边产品的姿态要和Target_20相对于右边产品的姿态一致(此处左边产品旋转了30°,示教的角度z方向也旋转了30°)
4) 插入指令如下
MoveJ pHome,v1000,z100,tWeldGun\WObj:=wobj0;//移动到Home位置
Path_30;//运行右边产品轨迹
MoveJpHome,v1000,z100,tWeldGun\WObj:=wobj0;//回到Home
MoveJTarget_ref_start,v1000,fine,tWeldGun\WObj:=wobj0;//走到左边产品起点
ConfJ\Off;//因为使用偏移,关闭轴配置监控,否则有可能使用原配置参数导致位置走不到而报错 ConfL\Off; //因为使用偏移,关闭轴配置监控,否则有可能使用原配置参数导致位置走不到而报错
PDispOn\Rot,Target_20,tWeldGun;//设定当前位置和Target_20的偏差关系(包括平移和旋转),因为此时机器人停在Target_ref_start起点,即设定左边轨迹和右边轨迹的整体偏移关系。使用\rot表示平移和旋转均计算。如果不使用\rot,则只使用平移,旋转不计算
Path_30;//运行原有轨迹,此时轨迹参考坐标移动关系,机器人实际走左边产品轨迹
PDispOff;//轨迹完成,关闭平移关系
MoveJ pHome,v1000,z100,tWeldGun\WObj:=wobj0;
2. 单工位多次预约程序
1) 机器人有程序如下。
2)
3) 工艺过程如下:
机器人在home等待。有人按过di信号,机器人开始执行。人工可以一次性多次预约,即如果人工一次性按过3次,机器人执行三次。
4) 我们通过中断来实现。
5) 中断的意义为,机器人后台在不断扫描(类似PLC),和机器人前台运动不冲突。后台实时扫描到信号就会去执行设定的中断程序,中断程序里没有运动指令,前台机器人不停,不影响运动。
6) 新建一个例行程序,取名tr_1,注意:类型选中断(trap)。
7) 进入中断程序,插入指令如下,即当机器人执行中断程序时,给reg1记录次数加1
8) 进入主程序,设置中断及对应的io信号
37行的意思是,任何时候di_1信号0变1,就会触发执行tr_1中断程序,即置flag1为true
35-37行程序只要运行过一遍即可,类似于设置开关,不需要反复运行
9) 主要程序如下。即如果reg1=0,机器人在home等待
3. 在robotstudio创建两台机器人的socket连接
1)什么是socket通讯?
就是TCP/IP通讯,无协议,在微软环境下称为socket
2)socket通讯能干什么?
可以收发制定的数据,包括sting字符串,byte数组等
3)创建socket机器人需要什么选项?
机器人需要616-1 PC-INTERFACE选项
4)socket通讯网线插哪个网口?
Service口(IP固定:192.168.125.1)或者Wan口都可以,(可以自己设置)
5)创建client端的实例
通常机器人和相机通讯,机器人作为client端
1)新建一个机器人系统,注意建立系统时加入pc-interface选项
2)为了避免之前的连接没有关闭,先插入socketclose指令,后面的socket1为自己新建的socketdev类型的变量
3)之后插入创建连接socketCreate
4)插入建立连接SocketConnect,后面需要制定Server的ip和端口,如果是在电脑和另一台虚拟控制器连接,ip设为“127.0.0.1”,端口自定义,建议不要用默认的1025.
这一步作用为机器人会和server建立连接,如果没有建立成功会一直等待,如果成功则往下执行
5)此处做测试,在建立成功后,插入TPWrite指令,可以在示教器看到socketclinent connect successful
6)接下去可以收发数据,此处示例为client先发送数据给server,再接受server发送回来的数据
7)SocketSend后面可以发送string或者byte数组,具体可以选择不同可选变量
8)发送完毕后,client接受到server发回的数据并写屏
6)以下为server端示例
1)重新创建一个工作站,创建时不要忘记添加pcinterface选项
2)作为server,机器人需要创建2个socketdev变量
3)为了避免之前的连接没有关闭,同样建议先socketclose
4)
5)接着创建socketCreatetemp_socket 服务器端socketdev
6)SocketBind为绑定socket要监控的ip和端口,如果是虚拟仿真,ip为127.0.0.1,端口自定义(和client端设置一致)
7)SocketListen为机器人server监听是否有client连接
8)socketAccept为接受client的连接
9)建立连接后,机器人就可以执行死循环,即一直处于收发状态
10) 之前client程序为client先发后收,故这里server先收后发
7)client和server都写完后,可以运行,注意先运行server端,即server机器人处于监听状态,如果连上,两台相互通讯,效果如下
8)server机器人收到的讯息如下:
9) client机器人收到的讯息如下:
4. ABB机器人双工位预约程序
1)有如下双工位生产
2)工艺过程如下:
人工完成1#工位上料后按按钮di_1(按钮不带保持,即人手松开信号为0))机器人焊接1#工位。
此过程中人工对2#工位上下料,完成后按di_2完成预约(即不需要等机器人完成1#工作)。
机器人完成1#工作后,由于收到过di_2预约信号,机器人自动去完成2#工位
3) 我们通过中断来实现。
4) 中断的意义为,机器人后台在不断扫描(类似PLC),和机器人前台运动不冲突。后台实时扫描到信号就会去执行设定的中断程序,中断程序里没有运动指令,前台机器人不停,不影响运动
5) 新建一个例行程序,取名tr_1,注意:类型选中断(trap)
6) 进入中断程序,插入指令如下,即当机器人执行中断程序时,给bool量置true
同理设置第二个中断程序
7)进入主程序,设置中断及对应的io信号
37行的意思是,任何时候di_1信号0变1,就会触发执行tr_1中断程序,即置flag1为true
35-40行程序只要运行过一遍即可,类似于设置开关,不需要反复运行
8) 主要程序如下。即如果没有人给di信号,机器人就在home位等待。
9)
5. 与相机通讯的Socket收发数据处理与提取
1)相机通常发送字符串给机器人,比如”1.23,4.56,7.89\0D”,即x为1.23,y为4.56,z的角度为7.89,用\0D作为结束符,数据之间用“,”隔开。
2)如果机器人收到上述字符串,如何把字符串提取出来并付给变量deltaX,deltaY,和thetaZ?
3)建立若干num变量,用以存储过程数据,比如StartBit1,表示x的数据从第几位开始,Endbit1表示x的数据结束是第几位,Lenbit1表示x数据的长度,s1表示提取的x的值的字符串
4)
5)先假设x的第一位是1,给Startbit1赋值为1
6)插入函数strfind,查找第一个“,”在第几位,得到EndBit1值
7)
8)EndBit1减去StartBit1就是x的数据长度
9)同理得到y和theta的信息
10)通过StrPart函数,提取从StartBit1开始到LenBit1结束的字符串,即x的值的字符串
11)
12) 同理得到y和z的字符串
13)通过StrToVal函数,把s1转为num型,付给delta_x, StrToVal函数的反馈值为bool量,即转换成功为true不成功为false
14)同理得到delta_y和delta_theta
15) 成功后可以写屏测试,如下图
6. ABB机器人如何创建数组
1)什么是数组?
将相同数据类型的元素按一定顺序排列的集合
2)有什么用?
比如创建一个robtarget类型的数组p_array,p_array里有10个点位,走完10个位置就可以用如下代码,方便简洁
FOR i FROM 1 TO 10 DO
MoveL p_array{i},v500,z1,tool0;
ENDFOR
3)哪些数据类型能创建数组
所有数据类型都可以创建数组
4)数组最大几维?
ABB机器人数组最大三维!
5)数组起始序号是0还是1?
是1
6)如何创建
1)程序数据
2)选中类型,比如Robtarget
3)新建,设置名称,维数(这里举例1维),每个维度的元素数量(举例为10)
4)创建完,就有了一个10个数据的p_array,
5)修改点位,点击上图上某一行,修改位置,即把数组里的某一个元素位置修改了
7. ABB机器人创建自定义数据类型
1)什么是数据类型?
诸如robtarget,jointtarget等,把一系列相关元素集合在一起,类似结构体
2)如何查看系统的数据类型
Robotstudio的指令功能数据类型
3)ABB机器人是否可以自定义数据类型?
可以
4)如何创建自定义数据类型
必须在创建在模块的最前面,使用关键字RECORD 和ENDRECORD
5)举例如下:
定义了一种数据类型叫student,里面包括性别(bool量),班级(num),分数。分数又是一个自定义数据类型,具体内容包括语文和数学分数。
6)可以在程序数据里查看到这个自定义的数据类型student
7)可以新建一个变量,类型为student,可以对内容设置
8)也可以在示教器进行赋值,类似p10.trans.x
8. ABB机器人数据存储类型区别
CONST VAR PERS 区别
1)ABB机器人任何数据都有存储类型,分为常量CONST,变量VAR和可变量PERS
2)常量CONST,即程序内不能赋值
3)变量和可变量程序都能赋值,区别如下
变量-有初值和当前值。在执行打开程序,移动指针到main,移动指针到routine时,变量的当前值会被初始化,即值变为初值
可变量,只有当前值。即任何时候做了修改,其值就修改了。在执行打开程序,移动指针到main,移动指针到routine时,值就是当前值,不会发生变化
4)默认插入的robtarget的存储类型是const,即常量,此时无法赋值(如下图,即使类型选到robtarget还是不显示已经建立的robtarget)
此时,到程序数据,找到这个数据,编辑-更改申明,修改为变量
此时插入赋值语句时,就能找到这个点位了。
9. 创建带参数例行程序
1)什么是参数例行程序?
例行程序可以输入参数,使用的时候看起来就像自定义指令
2)有什么用?
方便使用,用户不用关心内部实现过程
3)如何创建
1)新建例行程序
2)设置名称,点击参数,设置输入参数
3)添加参数,注意右边的数据类型即为该参数数据类型,此处举例输入为2个robtarget
4)点击确定。
5)程序内部根据自己需要添加内容
6)带参数例行程序不能直接使用,必须有人调用,且输入参数,如下
使用ProcCall
7)此处举例pknpl指令的创建,实现功能为从pHome位置吸取并到Target_10位置放置
PROCRoutine2()
pknpl pHome,Target_10;
ENDPROC
PROCpknpl(robtarget pick_pos,robtarget place_pos)
MoveJoffs(pick_pos,0,0,30),v500,z1,tool0;
MoveL pick_pos,v500,fine,tool0;
Set do1;
MoveLoffs(pick_pos,0,0,30),v500,z1,tool0;
MoveJoffs(place_pos,0,0,30),v500,z1,tool0;
MoveL place_pos,v500,fine,tool0;
ReSet do1;
MoveL offs(place_pos,0,0,30),v500,z1,tool0;
ENDPROC
10. ABB机器人创建码垛程序
1)什么是码垛?
有规律的移动机器人进行抓取及放置
2)如何简便码垛程序
设置好工件坐标系,工具,对第一个码垛放置点进行示教,xyz方向的间距和个数可设
3)如何创建
创建m_pallet模块
建立两个routine
在init 程序里,设置xyz方向个数和各方向间距
在p_main程序里,创建机器人移动到pHome点,pPick位置(抓取位置),以及第一个放置点pPlace_ini
通过三层for循环,进行码垛。实例程序为先x方向,再y方向,再z方向
标签: #轨迹纠偏算法