logo资料库

UR优傲机器人说明书.pdf

第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
资料共44页,剩余部分请下载后查看
优傲机器人 URScript 编程语言 3.1 版 2015 年 3 月 26 日 1 URScript
目录 目录 本文件包含的信息是优傲机器人公司的财产,未经优傲机器人公司事先书面批准,不得全部 或部分复制。这些信息如有更改,恕不另行通知,并且不应被视为是优傲机器人公司的一个 承诺。优傲机器人公司定期对本手册进行评审和修订。 优傲机器人公司不对本文件中的任何错误或遗漏承担任何责任。 版权所有©2009-2015 优傲机器人公司 优傲机器人徽标是优傲机器人公司的注册商标。 目录 目录 1 URScript 编程语言…………………………………………………………………………….3 1.1 简介…………………………………………………………………………………………3 1.2 连接到 URControl 上……………………………………………………………………..3 1.3 数字、变量和类型…………………………………………………………………………3 1.4 控制流......................................................................................................................4 1.4.1 特别关键词......................................................................................................5 1.5 函数…………………………………………………………………………………………5 1.6 远程过程调用(RPC)……………………………………………………………………5 1.7 范围规则...................................................................................................................6 1.8 线程…………………………………………………………………………………………7 1.8.1 线程和范围……………………………………………………………………………8 1.8.2 线程调度………………………………………………………………………………9 1.9 程序标号消息………………………………………………………………………………9 2 运动模块........................................................................................................................10 2.1 函数………………………………………………………………………………………...10 2.2 变量………………………………………………………………………………………...16 3 内部模块……………………………………………………………………………………….17 3.1 函数………………………………………………………………………………………...17 3.2 变量………………………………………………………………………………………...22 4 UR 数学模块……………………………………………………………………………………23 4.1 函数………………………………………………………………………………………...23 4.2 变量………………………………………………………………………………………...30 5 界面模块……………………………………………………………………………………….31 5.1 函数………………………………………………………………………………………...31 5.2 变量………………………………………………………………………………………...44 2 URScript
URScript 编程语言 1 URScript 编程语言 1.1 简介 优傲机器人可分三个不同的级别来控制:图形用户界面级别、脚本级别和 C-API 级别。 URScript 是用于在脚本级别控制机器人的机器人编程语言。像任何其他编程语言一样, URScript 也有变量、类型、控制流语句、函数等。此外,URScript 有许多内置变量和函数, 可监视并控制机器人的输入/输出和运动。 1.2 连接到 URControl 上 URControl 是控制柜中的低级别机器人控制器,在 Mini-ITX 计算机上运行。计算机启动时, URControl 作为一个后台程序启动(像一个服务程序一样),并且 PolyScope 用户界面使用 本地 TCP/IP 连接作为一个客户端连接。 在脚本级别对机器人进行编程是如下所述完成的:编写一个客户端应用程序(在另一台计算 机上运行),并使用 TCP/IP 插口连接到 URControl 上。  主机名:ur-xx(或者如果机器人不在域名服务器中,则在 PolyScope 为“关于”对话 框中找到的 ip 地址)。  端口:30002 连接好时,URScript 程序或命令以清晰文本形式在每一个 socket 端口发送。每行均以“\n” 结束。 1.3 数字、变量和类型 URScript 中的算术表达式语法是非常标准的: 1+2-3 4*5/6 (1+2)*3/(4-5) 布尔表达式中拼写出了布尔运算符: True or False and (1 == 2) 1 > 2 or 3 != 4 xor 5 < -6 not 42 >= 87 and 87 <= 42 变量赋值是使用等号“=”进行的: foo = 42 bar = False or True and not False baz = 87-13/3.1415 hello = \q{Hello, World!} 3 URScript
控制流 URScript 编程语言 l = [1,2,4] target = p[0.4,0.4,0.0,0.0,3.14159,0.0] 变量的基本类型是从变量的第一个赋值推导出来的。在上述示例中,foo是一个整数,bar 是一个布尔值,target是一个姿态,是位置和方位的一个组合。 基本类型是:  无  布尔值  数字 – 整数或浮点数  姿态  字符串 如果是轴-角标记法,姿态以p[x,y,z,ax,ay,az]的形式给出,其中x,y,z是TCP的位置,ax,ay,az 是TCP的方位。 1.4 控制流 程序的控制流通过 if 语句更改: if a > 3: a = a + 1 elif b < 7: b = b * a else: a = a + b end and while-loops: l = [1,2,3,4,5] i = 0 while i < 5: l[i] = l[i]*2 end 如需提前停止某个循环,可使用 break 语句。同样,可使用 continue 语句将控制转到最近 封闭循环的下一个迭代。 4 URScript
1.4.1 特别关键词  中止(halt)中止程序  返回(return)从函数中返回 1.5 函数 函数声明如下: def add(a, b): return a+b end 然后可像这样调用函数: result = add(1, 4) 也可给出函数自变量默认值: def add(a=0,b=0): return a+b end URScript 也支持命名参数。此处将不对此进行描述,因为执行起来仍然有一定程度的破坏。 1.6 远程过程调用(RPC) 远程过程调用(RPC)类似于正常函数调用,除了这个函数被定义并远程执行。在远程端, 被调用的 RPC 函数必须存在,并有同样的参数代码和类型。如果这个函数没有远程定义, 它将停止执行程序。控制器用 XMLRPC 标准发一个参数到远程端并收到结果。,在 RPC 调 用时控制柜等待远程函数完成。XMLRPC 标准支持 C++、Python 和 Java。 在 UR 脚本函数中,用程序初始化相机,拍一张照片并且读取新的 pose 坐标点,看起来像 这样: 第一个 rpc.factory 创造一个 XMLRPC 连接到特定的远程服务器,远程函数处理相机变量。 用户需要初始化相机并且调用 camera.initialize(“RGB”)。这个函数返回一个布尔量表明请求 是否成功。为了发现某个目标位置点,相机首先需要拍一张照片,拍好后需要在远程端做图 像分析算出目标点位置;然后程序请求目标点位置用函数 target-camera.getTarget。目标变量 结果将要被返回。camera.initialize(“RGB”),takeSnapshot(),getTarget()函数用于 RPC 服务器, 在技术支持网站包含更多的 XMLRPC 服务器例子。 5 URScript
范围规则 URScript 编程语言 1.7 范围规则 URScript 程序是作为一个函数声明的,没有参数: def myProg(): end 程序内声明的每个变量都存在于全局范围内,函数内声明的变量除外。在那种情况下,变量 对于函数而言是局部的。有两个限定词可用于修改这种行为。local 限定词告知将函数内的 变量视为真正的局部变量的运行时间,即使有名称相同的全局变量。global 限定词强行将函 数内声明的变量变为可全局访问的。 在以下示例中,a 是一个全局变量,因此函数内的变量是程序内声明的相同变量: def myProg(): a = 0 def myFun(): a = 1 return a end r = myFun() end 在下面这个示例中,a 在函数内声明为 local,因此两个变量是不同的,即使它们有相同的 名称: def myProg(): 6 URScript
线程 URScript 编程语言 a = 0 def myFun(): local a = 1 return a end r = myFun() end 请注意,全局变量再也不可从函数内访问,因为局部变量屏蔽了名称相同的全局变量。 1.8 线程 线程由许多个特殊命令来支持。 如需声明一个新的线程,使用类似于函数声明的语法: thread myThread(): # Do some stuff return end 应当注意几件事情。首先,线程不可以有任何参数,因此声明内的括号必须为空。其次,虽 然线程中可以有返回语句,但是返回值被丢弃,并且无法从线程外访问。一个线程可包含其 他线程,与一个函数可包含其他函数一样。换句话说,线程可以嵌套,从而形成线程结构。 如需运行线程,使用以下语法: thread myThread(): # Do some stuff return end thrd = run myThread() run 命令的返回值是正在运行的线程的句柄。可使用此句柄与正在运行的线程互动。run 命 令会派生新线程,然后消失,从而执行 run 指令后的指令。 如需等待正在运行的线程完成,使用 join 命令: 7 URScript
线程 URScript 编程语言 thread myThread(): # Do some stuff return end thrd = run myThread() join thrd 这会停止调用线程执行,直至线程执行完成。如果线程已经完成,则语句无效。如需终止正 在运行的线程,使用 kill 命令: thread myThread(): # Do some stuff return end thrd = run myThread() kill thrd 要求终止后,线程停止,并且线程句柄不再有效。如果线程有子线程,这些子线程也会被终 止。 为了防止竞态条件和其他线程相关问题,提供了临界区支持。临界区可确保其包围的代码可 在另一个线程运行之前完成。因此,临界区应尽可能地短,这一点至关重要。语法如下所述: thread myThread(): enter_critical # Do some stuff exit_critical return end 1.8.1 线程和范围 线程的范围规则与函数的范围规则完全相同。有关这些规则的讲述,请参阅第 1.7 条。 8 URScript
分享到:
收藏