第1章 工业机器人编程的基础
1.1 机器人编程
1.1.1 机器人编程系统及方式
机器人编程(robot programming)为使机器人完成某种任务而设置的动作顺序的描述。机器人运动和作业的指令都是由程序进行控制的,常见的编程方法有两种:示教编程(图1-1为ABB工业机器人的示教器)和离线编程(图1-2为离线编程开始界面)。
图1-1 ABB工业机器人的示教器
图1-2 离线编程软件
(1)示教编程
目前大多数机器人还是采用示教方式编程。示教方式是一项成熟的技术,易于被熟悉工作任务的人员所掌握,而且用简单的设备和控制装置即可进行。示教过程进行得很快,示教过后马上即可应用。在对机器人进行示教时,将机器人的轨迹和各种操作存入其控制系统的存储器。如果需要,过程还可以重复多次。在某些系统中,还可以用与示教时不同的速度再现。
① 示教编程法分为三个步骤:
a.示教。即机器人学习的过程,在这个过程中,操作者要手把手教会机器人做某些动作。
b.存储。机器人的控制系统以程序的形式将示教的动作记忆下来。
c.再现。机器人按照示教时记忆下来的程序展现这些动作,就是“再现”过程。
② 示教编程可分为在线示教方式和离线示教方式。
a.在线示教。即在现场直接对操作对象进行的一种编程方法,常用的有:人工引导示教,由有经验的操作人员移动机器人的末端执行器,计算机记忆各自由度的运动过程;辅助装置示教,对一些人工难以牵动的机器人,例如一些大功率或高减速比机器人,可以用特别的辅助装置帮助示教。也可以用示教盒进行示教,为了方便现场示教,一般工业机器人都配有示教盒,它相当于键盘,有回零、示教方式、数字、输入、编辑、启动、停止等键。
b.离线示教。由于离线示教不便于现场操作,而且工作量大、精度低,故不建议采用。离线示教方法包括:解析示教,将计算机辅助设计的数据直接用于示教,并利用传感技术进行必要的修正;任务示教,指定任务以及操作对象的位置、形状,由控制系统自动规划运动路径。任务示教是一种发展方向,具有较高的智能水平,目前仍处于研究中。
目前,相当数量的机器人仍采用示教编程方式。机器人示教后可以立即应用,再现时,机器人重复示教时存入存储器的轨迹和各种操作,如果需要,过程可以重复多次。
示教编程法的优点是简单方便,不需要环境模型,对实际的机器人进行示教时,可以修正机械结构带来的误差。当然,示教编程法也存在一定的缺陷,比如功能编辑比较困难,难以使用传感器,难以表现条件分支,对实际的机器人进行示教时,要占用机器人。
(2)离线编程法
机器人离线编程系统都是利用计算机图形学的成果,建立起机器人及工作环境的几何模型,再利用一些规划算法,通过对图形的控制和操作,在离线的情况下进行轨迹的规划,通过对编程结果进行三维图形的动画仿真,以检验编程的正确性,最后将生成的代码传给机器人控制系统,以控制机器人的运动,完成给定的任务。
机器人的离线编程系统是已被证明的一个有力的工具,可以增加安全性,减少机器人不工作的时间和降低成本。机器人离线编程系统是机器人编程语言的拓展,通过该系统可以建立机器人和CAD/CAM之间的联系。
离线编程有以下几个方面的优点:
① 编程时可以不使用机器人,以腾出机器人去做其他工作。
② 可预先优化操作方案和运行周期。
③ 以前完成的过程或子程序可结合到待编的程序中去。
④ 可用传感器探测外部信息,从而使机器人作出相应的响应。这种响应使机器人可以工作在自适应的方式下。
⑤ 控制功能中可以包含现有的计算机辅助设计(CAD)和计算机辅助制造(CAM)的信息。
⑥ 可以预先运行程序来模拟实际运动,从而不会出现危险。利用图形仿真技术,可以在屏幕上模拟机器人运动来辅助编程。
⑦ 对不同的工作目的,只需替换一部分待定的程序。
机器人离线编程技术对机器人的推广应用及其工作效率的提升有着重要意义,离线编程可以大幅度节约制造时间,实现机器人的实时仿真,为机器人的编程和调试提供安全灵活的环境,是机器人开发应用的方向。
1.1.2 对机器人的编程要求
机器人编程系统是机器人编程语言的拓展,通过该系统可以建立机器人和CAD/CAM之间的联系。
(1)设计一个编程系统应具备的知识
① 所编程的工作过程的知识;
② 机器人和工作环境三维实体模型;
③ 机器人几何学、运动学和动力学的知识;
④ 基于图形显示的软件系统、可进行机器人运动的图形仿真;
⑤ 轨迹规划和检查算法,如检查机器人关节角超限、检测碰撞以及规划机器人在工作空间的运动轨迹等;
⑥ 传感器的接口和仿真,以利用传感器的信息进行决策和规划;
⑦ 通信功能,以完成离线编程系统所生成的运动代码到各种机器人控制柜的通信;
⑧ 用户接口,以提供有效的人机界面,便于人工干预和进行系统的操作。
此外,由于编程系统是基于机器人系统的图形模型来模拟机器人在实际环境中的工作进行编程的,因此为了使编程结果能很好地符合实际情况,系统应能够计算仿真模型和实际模型之间的误差,并尽量减少二者间的误差。
(2)对机器人语言的编程要求
① 能够建立世界模型 在进行机器人编程时,需要一种描述物体在三维空间内运动的方式。所以需要给机器人及其相关物体建立一个基础坐标系。这个坐标系与大地相连,也称“世界坐标系”。
机器人工作时,为了方便起见,也建立其他坐标系,同时建立这些坐标系与基础坐标系的变换关系。
机器人编程系统应具有在各种坐标系下描述物体位姿的能力和建模能力。
② 能够描述机器人的作业 机器人作业的描述与其环境模型密切相关,编程语言水平决定了描述水平。其中以自然语言输入为最高水平。现有的机器人语言需要给出作业顺序,由语法和词法定义输入语言,并由它描述整个作业。
③ 能够描述机器人的运动 描述机器人需要进行的运动是机器人编程语言的基本功能之一。用户能够运用语言中的运动语句,与路径规划器和发生器连接,允许用户规定路径上的点及目标点,决定是否采用点插补运动或笛卡儿直线运动。用户还可以控制运动速度或运动持续时间。
对于简单的运动语句,大多数编程语言具有相似的语法。不同语言间在主要运动基元上的差别是比较表面的。
④ 允许用户规定执行流程 同一般的计算机编程语言一样,机器人编程系统允许用户规定执行流程,包括转移、循环、调用子程序以及中断等。
对于许多计算机应用,并行处理对于自动工作站是十分重要的。首先,一个工作站常常运用两台或多台机器人同时工作,以减少过程周期。在单台机器人的情况下,工作站的其他设备也需要机器人控制器以并行方式控制。因此,在机器人编程语言中常常含有信号和等待等基本语句或指令,而且往往提供比较复杂的并行执行结构。
通常首先需要用某种传感器来监控不同的过程。然后,通过中断或登记通信,机器人系统能够反映由传感器检测到的一些事件。有些机器人语言提供规定这种事件的监控器。
⑤ 要有良好的编程环境 如同任何计算机一样,一个好的编程环境有助于提高程序员的工作效率。机械手的程序编制是困难的,其编程趋向于试探对话式。如果用户忙于应付连续重复的编译语言的编辑→编译→执行循环,那么其工作效率必然是低的。因此,现在大多数机器人编程语言含有中断功能,以便能够在程序开发和调试过程中每次只执行一条单独语句。典型的编程支撑和文件系统也是需要的。
根据机器人编程特点,其支撑软件应具有下列功能:在线修改和立即重新启动;传感器的输出和程序追踪;仿真。
⑥ 需要人机接口和综合传感信号 在编程和作业过程中,应便于人与机器人之间进行信息交换,以便在运动出现故障时能及时处理,确保安全。而且,随着作业环境和作业内容复杂程度的增加,需要有功能强大的人机接口。
机器人语言的一个极其重要的部分是与传感器的相互作用。语言系统应能提供一般的决策结构,以便根据传感器的信息来控制程序的流程。
在机器人编程中,传感器的类型一般分为三类:位置检测;力觉和触觉;视觉。如何对传感器的信息进行综合,各种机器人语言都有自己的句法。
(3)常用编程指令简介
对编程语言的掌握也是实现机器人编程的基本要求,下面介绍几种常见的机器人编程指令。
① 运动指令。
a.指令介绍。移动指令包含三条:MOVJ、MOVL、MOVC。
MOVJ:关节移动指令,即在运动过程中以关节的方式运动。
指令格式:
MOVJ代表指令;LP表示局部变量;0表示标号,用于区别使用;VJ表示速度,最大速度为100%;PL为平滑度,范围0~9。
MOVL:直线运动指令,即在运动过程中以直线的方式运动。
指令格式:
MOVL代表指令;LP表示局部变量;1表示标号,用于区别使用;VL表示速度,最大速度为1999;PL为平滑度,范围0~9。
MOVC:圆弧运动指令,即在运动过程中以圆弧的方式运动。
指令格式:
MOVC代表指令;LP表示局部变量;2表示标号,用于区别使用;VL表示速度,最大速度为1999;PL为平滑度,范围0~9。一段圆弧轨迹必须是由三段圆弧指令实现的,三段圆弧指令分别定义了圆弧的起始点、中间点、结束点。
b.说明。
局部变量(LP) :在某个程序中所使用的变量和其他程序中的相同变量不冲突。例如在程序一中使用了LP0,也可以在程序二中使用LP0,这样是不会产生矛盾的。
全局变量(GP) :在此系统中我们还设置了全局变量,意思是如果在一个程序中使用了GP0,而后就不可以在其他的程序中使用GP0了,否则程序会出现混乱现象,系统将会默认将第二次设定的值覆盖第一次设定的值。
平滑度(PL) :简单地说就是过渡的弧度,确定是以直角方式过渡还是以圆弧方式过渡。假如两条直线要连接起来,怎么连接,就需要对此变量进行设置。
② 逻辑指令。
WAIT指令:条件等待指令。
指令格式:
说明:当所设定的条件满足时,则程序往下执行;当所设定的条件不满足时,则程序一直停在这里,直到满足所设定的条件为止。但是,后面还有一个时间的设定,当条件不满足时,在等待后面的设定时间之后,会继续执行下面的程序。
JUMP指令:跳转指令,包含无条件跳转指令和条件跳转指令两种类型。
格式一:无条件跳转指令。
格式二:条件跳转指令。
说明:在使用此条指令时,要配合使用标号指令。标号就是所要将程序跳转到的位置,后面不加条件,只要程序执行到此行,则直接跳到标号所处的位置;后面有条件,当程序执行到该行指令时,程序不一定跳转,只有当后面的条件满足时,程序才跳转到标号所处的位置。
CALL指令:子程序调用指令,包含有条件调用和无条件调用两种类型。
格式一:无条件调用指令。
格式二:条件调用指令。
子程序的建立:子程序的建立和主程序的建立唯一的区别就是在编写完所有的程序之后,在程序的末尾加上RET指令。
说明:%就是所要调用的程序。后面不加条件,只要程序执行到此行,则直接调用该子程序;后面有条件,当程序执行到该行时,程序不一定调用该子程序,只有当后面的条件满足时,程序才调用该子程序。
TIME指令:延时指令,以10ms为单位。
指令格式:
例:延时10s。
DOUT指令:数字量输出。
指令格式:
说明:数字量只有两种形式,因此在使用该指令时只有两种状态,即“ON”和“OFF”两种状态。
AOUT指令:模拟量输出。
指令格式:
例:使A0#0的输出为2.500。
PAUSE指令:停止指令,包括无条件停止和有条件停止指令。
格式一:无条件停止。
格式二:有条件停止。
说明:PAUSE指令后就是所要调用的程序。后面不加条件,只要程序执行到此行,则程序立刻停止;后面有条件,当程序执行到该行时,程序不一定停止,只有当后面的条件满足时,程序才停止。
③ 运算指令。
ADD指令:加法运算指令。
指令格式:
说明:执行加法指令时,将前一个变量和后一个变量相加,可以进行的加法指令有:GI、LI、GD、LD、GP、LP、TC、CC指令。
SUB指令:减法运算指令。
指令格式:
说明:执行减法指令时,将前一个变量和后一个变量相减,可以进行的减法指令有:GI、LI、GD、LD、GP、LP、TC、CC指令。
MUL指令:乘法运算指令。
指令格式:
说明:执行乘法指令时,将前一个变量和后一个变量相乘,可以进行的乘法指令有:GI、LI、GD、LD、GP、LP、TC、CC指令。
DIV指令:除法运算指令。
指令格式:
说明:执行除法指令时,将前一个变量除以后一个变量,可以进行的除法指令有:GI、LI、GD、LD、GP、LP、TC、CC指令。
INC指令:加1运算指令。
指令格式:
说明:执行加1指令时,将指令后的变量进行加1,可以进行的加1指令有:GI、LI、GD、LD、GP、LP、TC、CC指令。
DEC指令:减1运算指令。
指令格式:
说明:执行减1指令时,将指令后的变量进行减1,可以进行的减1指令有:GI、LI、GD、LD、GP、LP、TC、CC指令。
SET指令:置位指令。
指令格式:
说明:执行置位指令时,将后一个变量的值赋给前一个变量,可以进行的置位指令有:GI、LI、GD、LD、GP、LP、TC、CC指令。
④ IF指令:条件判断指令。
IF…END IF指令
指令格式:
说明:判断条件里面的内容是否满足,若条件满足,则执行下面的程序;若条件不满足,则程序不执行IF…END IF所包含的内容。若有多个条件进行判断,可以采用IF…ELSE IF…ELSE…END IF。
例:假如满足条件X0=ON,就执行TC#(0)加1,若满足条件X0=OFF,就执行TC#(0)减1,若两个条件都不满足,则将TC#(0)里面的值自加。
程序如下:
IF X0 = = ON
INC TC#(0)
ELSE IF X0 = = OFF
DEC TC#(0)
ELSE
ADD TC#(0) TC#(0)
END IF
⑤ WHILE指令:循环指令。
指令格式:条件开始。
条件结束。
说明:当WHILE后的条件满足要求时,即条件为ON时,执行WHILE里面的程序,直到WHILE条件后的指令不满足要求,则退出该循环。
例:当TC#(1)>=20时,执行WHILE里面的程序[TC#(1)的初始值为50]。
程序如下:
SET TC#(1) 50.000
WHILE TC#(1)>=20
{DEC TC#(1) 程序}循环体
DEC TC#(1)
END WHILE
在循环体中,一定要对TC#(1)进行设置,否则该程序将会成为死程序,即程序始终在这个地方执行。
⑥ SWITCH指令:条件选择指令。
指令格式:
例:SWITCH…END SWITCH指令的应用。
SWITCH TC#(2)
CASE 10:AOUT AO#(0)=1.000
CASE 20:AOUT AO#(0)=2.000
CASE 30:AOUT AO#(0)=3.000
CASE 40:AOUT AO#(0)=4.000
CASE 50:AOUT AO#(0)=5.000
CASE 60:AOUT AO#(0)=6.000
CASE 70:AOUT AO#(0)=7.000
CASE 80:AOUT AO#(0)=8.000
CASE 90:AOUT AO#(0)=9.000
DEFAULT:AOUT AO#(0)=10.000
END SWITCH
说明:
当TC#(2)==10时,AOUT AO#(0)=1.000;
当TC#(2)==20时,AOUT AO#(0)=2.000;
当TC#(2)==30时,AOUT AO#(0)=3.000;
当TC#(2)==40时,AOUT AO#(0)=4.000;
当TC#(2)==50时,AOUT AO#(0)=5.000;
当TC#(2)==60时,AOUT AO#(0)=6.000;
当TC#(2)==70时,AOUT AO#(0)=7.000;
当TC#(2)==80时,AOUT AO#(0)=8.000;
当TC#(2)==90时,AOUT AO#(0)=9.000;
其他情况下,AOUT AO#(0)=10.000。
1.1.3 机器人编程语言的类型
伴随着机器人的发展,机器人语言也得到了发展和完善,机器人语言已经成为机器人技术的一个重要组成部分。机器人的功能除了依靠机器人的硬件支撑以外,相当一部分是靠机器人语言来完成的。早期的机器人由于功能单一,动作简单,可采用固定程序或者示教方式来控制机器人的运动。随着机器人作业动作的多样化和作业环境的复杂化,依靠固定的程序或示教方式已经满足不了要求,必须依靠能适应作业和环境随时变化的机器人语言编程来完成机器人工作。
一般用户接触到的语言都是机器人公司自己开发的针对用户的语言平台,通俗易懂,在这一层次,每一个机器人公司都有自己的语法规则和语言形式,这些都不重要,因为这层是给用户示教编程使用的。在这个语言平台之后是一种基于硬件相关的高级语言平台,如C语言、C++语言、基于IEC 61131标准语言等,这些语言是机器人公司做机器人系统开发时所使用的语言平台,这一层次的语言平台可以编写翻译解释程序,针对用户示教的语言平台编写的程序进行翻译、解释成该层语言所能理解的指令,该层语言平台主要进行运动学和控制方面的编程,再底层就是硬件语言,如基于Intel硬件的汇编指令等。
商用机器人公司提供给用户的编程接口一般都是自己开发的简单的示教编程语言系统,如KUKA、ABB等,机器人控制系统提供商提供给用户的一般是第二层语言平台,在这一平台层次,控制系统供应商可能提供了机器人运动学算法和核心的多轴联动插补算法,用户可以针对自己设计的产品自由地进行二次开发,该层语言平台具有较好的开放性,但是用户的工作量也相应增加,这一层次的平台主要是针对机器人开发厂商的平台,如欧系一些机器人控制系统供应商就是基于IEC 61131标准的编程语言平台。下面来了解一下常见的机器人编程语言。
(1)VAL语言
VAL语言是美国Unimation公司于1979年推出的一种机器人编程语言,主要配置在PUMA和UNIMATION等型机器人上,是一种专用的动作类描述语言。VAL语言是在BASIC语言的基础上发展起来的,所以与BASIC语言的结构很相似。在VAL的基础上Unimation公司推出了VAL-Ⅱ语言。 VAL语言可应用于上下两级计算机控制的机器人系统。上位机为LSI-11/23,编程在上位机中进行,上位机进行系统的管理;下位机为6503微处理器,主要控制各关节的实时运动。编程时可以VAL语言和6503汇编语言混合编程。
VAL语言命令简单、清晰易懂,描述机器人作业动作及与上位机的通信均较方便,实时功能强;可以在离线和在线两种状态下编程,适用于多种计算机控制的机器人;能够迅速地计算出不同坐标系下复杂运动的连续轨迹,能连续生成机器人的控制信号,可以与操作者交互地在线修改程序和生成程序;VAL语言包含有一些子程序库,通过调用各种不同的子程序可很快组合成复杂操作控制;能与外部存储器进行快速数据传输以保存程序和数据。 VAL语言系统包括文本编辑、系统命令和编程语言三个部分。在文本编辑状态下可以通过键盘输入文本程序,也可通过示教盒在示教方式下输入程序。在输入过程中可修改、编辑、生成程序,最后保存到存储器中。在此状态下也可以调用已存在的程序。系统命令包括位置定义、程序和数据列表、程序和数据存储、系统状态设置和控制、系统开关控制、系统诊断和修改。编程语言把一条条程序语句转换执行。
为了说明VAL-Ⅱ的一些功能,我们通过下面的程序清单来描述其命令语句:
PROGRAM TEST 程序名
SPEED 30 ALWAYS 设定机器人的速度
height=50 设定沿末端执行器a轴方向抬起或落下的距离
MOVES p1 沿直线运动机器人到点p 1
MOVE p2 用关节插补方式运动机器人到第二个点p 2
REACT 1001 如果端口1的输入信号为高电平(关),则立即停止机器人
BREAK 当上述动作完成后停止执行
DELAY 2 延迟2s执行
IF SIG(1001) GOTO 100 检测输入端口1,如果为高电平(关),则转入继续执行第100行命令,否则继续执行下一行命令
OPEN 打开手爪
MOVE p5 运动到点p 5
SIGNAL 2 打开输出端口2
APPRO p6,height 将机器人沿手爪(工具坐标系)的a轴移向p 6,直到离开它一段指定距离height的地方,这一点叫抬起点
MOVE p6 运动到位于p 6点的物体
CLOSE 关闭手爪,并等待直至手爪闭合
DEPART height 沿工具坐标系向上移动height距离
MOVE p1 将机器人移到p 1点
TYPE ″all done″ 在显示器上显示all done
(2)SIGLA语言
SIGLA是一种仅用于直角坐标式SIGMA装配型机器人运动控制时的一种编程语言,是20世纪70年代后期由意大利Olivetti公司研制的一种简单的非文本语言。这种语言主要用于装配任务的控制,它可以把装配任务划分为一些装配子任务,如取旋具、在螺钉上料器上取螺钉A、搬运螺钉A、定位螺钉A、装入螺钉A、紧固螺钉等。编程时预先编制子程序,然后用子程序调用的方式来完成。
SIGLA类语言有多个指令字,它的主要特点是为用户提供定义机器人任务的能力在SIGMA型机器人上,装配任务常由若干子任务组成,为了完成对子任务的描述及将子任务进行相应的组合,SIGLA设计了32个指令定义字。要求这些指令定义字能够描述各种子任务;将各子任务组合起来成为可执行的任务。
(3)IML语言
IML也是一种着眼于末端执行器的动作级语言,由日本九州大学开发而成。IML语言的特点是编程简单,能人机对话,适合于现场操作,许多复杂动作可由简单的指令来实现,易被操作者掌握。
IML用直角坐标系描述机器人和目标物的位置和姿态。坐标系分两种,一种是机座坐标系,一种是固连在机器人作业空间上的工作坐标系。语言以指令形式编程,可以表示机器人的工作点、运动轨迹、目标物的位置及姿态等信息,从而可以直接编程。往返作业可不用循环语句描述,示教的轨迹能定义成指令插到语句中,还能完成某些力的施加。
IML语言的主要指令有运动指令MOVE、速度指令SPEED、停止指令STOP、手指开合指令OPEN及CLOSE、坐标系定义指令COORD、轨迹定义命令TRAJ、位置定义命令HERE、程序控制指令IF…THEN、FOREACH语句、CASE语句及DEFINE等。
(4)AML语言
AML语言是IBM公司为3P3R机器人编写的程序。 这种机器人带有三个线性关节、三个旋转关节,还有一个手爪。 各关节由数字<1,2,3,4,5,6,7>表示,1、2、3表示滑动关节,4、5、6表示旋转关节,7表示手爪。 描述沿X、Y、Z轴运动时,关节也可分别用字母JX、JY、JZ表示,相应地JR、JP、JY分别表示绕翻转(Roll)、俯仰(Pitch)和偏转(Yaw)轴(用来定向)旋转,而JG表示手爪。
在AML中允许两种运动形式:MOVE命令是绝对值,也就是说,机器人沿指定的关节运动到给定的值; DMOVE命令是相对值,也就是说,关节从它当前所在的位置起运动给定的值。 这样,MOVE(1,10)就意味着机器人将沿X轴从坐标原点起运动10in(1in=2.54cm),而DMOVE(1,10)则表示机器人沿X轴从它当前位置起运动10in。AML语言中有许多命令,它允许用户编制复杂的程序。
以下程序用于引导机器人从一个地方抓起一件物体,并将它放到另一个地方,并以此例来说明如何编制一个机器人程序。
SUBR(PICKPLACE); 子程序名
PT1: NEW<4,-24,2,0,0,-13>; 位置说明
PT2: NEW<-2,13,2,135,-90,-33>;
PT3: NEW<-2,13,2,150,-90,-33,1>;
SPEED(0.2); 指定机器人的速度(最大速度的20%)
MOVE(ARM,0,0); 将机器人(手臂)复位到参考坐标系原点
MOVE(<1,2,3,4,5,6>,PT1); 将手臂运动到物体上方的点1
MOVE(7,3); 将抓持器打开到3in
DMOVE(3,-1); 将手臂沿Z轴下移1in
DMOVE(7,-1.5); 将抓持器闭合1.5in
DMOVE(3,1); 沿X轴将物体抬起1in
MOVE(<JX,JY,JZ,JR,JR,JY>,PT2); 将手臂运动到点2
DMOVE(JZ,-3); 沿Z轴将手臂下移3in放置物体
MOVE(JG,3); 将抓持器打开到3in
DMOVE(JZ,11); 将手臂沿Z轴上移11in
MOVE(ARM,PT3); 将手臂运动到点3
(5)AUTOPASS语言
AUTOPASS语言是一种对象级语言。 对象级语言是靠对象物状态的变化给出大概的描述,把机器人的工作程序化的一种语言。AUTOPASS、LUMA、RAFT等都属于这一级语言。 AUTOPASS是IBM公司属下的一个研究所提出来的机器人语言,它像给人的组装说明书一样,是针对机器人操作的一种语言。 程序把工作的全部规划分解成放置部件、插入部件等宏功能状态变化指令来描述。AUTOPASS的编译是用称作环境模型的数据库,边模拟工作执行时环境的变化边决定详细动作,作出对机器人的工作指令和数据。AUTOPASS的指令分成如下四组:
① 状态变更语句。
PLACE,INSERT,EXTRACT,LIFT,LOWER,SLIDE,PUSH,ORIENT,TURN,GRASP,RELEASE,MOVE。
② 工具语句。
OPERATE,CLUMP,LOAP,UNLOAD,FETCH,REPLACE,SWITCH,LOCK,UNLOCK。
③ 紧固语句。
ATTACH,DRIVE IN,RIVET,FASTEN,UNFASTEN。
④ 其他语句。
VERIFY,OPEN STATE OF,CLOSED STATE OF,NAME,END。
例如,对于PLACE的描述语法为:
PLACE<object><preposition phrase><object><grasping phrase><final condition phrase><constraint phrase><then hold>
其中,<object>是对象名; <preposition phrase>表示ON或IN那样的对象物间的关系;<grasping phrase>是提供对象物的位置和姿态、抓取方式等; <constraint phrase>是末端操作器的位置、方向、力、时间、速度、加速度等约束条件的描述选择; <then hold>是指令机器人保持现有位置。
(6)AL语言
AL语言是20世纪70年代中期美国斯坦福大学人工智能研究所开发研制的一种机器人语言,它是在WAVE的基础上开发出来的,也是一种动作级编程语言,但兼有对象级编程语言的某些特征,使用于装配作业。它的结构及特点类似于PASCAL语言,可以编译成机器语言在实时控制机上运行,具有实时编译语言的结构和特征,如可以同步操作、条件操作等。AL语言设计的原始目的是用于具有传感器信息反馈的多台机器人或机械手的并行或协调控制编程。
运行AL语言的系统硬件环境包括主、从两级计算机控制,主机内的管理器负责管理协调各部分的工作,编译器负责对AL语言的指令进行编译并检查程序,实时接口负责主、从机之间的接口连接,装载器负责分配程序。主机的功能是对AL语言进行编译,对机器人的动作进行规划,从机接受主机发出的动作规划命令,进行轨迹及关节参数的实时计算,最后对机器人发出具体的动作指令。
AL变量的基本类型有标量(SCALAR)、矢量(VECTOR)、旋转(ROT)、坐标系(FRAME)和变换(TRANS)。
① 标量 标量与计算机语言中的实数一样,是浮点数,可以进行加、减、乘、除和指数五种运算,也可以进行三角函数和自然对数的变换。AL中的标量可以表示时间(TIME)、距离(DISTANCE)、角度(ANGLE)、力(FORCE)或者它们的组合,并可以处理这些变量的量纲,即秒(sec)、英寸(inch)、度(deg)或盎司(ounce)等。AL中有几个事先定义的标量,例如: PI=3.14159,TRUE=1,FALSE=0。
② 矢量 矢量由一个三元实数(x,y,z)构成,表示对应于某坐标系的平移和位置之类的量。 与标量一样,它们可以是有量纲的。 利用VECTOR函数,可以由三个标量表达式来构造矢量。
在AL中有几个事先定义过的矢量:
xhat<-VECTOR(1,0,0);
yhat<-VECTOR (0,1,0);
zhat<-VECTOR (0,0,1);
nilvect<-VECTOR(0,0,0)。
矢量可以进行加、减、内积、叉积及与标量相乘、相除等运算。
③ 旋转 旋转表示绕一个轴旋转,用以表示姿态。 旋转用函数ROT来构造,ROT函数有两个参数: 一个代表旋转轴,用矢量表示;另一个是旋转角度。旋转规则按右手法则进行。 此外,x函数AXIS(x)表示求取x的旋转轴,而│x│表示求取x的旋转角。AL中有一个称为nilrot的事先说明过的旋转,定义为ROT(zhat,0*deg)。
④ 坐标系 坐标系可通过调用函数FRAME来构成。 该函数有两个参数: 一个表示姿态的旋转,另一个表示位置的距离矢量。AL中定义STATION代表工作空间的基准坐标系。
⑤ 变换 TRANS型变量用来进行坐标系间的变换。与FRAME一样,TRANS包括两部分: 一个旋转和一个向量。 执行时,先与相对于作业空间的基坐标系旋转部分相乘,再加上向量部分。当算术运算符“<-”作用于两个坐标系时,是指把第一个坐标系的原点移到第二个坐标系的原点,再经过旋转使其轴重合。
各家工业机器人公司的机器人编程语言都不相同,各家有各家自己的编程语言。例如Staubli机器人的编程语言叫VAL3,风格和Basic相似;ABB的叫做RAPID,风格和C相似;还有Adept Robotics的V+、Fanuc、KUKA、MOTOMAN都有专用的编程语言,Unimation公司最开始的语言是VAL。但是,不论变化多大,其关键特性都很相似。
1.1.4 动作级语言
动作级编程语言是最低一级的机器人语言。它以机器人的运动描述为主,通常一条指令对应机器人的一个动作,表示从机器人的一个位姿运动到另一个位姿。动作级编程语言的优点是比较简单,编程容易。其缺点是功能有限,无法进行繁复的数学运算,不接受浮点数和字符串,子程序不含有自变量;不能接受复杂的传感器信息,只能接受传感器开关信息;与计算机的通信能力很差。典型的动作级编程语言为VAL语言,如VAL语言语句“MOVE TO (destination)”的含义为机器人从当前位姿运动到目的位姿。
动作级编程语言编程时分为关节级编程和末端执行器级编程两种。
(1)关节级编程
关节级编程是以机器人的关节为对象,编程时给出机器人一系列各关节位置的时间序列,在关节坐标系中进行的一种编程方法。对于直角坐标型机器人和圆柱坐标型机器人,由于直角关节和圆柱关节的表示比较简单,这种方法编程较为适用;而对具有回转关节的关节型机器人,由于关节位置的时间序列表示困难,即使一个简单的动作也要经过许多复杂的运算,故这一方法并不适用。
关节级编程可以通过简单的编程指令来实现,也可以通过示教盒示教和键入示教实现。
(2)末端执行器级编程
末端执行器级编程在机器人作业空间的直角坐标系中进行。在此直角坐标系中给出机器人末端执行器一系列组成位姿的时间序列,连同其他一些辅助功能如力觉、触觉、视觉等的时间序列,同时确定作业量、作业工具等,协调地进行机器人动作的控制。这种语言的基本特点如下。
① 各关节的求逆变换由系统软件支持进行;
② 数据实时处理且超前于执行阶段;
③ 使用方便,占内存较少;
④ 指令语句有运动指令语言、运算指令语句、输入输出和管理语句等。
这种编程方法允许有简单的条件分支,有感知功能,可以选择和设定工具,有时还有并行功能,数据实时处理能力强。
1.1.5 对象级语言
所谓对象即作业及作业物体本身。对象级编程语言是比动作级编程语言高一级的编程语言,它不需要描述机器人手爪的运动,只要由编程人员用程序的形式给出作业本身顺序过程的描述和环境模型的描述,即描述操作物与操作物之间的关系。通过编译程序机器人即能知道如何动作。
这类语言典型的例子有AML及AUTOPASS等语言,其特点为:
① 具有动作级编程语言的全部动作功能。
② 有较强的感知能力,能处理复杂的传感器信息,可以利用传感器信息来修改、更新环境的描述和模型,也可以利用传感器信息进行控制、测试和监督。
③ 具有良好的开放性,语言系统提供了开发平台,用户可以根据需要增加指令,扩展语言功能。
④ 数字计算和数据处理能力强,可以处理浮点数,能与计算机进行即时通信。
对象级编程语言用接近自然语言的方法描述对象的变化。对象级编程语言的运算功能、作业对象的位姿时序、作业量、作业对象承受的力和力矩等都能以表达式的形式出现。系统中机器人尺寸参数、作业对象及工具等参数一般以知识库和数据库的形式存在,系统编译程序时获取这些信息后对机器人动作过程进行仿真,再进行实现作业对象合适的位姿,获取传感器信息并处理,回避障碍以及与其他设备通信等工作。