第十章 机器人程序设计
机器人的程序编制是机器人运动和控制的结合点,是实现人与机器人通信的主要方法,也是研究机器人系统的最困难和关键的问题之一。编程系统的核心问题是操作运动控制问题。
一台机器人能够编程到什么程度,决定了此机器人的适应性。例如,机器人能否执行复杂顺序的任务?能否快速地从一种操作方式转换到另一种操作方式?能否在特定环境中做出决策?所有这些问题,在很大程度上都是程序设计所考虑的问题,而且与机器人的控制问题密切相关。
机器人系统的编程能力极大地决定了具体的机器人实用功能的灵活性和智能程度。机器人的工作能力基本上是由其软件系统决定的。智能机器人的研究与开发,就是机器人硬件、软件和智能三者有机结合的结果。
10.1 机器人编程要求与语言类型
机器人的机构和运动均与一般机械不同,因而其程序设计也具有特色,进而对机器人程序设计提出特别要求。在讨论对机器人编程的要求之前,让我们举例说明机器人控制器的工作顺序。
图 10.1 表示一个制造过程中用于进行装配的自动工作站,它由传送带、摄像机、工业机器人、送料器、压床和货盘等组成。传送带的运动由计算机控制,用于传送工件。摄像机连接至视觉系统,用于确定传送带上工件的位置。工业机器人具有力感手腕,用于抓取和装卸工件、零件和装配件。送料器装在工作台表面上,能为机械手提供一个装配用零件。压床也是由计算机控制的,它的装卸操作可由机器人进行。货盘则用于存放装配好的部件。

整个装配过程由机械手控制器以下列顺序进行控制:
(1)发出传送带启动信号,当视觉系统获悉已检测到传送带上的托架工件时,传送带停止运动。
(2)视觉系统检测传送带上托架的位置和方向,并检查托架的缺陷,如所钻孔数是否无误。
(3)根据视觉系统的输出,机械手以规定的力抓取托架。对夹手指尖间的距离进行检验,以确保托架被正确抓取。
(4)把托架装到工作台上的安装夹具内。这时,可命令传送带再次启动,以便传送下一个托架。
(5)机械手从送料器捡起一个销钉,并把它部分地插入托架的一个锥形孔内。需要采用力控制来执行插入任务,并检查是否已经插好。
(6)机械手抓起托架-销钉装配件,并放到压床上。
(7)命令压床启动,把销钉外露部分压入托架孔。当压床发出完成压入任务的信号后,机械手把托架装配件送回安装夹具上,以便作最后检验。
(8)用力感装置来检查装配件,看看销钉是否已正确插入托架孔。当机械手压着销钉露出部分的侧面时,它能感受到反作用力,并能检查与确定销钉伸出托架多长。
(9)如果判定装配件是好的,那么机械手就把它送到下一个适当的安装夹具上,以便进行下一道装配工序。如果下一个安装夹具已装有工件,那么操作人员得到相应信号。要是装配件不好,那么就把它丢进废料箱内。
(10)等待第(2)步的完成,然后转第(3)步。
这是一个工业机器人执行作业任务的一个例子。显然,若用示教编程技术,这个任务将无法完成。这类应用需要一种能处理上述过程描述的机器人编程语言。
10.1.1 对机器人编程的要求
1. 能够建立世界模型(world model)
在进行机器人编程时,需要一种描述物体在三维空间内运动的方法。存在具体的几何型式是机器人编程语言最普通的组成部分。物体的所有运动都以相对于基坐标系的工具坐标来描述。机器人语言应当具有对世界(环境)的建模功能。
如果给出一个提供几何型式的机器人编程环境,那么机器人和其他机器、零件以及夹具等均能由规定各相关几何体的名义变量来建模。图10.2表示出图10.1实例的一部分,图中,标出与任务位置有关的坐标系。每一坐标系都要用机器人程序内的一个“框架”变量来表示。
对于许多机器人编程语言,定义各种几何型式的名义变量并在程序中涉及它们的能力,构成世界模型的基础。物体形状、表面、体积、质量或其他一些特性,并不是这种世界模型的组成部分。世界内的哪些物体需要被建模是设计机器人编程系统的基本决策之一。
一个世界模型系统应当包括尽可能多的关于机械手所处理物体以及机械手本身的信息。这样,就可能实现任务级编程系统的许多特性,如自动碰撞检测特性,包括计算无碰撞路径的自动路径规划问题。

2. 能够描述机器人的作业
机器人作业的描述与其环境模型密切相关,描述水平决定了编程语言水平,其中以自然语言输入为最高水平。现有的机器人语言需要给出作业顺序,由语法和词法定义输入语言,并由它描述整个作业。例如,装配作业可描述为世界模型的一系列状态,这些状态可用工作空间内所有物体的形态给定。这些形态可利用物体间的空间关系来说明。对于图10.3所示的积木世界,若定义空间关系AGAINST表示两表面彼此接触,则可以用表10.1所示语句描述图10.3所示的两种情况。若假定状态A是初始状态,状态B是目标状态,那么就可以用它们表示抓起第三块积木并把它放在第二块积木顶上的作业。如果状态A是目标状态,而状态B是初始状态,那么它们表示的作业是从叠在一起的积木块上挪走第三块积木并把它放在桌子上。这类方法容易理解,且易于说明和修改,但没有提供操作所需的全部信息。

| 状态 A | 状态 B |
| (Block1-face1 AGAINST Table) | (Block1-face1 AGAINST Table) |
| (Block1-face3 AGAINST Block2-face1) | (Block1-face3 AGAINST Block2-face1) |
| (Block3-face1 AGAINST Table) | (Block2-face3 AGAINST Block3-face1) |
3. 能够描述机器人的运动
描述机器人需要进行的运动是机器人编程语言的基本功能之一。用户能够运用语言中的运动语句,与路径规划器和发生器连接,允许用户规定路径上的点及目标点,决定是否采用点插补运动或笛卡儿直线运动。用户还可以控制运动速度或运动持续时间。
为阐明运动基元的各种语法,让我们考虑下列机械手运动的例子:
(1)移至位置“goal1”;
(2)再以直线移至位置“goal2”;
(3)然后,不停顿地移动经过“vial”,到达停止位置“goal3”。
假设路径上所有这些点都已经示教过或者在文本上被叙述过,那么可用不同语言写出这段程序如下:
用 VAL-II 语言
move goal1
move goal2
move via1
move goal3
用 AL 语言(控制机械手“garm”)
move garm to goal1;
move garm to goal2;
move garm to goal3 via via1.
对于这种简单的运动语句,大多数编程语言具有相似的语法。不同语言间在主要运动基元上的差别是比较表面的。
4. 允许用户规定执行流程
同一般的计算机编程语言一样,机器人编程系统允许用户规定执行流程,包括试验和转移、循环、调用子程序以至中断等。
对于许多计算机应用,并行处理对于自动工作站是十分重要的。首先,一个工作站常常运用两台或多台机器人同时工作以减少过程周期。即使对于如图10.1所示的单台机器人的情况,工作站的其他设备也需要机器人控制器以并行方式控制。因此,在机器人编程语言中常常含有信号和等待等基本语句或指令,而且往往提供比较复杂的并行执行结构。
5. 要有良好的编程环境
如同任何计算机一样,一个好的编程环境有助于提高程序员的工作效率。机械手的程序编制是困难的,其编程趋向于试探对话式。如果用户忙于应付连续重复的编译语言的编辑—编译—执行循环,那么其工作效率必然是低的。因此,现在大多数机器人编程语言含有中断功能,以便能够在程序开发和调试过程中每次只执行一条单独语句。典型的编程支撑(如文本编辑调试程序)和文件系统也是需要的。根据机器人编程特点,其支撑软件应具有下列功能:
(1)在线修改和立即重新启动 机器人作业需要复杂的动作和较长的执行时间,在失败后从头开始运行程序并不总是可行的。因此支撑软件必须有在线修改程序和随时重新启动程序。
动的能力。
(2)传感器的输出和程序追踪 机器人和环境之间的实时相互作用常常不能重复,因此支撑软件应能随着程序追踪记录传感器输出之值。
(3)仿真 即在没有设置机器人和工作环境的情况下测试程序,因此可有效地进行不同程序的模拟调试。
6. 需要人机接口和综合传感信号
在编程和作业过程中,应便于人与机器人之间进行信息交换,以便在运动出现故障时能及时处理,确保安全。而且,随着作业环境和作业内容复杂程度的增加,需要有功能强大的人机接口。
机器人语言的一个极其重要的部分是与传感器的相互作用。语言系统应能提供一般的决策结构,如“if...then...else”,“case...”,“do...until...”和“while...do...”等,以便根据传感器的信息来控制程序的流程。
在机器人编程中,传感器的类型一般分为三类:
(1)位置检测用来测量机器人的当前位置,一般由编码器来实现。
(2)力觉和触觉 用来检测工作空间中物体的存在。力觉为力控制提供反馈信息,触觉用于检测抓取物体时的滑移。
(3)视觉 用于识别物体,确定它们的方位。
如何对传感器的信息进行综合,各种机器人语言都有它自己的句法。
一般传感器信息主要用途是启动或结束一个动作。例如,在传送带上到达的零件可以切断光电传感器,启动机器人拾取这个零件,如果出现异常情况,就结束动作。目前大多数语言不能直接支持视觉,用户必须有处理视觉信息的模块。
10.1.2 机器人编程语言的类型
机器人语言尽管有很多分类方法,但根据作业描述水平的高低,通常可分为三级:(1)动作级;(2)对象级;(3)任务级。
1. 动作级编程语言
动作级语言是以机器人的运动作为描述中心,通常由使夹手从一个位置到另一个位置的一系列命令组成。动作级语言的每一个命令(指令)对应于一个动作。如可以定义机器人的运动序列(MOVE),基本语句形式为
$$ \mathrm{M O V E}\mathrm{T O}(\mathrm{d e s t i n a t i o n}) $$
动作级语言的代表是 VAL 语言,它的语句比较简单,易于编程。动作级语言的缺点是不能进行复杂的数学运算,不能接受复杂的传感器信息,仅能接受传感器的开关信号,并且和其他计算机的通信能力很差。VAL 语言不提供浮点数或字符串,而且子程序不含自变量。
动作级编程又可分为关节级编程和终端执行器编程两种。
(1) 关节级编程
关节级编程程序给出机器人各关节位移的时间序列。这种程序可以用汇编语言、简单的编程指令实现,也可通过示教盒示教或键入示教实现。
关节级编程是一种在关节坐标系中工作的初级编程方法,用于直角坐标型机器人和圆柱坐标型机器人编程尚较为简便。但用于关节型机器人,即使完成简单的作业,也首先要进行运动方程求解才能编程,整个编程过程很不方便。
关节级编程得到的程序没有通用性,即为一台机器人编制的程序一般难以用到另一台机器人上。这样得到的程序也不能模块化,它的扩展也十分困难。
(2) 终端执行器级编程
终端执行器级编程是一种在作业空间内直角坐标系里工作的编程方法。
终端执行器级编程程序给出机器人终端执行器的位姿和附加功能的时间序列,包括力觉、触觉、视觉等功能以及作业用量、作业工具的选定等。这种语言的指令由系统软件解释执行。可提供简单的条件分支,可应用子程序,并提供较强的感受处理功能和工具使用功能,这类语言有的还具有并行功能。
这种语言的基本特点是:
① 各关节的求逆变换由系统软件支持进行;
② 数据实时处理后用于执行阶段;
③ 使用方便,占内存较少;
④ 指令语句有运动指令语言、运算指令语句、输入输出和管理语句等。
2. 对象级编程语言
对象级语言解决了动作级语言的不足,它是描述操作物体间关系使机器人动作的语言,即是以描述操作物体之间的关系为中心的语言,这类语言有 AML、AUTOPASS 等,它具有以下特点。
(1)运动控制 具有与动作级语言类似的功能。
(2)处理传感器信息 可以接收比开关信号复杂的传感器信号,并可利用传感器信号进行控制、监督以及修改和更新环境模型。
(3)通信和数字运算 能方便地和计算机的数据文件进行通信,数字计算功能强,可以进行浮点计算。
(4)具有很好的扩展性 用户可以根据实际需要,扩展语言的功能,如增加指令等。
作业对象级编程语言以近似自然语言的方式描述作业对象的状态变化,指令语句是复合语句结构,用表达式记述作业对象的位姿时序数据及作业用量、作业对象承受的力、力矩等时序数据。
将这种语言编制的程序输入编译系统后,编辑系统将利用有关环境、机器人几何尺寸、终端执行器、作业对象、工具等的知识库和数据库对操作过程进行仿真,并解决以下几方面问题,如:
(1)根据作业对象几何形状确定抓取位姿;
(2)各种感受信息的获取及综合应用;
(3)作业空间内各种事物状态的实时感受及其处理;
(4)障碍回避;
(5)和其他机器人及附属设备之间的通信与协调。
这种语言的代表是 IBM 公司在 20 世纪 70 年代后期针对装配机器人开发出的 AUTOPASS 语言。
AUTOPASS 是一种用于计算机控制下进行机械零件装配的自动编程系统,这一编程系统面对作业对象及装配操作而不直接面对装配机器人的运动。
AUTOPASS 自动编程系统的工作过程大致如下:
(1)用户提出装配任务,做出给定任务的装配工艺规程;
(2)编写 AUTOPASS 源程序;
(3)确定初始环境模型;
(4)AUTOPASS的编译系统逐句处理AUTOPASS源程序,并和环境模型及用户实时交联;
(5)产生装配作业方法和终端效应器状态指令码;
(6)AUTOPASS 为用户提供 PL/1 的控制和数据系统能力。
3. 任务级编程语言
任务级语言是比较高级的机器人语言,这类语言允许使用者对工作任务所要求达到的目标直接下命令,不需要规定机器人所做的每一个动作的细节。只要按某种原则给出最初的环境模型和最终工作状态,机器人可自动进行推理、计算,最后自动生成机器人的动作。任务级语言的概念类似于人工智能中程序自动生成的概念。任务级机器人编程系统能够自动执行许多规划任务。例如,当发出“抓起螺杆”的命令时,该系统必须规划出一条避免与周围障碍物发生碰撞的机械手运动路径,自动选择一个好的螺杆抓取位置,并把螺杆抓起。与此相反,对于显式机器人编程语言,所有这些选择都需要由程序员进行;因此,在实际调整中,必须把指定的工作任务翻译为执行该任务的机器人程序。为了完成这一困难任务,需要对程序员进行专门训练。美国普渡(Purdue)大学开发的机器人控制C程序库RCCL就是一种任务级编程语言,它使用C语言和一组C函数来控制机械手的运动,把工作任务与程序直接联系起来。
各种机器人编程语言具有不同的设计特点,它们是由许多因素决定的。这些因素包括:
(1)语言模式,如文本、清单等。
(2)语言型式,如子程序、新语言等。
(3)几何学数据形式,如坐标系、关节转角、矢量变换、旋转以及路径等。
(4)旋转矩阵的规定与表示,如旋转矩阵、矢量角、四元数组、欧拉角以及滚动-偏航-俯仰角等。
(5)控制多个机械手的能力。
(6)控制结构,如状态标记、if-then,if-then-else,while-do,do-until,case,for,begin-end,cobegin-coend,procedure/function/subroutine等。
(7)控制模式,如位置、偏移力、柔顺运动、视觉伺服、传送带跟踪以及物体跟踪等。
(8)运动形式,如两点间的坐标关系、两点间的直线、连接几个点、连续路径、隐式几何图形(如圆周)等。
(9)信号线,如二进制输入输出、模拟输入输出等。
(10)传感器接口,如视觉、力/力矩、接近度传感器和限位开关等。
(11)支援模块,如文件编辑程序、文件系统、解释程序、编译程序、模拟程序、宏程序、指令文件、分段联机、差错联机、HELP功能以及指导诊断程序等。
(12)调试性能,如信号分级变化、中断点和自动记录等。
10.2 机器人语言系统结构和基本功能
10.2.1 机器人语言系统的结构
机器人语言实际上是一个语言系统,机器人语言系统既包含语言本身——给出作业指示和动作指示,同时又包含处理系统——根据上述指示来控制机器人系统。机器人语言系统如图10.4所示,它能够支持机器人编程、控制,以及与外围设备、传感器和机器人接口;同时还能支持和计算机系统的通信。

机器人语言操作系统包括三个基本的操作状态:(1)监控状态;(2)编辑状态;(3)执行状态。
监控状态是用来进行整个系统的监督控制的。在监控状态,操作者可以用示教盒定义机器人在空间的位置,设置机器人的运动速度,存储和调出程序等。
编辑状态是提供操作者编制程序或编辑程序的。尽管不同语言的编辑操作不同,但一般均包括:写入指令、修改或删去指令以及插入指令等。
执行状态是用来执行机器人程序的。在执行状态,机器人执行程序的每一条指令,操作者可通过调试程序来修改错误。例如,在程序执行过程中,某一位置关节角超过限制,因此机器人不能执行,在CRT上显示错误信息,并停止运行。操作者可返回到编辑状态修改程序。大多数机器人语言允许在程序执行过程中,直接返回到监控或编辑状态。
和计算机编程语言类似,机器人语言程序可以编译,即把机器人源程序转换成机器码,以便机器人控制柜能直接读取和执行;编译后的程序,运行速度将大大加快。
10.2.2 机器人编程语言的基本功能
任务程序员能够指挥机器人系统去完成的分立单一动作就是基本程序功能。例如,把工具移动至某一指定位置,操作末端执行装置,或者从传感器或手调输入装置读取数据等。机器人工作站的系统程序员,他的责任是选用一套对作业程序员工作最有用的基本功能。这些基本功能包括运算、决策、通信、机械手运动、工具指令以及传感器数据处理等。许多正在运行的机器人系统,只提供机械手运动和工具指令以及某些简单的传感数据处理功能。
1. 运算
在作业过程中执行的规定运算能力是机器人控制系统最重要的能力之一。如果没有这种能力,那么作业程序员就要求系统程序员对工厂实际操作具有足够的远见和详细了解,以便能提供处理各种可能情况的最好软件。
装有传感器的机器人所进行的一些最有用的运算是解析几何计算。这些运算结果能使机器人自行做出决定,在下一步把工具或夹手置于何处。对于某个指定的工作任务,由于所需要的精确运算是十分明确的,因此,要求系统程序员提供包罗万象和千篇一律的程序是不现实的。系统程序员能做的最好工作是为作业程序提供一整套包括例外情况的计算工具。
一套有用的但既非必不可少又不是包含一切的用于解析几何运算的计算工具可能包括下列内容:
(1)机械手解答及逆解答。
(2)坐标运算和位置表示,例如,相对位置的构成和坐标的变化等。
2. 决策
(3)矢量运算,例如,点积、交积、长度、单位矢量、比例尺以及矢量的线性组合等。
机器人系统能够根据传感器输入信息做出决策,而不必执行任何运算。按照未处理的传感器数据计算得到的结果,是做出下一步该干什么这类决策的基础。这种决策能力使机器人控制系统的功能更强有力。一条简单的条件转移指令(例如检验零值)就足以执行任何决策算法;只要作业程序员多加尝试,那么计算结果总是能够具有这种简单形式。如果作业程序员具有多种不同的条件转移指令形式可供选择,那么他的工作就容易得多。一些可供采用的形式包括符号检验(正、负或零)、关系检验(大于、不等于等)、布尔检验(开或关、真或假)、逻辑检验(对一个计算字进行位组检验)以及集合检验(一个集合的数、空集等)等。
3. 通信
机器人系统与操作人员之间的通信能力,允许机器人要求操作人员提供信息、告诉操作者下一步该干什么,以及让操作者知道机器人打算干什么。人和机器能够通过许多不同方式进行通信。有些方法是十分简单的过程,只需要简单的设备;另一些方法则非常复杂,而且需要昂贵的电子通信装置。机器人向人提供信息的某些可能输出设备,按其复杂程度排列如下:
(1)信号灯,通过接通电灯,机器人能够给出显示信号;
(2)字符打印机、显示屏,任何采用发光二极管、等离子电池、场致发光板、发光导线或液晶的字符显示设备;
(3)绘图仪或图形显示屏;
(4)语言合成器或其他音响设备(铃、扬声器等)。
人对机器人“说话”的某些设备包括:
(1)按钮、乒乓开关、旋扭和指压开关;
(2)数字或字母数字键盘;
(3)光笔、光标指示器和数字变换板等;
(4)远距离操纵主控装置,如教练枪和悬挂式操纵台等;
(5)光学字符阅读机。
设备越简单,对操作人员技术水平的要求就越低。语音输入输出装置肯定是不简单的。这种装置的能力还是比较有限的。力图开发出一种优良的语音输入输出装置,它能广泛适用于工作现场,而且对工作人员的技术水平要求也较低。
4. 机械手运动
机械手的运动可由不同方法来描述。采用计算机之后,极大地提高了机械手的工作能力,包括:
(1)使复杂得多的运动顺序成为可能;
(2)使运用传感器控制机械手运动成为可能;
(3)能够独立存储工具位置,而与机械手的设计以及刻度系数无关。
可用许多不同方法来规定机械手的运动。最简单的方法是向各关节伺服装置提供一组关节位置,然后等待伺服装置到达这些规定位置。比较复杂的方法是在机械手工作空间内插入一些中间位置。这种程序使所有关节同时开始运动和同时停止运动。用与机械手的形状无关的坐标来表示工具位置是更先进的方法,而且(除 X-Y-Z 机械手外)需要用一台计算机对解答进行计算。在笛卡儿空间内插入工具位置能使工具端点沿着路径跟随轨迹平滑运动。引入一个参考坐标系,用以描述工具位置,然后让该坐标系运动。这对许多情况是很方便的。
还可以把运动描述为绝对运动和相对运动。绝对运动每次都把工具带到工作空间的同一位置,而与工具的原来位置无关。相对运动带动工具从初始位置开始进行规定的运动,工具到达的位置取决于它的初始位置。一个只采用相对运动的运动子程序能够使我们从最后一个相对运动出发,把工具带回它的起始位置。
5. 工具指令
一个工具控制指令通常是由闭合某个开关或继电器而开始触发的,而继电器又可能把电源接通或断开,以直接控制工具运动,或者送出一个小功率信号给电子控制器,让后者去控制工具。直接控制是最简单的方法,而且对控制系统的要求也较少。可以用传感器来感受工具运动及其功能的执行情况。
当采用工具功能控制器(tool function controller)时,对机器人主控制器来说就可能对
机器人进行比较复杂的控制。在这种控制系统中,机器人控制器对机械手进行定位,并与工具功能控制器实行通信。工具功能由传感器触发时,控制信号送至某个内部子程序或外部控制器。然后,这一工具功能就由其功能控制系统来执行。当这一工具功能完成时,控制返回至机器人控制器。如果各个操作之间不发生冲突,而且控制交互冲突又被补偿,那么,采用单独控制系统能够使得工具功能控制与机器人控制协调一致地工作。
6. 传感数据处理
用于机械手控制的通用计算机只有与传感器连接起来,才能发挥其全部效用。我们已经知道,传感器具有多种形式。此外,我们已在第七章中按照功能对传感器进行了系统的介绍。
传感数据处理是许多机器人程序编制的十分重要而又复杂的组成部分。当采用触觉、听觉或视觉传感器时,更是如此。例如,当使应用视觉传感器获取视觉特征数据、辨识物体和进行机器人定位时,视觉数据往往是极其大量的,对其处理是十分费时的。
10.3 常用的机器人编程语言
主要机器人语言列表示于表10.2。
| 序号 | 语言名称 | 国家 | 研究单位 | 简要说明 |
| 1 | AL | 美 | Stanford AI Lab. | 机器人动作及对象物描述 |
| 2 | AUTOPASS | 美 | IBM Watson Research Lab. | 组装机器人用语言 |
| 3 | LAMA-S | 美 | MIT | 高级机器人语言 |
| 4 | VAL | 美 | Unimation 公司 | PUMA 机器人(采用 MC6800 和 LSI11 两级微型机)语言 |
| 5 | ARIL | 美 | AUTOMATIC 公司 | 用视觉传感器检查零件用的机器人语言 |
| 6 | WAVE | 美 | Stanford AI Lab. | 操作器控制符号语言 |
| 7 | DIAL | 美 | Charles Stark Draper Lab. | 具有 RCC 柔顺性手腕控制的特殊指令 |
| 8 | RPL | 美 | Stanford RI Int. | 可与 Unimation 机器人操作程序结合预先定义程序库 |
| 9 | TEACH | 美 | Bendix Corporation | 适于两臂协调动作,与 VAL 一样是使用范围广的语言 |
| 10 | MCL | 美 | Mc Donnell Douglas Corporation | 编程机器人、NC 机床传感器、摄像机及其控制的计算机综合制造用语言 |
| 11 | INDA | 美、英 | SIR International and Philips | 相当于 RTL/2 编程语言的子集,处理系统使用方便 |
| 12 | RAPT | 英 | University of Edinburgh | 类似 NC 语言 APT(用 DEC 20,LSI 11/2 微型机) |
| 序号 | 语言名称 | 国家 | 研究单位 | 简要说明 |
| 13 | LM | 法 | AI\nGroup of IMAG | 类似 PASCAL,数据定义类似 AL。用于装配机器人(用 LS 11/3 微型机) |
| 14 | ROBEX | 德 | Machine Tool Lab.\nTH\nArchen | 具有与高级 NC 语言 EXAPT 相似结构的编程语言 |
| 15 | SIGLA | 意 | Olivetti | SIGMA 机器人语言 |
| 16 | MAL | 意 | Milan\nPolytechnic | 两臂机器人装配语言,其特征是方便,易于编程 |
| 17 | SERF | 日 | 三协精机 | SKILAM 装配机器人(用 Z-80 微型机) |
| 18 | PLAW | 日 | 小松制作所 | RW 系列弧焊机器人 |
| 19 | IML | 日 | 九州大学 | 动作级机器人语言 |
10.3.1 VAL 语言
下面首先介绍机器人专用编程语言 VAL。
1979 年美国 Unimation 公司推出的 VAL 语言,初期适用于 LSI-11/03 小型计算机上运行,后来改进为 VAL-Ⅱ则可在 LSI-11/23 上运行。
VAL 语言是在 BASIC 语言的基础上扩展的机器人语言,它具有 BASIC 式的结构,在此基础上添加了一批机器人编程指令和 VAL 监控操作系统。此操作系统包括用户交联、编辑和磁盘管理等部分。VAL 语言可连续实时运算,迅速实现复杂的运动控制。
VAL 语言适用于机器人两级控制系统,上位机是 LSI-11/23,机器人各关节则可由 6503 微处理器控制。上位机还可以和用户终端、软盘、示教盒、I/O 模块和机器视觉模块等交联。
调试过程中 VAL 语言可以和 BASIC 语言及 6503 汇编语言联合使用。
VAL 语言目前主要用在各种类型的 PUMA 机器人以及 UNIMATE 2000 和 UNIMATE 4000 系列机器人上。
VAL 语言的主要特点是:
(1)编程方法和全部指令可用于多种计算机控制的机器人。
(2)指令简明,指令语句由指令字及数据组成,实时及离线编程均可应用。
(3)指令及功能均可扩展,可用于装配线及制造过程控制。
(4)可调用子程序组成复杂操作控制。
(5)可连续实时计算,迅速实现复杂运动控制;能连续产生机器人控制指令,同时实现人机交联。
在 VAL 语言中,机器人终端位置和姿势用齐次变换表征。当精度要求较高时,可用精确点位的数据表征终端位置和姿势。
VAL 语言包括监控指令和程序指令两部分。
1. 监控指令
监控指令共有六种。
(1) 定义位置、姿势
POINT 终端位置、姿势的齐次变换或以关节位置表征的精确点位赋值。
DPOINT 取消位置、姿势齐次变换或精确点位的已赋值。
HERE 定义位置、姿势的现值。
WHERE 显示机器人在直角坐标系中的位置、姿势,关节位置和手张开量。
BASE 机器人基准坐标系置位。
TOOL 工具终端相对工具支承端面的位置、姿势赋值。
(2) 程序编程
EDIT 指令进入编辑状态后可使用 C、D、E、I、L、P、R、S、T 等编辑指令字。
(3) 列表指令
DIRECTORY 显示存储器中的全部用户程序名。
LISTL 显示任意个位置变量值。
LISTP 显示任意个用户的全部程序。
(4) 存储指令
FORMAT 磁盘格式化
STOREP 在指定磁盘文件内,存储指定程序
STOREL 存储用户程序中注明的全部位置变量名字和值。
LISTF 显示软盘中当前输入的文件目录。
LOADL 把所有文件中指定的位置变量送入系统内存。
LOADP 将文件中的程序送入内存。
DELETE 撤销磁盘中指定的文件。
COMPRESS 压缩磁盘空间。
ERASE 擦除软盘内容并初始化。
(5) 控制程序执行指令
ABORT 紧急停止(紧停)。
DO 执行单指令。
EXECUTE 按给定次数执行用户程序。
NEXT 控制程序单步执行。
PROCEED 在某步暂停、紧停、或运行错误后,自下一步起继续执行程序。
RETRY 在某步出现运行错误后,仍自某步重新运行程序。
SPEED 运动速度选择。
(6) 系统状态控制
CALIB 关节位置传感器校准。
STATUS 用户程序状态显示。
FREE 显示当前未使用的存储容量。
ENABLE 用于开关系统硬件。
ZERO 清除全部用户程序和定义的位置、重新初始化。
DONE 停止监控程序,进入硬件调试状态。
2. 程序指令
程序指令也有六种。
(1) 运动指令
GO, MOVE, MOVEI, MOVES, DRAW, APPRO, APPROS, DEPART, DRIVE, READY, OPEN, OPENI, RELAX, GRASP, DELAY.
(2) 机器人位姿控制指令
RIGHTY, LEFTY, ABOVE, BELOW, FLIP, NOFLIP.
(3) 赋值指令
SET I, TYPE I, HERE, SET, SHIFT, TOOL, INVERSE, FRAME.
(4) 控制指令
GOTO, GOSUB, RETURN, IF, IFSIG, REACT, REACTI, IGNORE, SIGNAL, WAIT, PAUSE, STOP.
(5) 开关量赋值指令
SPEED, COARSE, FINE, NONULL, NULL, INTOFF, INTON.
(6) 其他
REMARK, TYPE.
下面是一个名为 DEMO 的 VAL 程序。其功能是将物体从位置 1(PICK 位置)搬运至位置 2(PLACE 位置)。
· EDIT DEMO 启动编辑状态
• PROGRAM DEMO VAL 响应
1. ? OPEN 下一步手张开
2. ? APPRO PICK 50 运动至距 PICK 位置 50mm 处
3. ? SPEED 30 下一步降至 30% 满速
4. ? MOVE PICK 运动至 PICK 位置
5. ? CLOSEI 闭合手
6. ? DEPART 70 沿手矢量方向后退 70mm
7. ? APPRO S PLACE 75 沿直线运动至距离 PLACE 位置 75mm 处
8. ? SPEED 20 下一步降至 20% 满速
9. ? MOVES PLACE 沿直线运动至 PLACE 位置上
10. ? OPENI 在下一步之前手张开
11. ? DEPART 50 自 PLACE 位置后退 50mm
12. ? E 退出编译状态返回监控状态
10.3.2 SIGLA 语言
SIGLA 是意大利 Olivetti 公司研制的一种简单的非文本型类语言。用于对直角坐标式的 SIGMA 型装配机器人作数字控制。
SIGLA 可以在 RAM 大于 8KB 的微型计算机上执行,不需要后台计算机支持,在执行中解释程序和操作系统可由磁带输入,约占 4KB RAM,也可事先固化在 PROM 中。
SIGLA 类语言有多个指令字,它的主要特点是为用户提供了定义机器人任务的能力。在 SIGMA 型机器人上,装配任务常由若干子任务组成:
(1)取螺丝刀;
(2)在螺钉料器上取螺钉A;
(3)搬运螺钉A;
(4)螺钉 A 定位;
(5)螺钉 A 装入;
(6)上紧螺钉 A。
为了完成对子任务的描述及将子任务进行相应的组合,SIGLA设计了32个指令定义字。要求这些指令定义字能够:
(1)描述各种子任务;
(2)将各子任务组合起来成为可执行的任务。
这些指令字共分6类:
(1)输入输出指令:
(2)逻辑指令 完成比较、逻辑判断、控制指令执行顺序;
(3)几何指令 定义子坐标系;
(4)调子程序指令;
(5)逻辑连锁指令 协调两个手臂的镜面对称操作;
(6)编辑指令。
10.3.3 IML 语言
IML(Interactive Manipulator Language)语言是日本九州大学开发的一种对话性好、简单易学、面向应用的机器人语言。它和VAL等语言一样,是一种着眼于末端执行器动作进行编程的动作级语言。
IML 语言使用的数据类型有标量(整数或实数)、由六个标量组成的矢量、逻辑型数据(如果为真,则取值为 -1;如果为假,则取值为 0)。用直角坐标系来描述机器人和目标物体的位姿,使人容易理解,而且坐标系与机器人的结构无关。物体在三维空间的位姿由六维向量 $ [x, y, z, \phi, \theta, \varphi]^T $ 来描述,其中 x, y, z 表示位姿; $ \phi $ (roll)、 $ \theta $ (pitch)、 $ \varphi $ (yaw) 表示姿态。直角坐标系又分为固定在机器人上的机座坐标系和固定在操作空间的工作坐标系。IML 语言的命令以指令形式给出,由解释程序来解释。指令又可以分为由系统提供的基本指令和由使用者用基本指令定义的用户指令。
用户可以使用 IML 语言给出机器人的工作点、操作路线,或给出目标物体的位置、姿态,直接操纵机器人。除此之外,IML 语言还有如下一些特征:
(1)描述往返运作可以不用循环语句;
(2)可以直接在工作坐标系内使用;
(3)能把要示教的轨迹(末端执行器位姿向量的变化)定义成指令,加入到语言中。所示教的数据还可以用力控制方式再现出来。
10.3.4 AL 语言
AL 语言是由美国斯坦福大学人工智能实验室开发的,它基于 ALGOL 且可与 PASCAL 共用。AL 语言原设计用于有传感反馈的多个机械手并行或协同控制的编程。完整的 AL 系统硬件应包括后台计算机、控制计算机和多台在线微型计算机。例如以 PDP10 作为后台计算机,完成程序的编辑和装配,在 PDP11 上运行程序,对机器人进行控制。
AL 语言的基本功能语句如下:
• 标量(SCALAR):这是 AL 语言的基本数据形式,可进行加、减、乘、除、指数等 5 种运算,并进行三角函数及自然对数、指数的变换。AL 中的标量可为时间(TIME)、距离(DISTANCE)、角度(ANGLE)、力(FORCE)及其组合。
向量(VECTOR):用来描述位置,可进行加减、内积、外积及与标量相乘、相除等运算。
旋转(ROT):用来描述某轴的旋转或绕某轴旋转,其数据形式是向量。
• 坐标系(FRAME):用来描述操作空间中物体的位置和姿势。
· 变换(TRANS):用来进行坐标变换,包括向量和旋转两个因素。
块结构形式:用 BEGIN 和 END 作一串语句的首尾,组成程序块,描述作业情况。
· 运动语句(MOVE),描述手的运动,如从一个位置移动到另一个位置。
手的开合运动(OPEN, CLOSE)。
两物体结合的操作(AFFIX, UNFIX)。
力觉的处理功能。
力的稳定性控制。主要用于装配作业中,如对销钉插入销孔这种典型操作应控制销钉与孔的接触力。
· 同时控制多台机械手的运动语句为 COBEGIN,COEND。此时,多台机械手同时执行上述语句所包括的程序。
• 可使用子程序及数组(PROCEDURE, ARRAY)。
可与 VAL 语言进行信息交流。
近年来又推出了小型 AL 系统,它可以在 PDP 11/45 小型计算机上运行。语句基本用 PASCAL 语言写成。可供工业应用。
10.4 机器人的离线编程
机器人编程技术正在迅速发展,已成为机器人技术向智能化发展的关键技术之一。尤其令人注目的是机器人离线编程(off-line programming)系统。本节将首先阐明机器人离线编程系统的特点和要求,然后讨论离线编程系统的结构,最后介绍一个机器人离线仿真系统的例子。
10.4.1 机器人离线编程的特点和主要内容
早期的机器人主要应用于大批量生产,如自动线上的点焊、喷涂等,因而编程所花费的时间相对比较少,示教编程可以满足这些机器人作业的要求。随着机器人应用范围的扩大和所完成任务复杂程度的提高,在中小批量生产中,用示教方式编程就很难满足要求。在CAD/CAM/机器人一体化系统中,由于机器人工作环境的复杂性,对机器人及其工作环境乃至生产过程的计算机仿真是必不可少的。机器人仿真系统的任务就是在不接触实际机器人及其工作环境的情况下,通过图形技术,提供一个与机器人进行交互作用的虚拟环境。
机器人离线编程系统是机器人编程语言的拓展,它利用了计算机图形学的成果,建立起机器人及其工作环境的模型,再利用一些规划算法,通过对图形的控制和操作,在离线的情况下进行轨迹规划。机器人离线编程系统已被证明是一个有力的工具,用以增加安全性,减小机器人非工作时间和降低成本等。表10.3给出了示教编程和离线编程两种方式的比较。
| 示 教 编 程 | 离 线 编 程 |
| 需要实际机器人系统和工作环境 | 需要机器人系统和工作环境的图形模型 |
| 编程时机器人停止工作 | 编程不影响机器人工作 |
| 在实际系统上试验程序 | 通过仿真试验程序 |
| 编程的质量取决于编程者的经验 | 可用 CAD 方法,进行最佳轨迹规划 |
| 很难实现复杂的机器人运动轨迹 | 可实现复杂运动轨迹的编程 |
1. 离线编程的优点
与在线示教编程相比,离线编程系统具有如下优点:
(1)可减少机器人非工作时间,当对下一个任务进行编程时,机器人仍可在生产线上工作。
(2)使编程者远离危险的工作环境。
(3)使用范围广,可以对各种机器人进行编程。
(4)便于和CAD/CAM系统结合,做到CAD/CAM/机器人一体化。
(6)便于修改机器人程序。
(5)可使用高级计算机编程语言对复杂任务进行编程。
机器人语言系统在数据结构的支持下,可以用符号描述机器人的动作,一些机器人语言也具有简单的环境构型功能。但由于目前的机器人语言都是动作级和对象级语言,因而编程工作是相当冗长繁重的。作为高水平的任务级语言系统目前还在研制之中。任务级语言系统除了要求更加复杂的机器人环境模型支持外,还需要利用人工智能技术,以自动生成控制决策和产生运动轨迹。因此可把离线编程系统看做动作级和对象级语言图形方式的延伸,是把动作级和对象级语言发展到任务级语言所必须经过的阶段。从这点来看,离线编程系统是研制任务级编程系统的一个很重要的基础。
2. 离线编程系统的主要内容
离线编程系统不仅是机器人实际应用的一个必要手段,也是开发和研究任务规划的有力工具。通过离线编程可建立起机器人与CAD/CAM之间的联系。设计离线编程系统应考虑以下几方面的内容:
(1)机器人工作过程的知识:
(2)机器人和工作环境三维实体模型;
(3)机器人几何学、运动学和动力学知识;
(4)基于图形显示和进行机器人运动图形仿真的关于上述(1),(2),(3)的软件系统;
(5)轨迹规划和检查算法,如检查机器人关节超限、检测碰撞、规划机器人在工作空间的运动轨迹等;
(6)传感器的接口和仿真,以利用传感器的信息进行决策和规划;
(7)通信功能,进行从离线编程系统所生成的运动代码到各种机器人控制柜的通信;
(8)用户接口,提供有效的人机界面,便于人工干预和进行系统的操作。
此外,由于离线编程系统的编程是采用机器人系统的图形模型来模拟机器人在实际环境中的工作进行的,因此,为了使编程结果能很好地符合于实际情况,系统应能计算仿真模型和实际模型间的误差,并尽量减少这一差别。
10.4.2 机器人离线编程系统的结构
离线编程系统框图如图10.5所示,它主要由用户接口、机器人系统构型、运动学计算、轨迹规划、动力学仿真、并行操作、传感器仿真、通信接口和误差校正九部分组成。

1. 用户接口
离线编程系统的一个关键问题是能否方便地产生出机器人编程系统的环境,便于人机
交互。因此,用户接口是很重要的。工业机器人一般提供两个用户接口:一个用于示教编程,另一个用于语言编程。示教编程可以用示教盒来直接编制机器人程序。语言编程则是用机器人语言编制程序,使机器人完成给定的任务。这两种方式已广泛地应用于工业机器人。
作为机器人语言的发展,离线编程系统应把机器人语言作为用户接口的一部分,用机器人语言对机器人运动程序进行修改和编辑。用户接口的语言部分具有机器人语言类似的功能,因此在离线编程系统中需要仔细设计。另外用户接口的一个重要部分,是对机器人系统进行图形编辑。为便于操作,用户接口一般设计成交互式。例如,用户可以用鼠标器标明物体在屏幕上的方位,并能交互地修改环境模型。
2. 机器人系统的三维构型
目前用于机器人系统的构型主要有以下三种方式:①结构立体几何表示;②扫描变换表示;③边界表示。其中,最便于形体在计算机内表示、运算、修改和显示的构型方法是边界表示;而结构立体几何表示所覆盖的形体种类较多;扫描变换表示则便于生成轴对称的形体。机器人系统的几何构型大多采用这三种形式的组合。
机器人离线编程系统的核心技术是机器人及其工作单元的图形描述。构造工作单元中的机器人、夹具、零件和工具的三维几何模型,最好采用零件和工具的CAD模型,直接从CAD系统获得,使CAD数据共享。正因为从设计到制造的这种CAD集成越来越急需,所以离线编程系统应包括CAD构型子系统或把离线编程系统本身作为CAD系统的一部分。若把离线编程系统作为单独的系统,则必须具有适当的接口来实现构型与外部CAD系统的转换。
3. 运动学计算
运动学计算分运动学正解和运动学反解两部分。正解是给出机器人运动参数和关节变量,计算机器人末端位姿;反解则是由给定的末端位姿计算相应的关节变量值。在离线编程系统中,应具有自动生成运动学正解和反解的功能。
就运动学反解而言,离线编程系统与机器人控制柜的联系有两种选择:一是用离线编程系统代替机器人控制柜的逆运动学,将机器人关节坐标值通信给控制柜;二是将笛卡儿坐标值输送给控制柜,由控制柜提供的逆运动学方程求解机器人的形态。第二种选择要好一些,因为机器人制造商对具体机器人运动学反解,已采取了一些补偿措施,因此在笛卡儿坐标水平上,与机器人控制柜通信效果要好一些。在关节坐标水平上和机器人控制柜通信,离线编程系统运动学反解方程式应做到和机器人控制柜所采用的公式一致。如 PUMA 560 机器人,当关节 5 在零位,4 轴和 6 轴处在一条直线上时,机器人控制柜先解出关节 4 和 6 的角度之和,然后根据某一准则,唯一地确定出关节 4 和 6 的数值。因此在离线编程系统中,运动学反解也应采用类似的准则。另外一个问题是可行解的选择,如 PUMA 560 机器人从笛卡儿坐标系到关节坐标系转换有 8 组可行解,需要引入一个准则,以唯一地确定出可行解。为了使仿真模型和实际情况误差较小,离线编程系统所采用的可行解确定准则,应和机器人控制柜所采用的准则一致。
4. 轨迹规划
离线编程系统除了对机器人静态位置进行运动学计算外,还应该对机器人在工作空间的运动轨迹进行仿真。由于不同的机器人厂家所采用的轨迹规划算法差别很大,离线编程系统应对机器人控制柜中所采用的算法进行仿真。
机器人的运动轨迹分为两种类型:自由移动(仅由初始状态和目标状态定义)和依赖于轨迹的约束运动。约束运动受到路径约束,受到运动学和动力学约束,而自由移动没有约束条件。轨迹规划器接受路径设定和约束条件的输入,并输出起点和终点之间按时间排列的中间形态(位置和姿态、速度、加速度)序列,它们可用关节坐标或笛卡儿坐标表示。轨迹规划器采用轨迹规划算法,如关节空间的插补、笛卡儿空间的插补计算等。同时,为了发挥离线编程系统的优点,轨迹规划器还应具备可达空间的计算、碰撞的检测等功能。
5. 动力学仿真
当机器人跟踪期望的运动轨迹时,如果所产生的误差在允许范围内,则离线编程系统可以只从运动学的角度进行轨迹规划,而不考虑机器人的动力学特性。但是,如果机器人工作在高速和重负载的情况下,则必须考虑动力学特性,以防止产生比较大的误差。
快速有效地建立动力学模型是机器人实时控制及仿真的主要任务之一,从计算机软件设计的观点看,动力学模型的建立可分为三类:数字法、符号法和解析(数字-符号)法。在数字法中,所有变量都表示成实数,每个变量占据一个内存,这种方法的计算量很大。在符号法中,所有变量均表示成符号,它可以在计算机上自动进行模型矩阵元素的符号运算,但需要复杂的软件与先进的计算机,以及较大的内存。为了减少内存,解析法把部分变量处理成实数,得到较好效果。面向计算机的解析模型算法,可由计算机自动生成机器人的动力学方程。
6. 并行操作
一些工业应用场合常涉及两台或多台机器人在同一工作环境中协调作业。即使是一台机器人工作时,也常需要和传送带、视觉系统相配合。因此离线编程系统应能对多个装置进行仿真。并行操作是在同一时刻对多个装置工作进行仿真的技术。进行并行操作以提供对不同装置工作过程进行仿真的环境。在执行过程中,首先对每一装置分配并联和串联存储器。如果可以分配几个不同处理器共一个并联存储器,则可使用并行处理,否则应该在各存储器中交换执行情况,并控制各工作装置的运动程序的执行时间。由于一些装置与其他装置是串联工作的,并且并联工作装置也可能以不同的采样周期工作,因此常需使用装置检查器,以便对各运动装置工作进行仿真。装置检查器的作用是检查每一装置的执行状态,在工作过程中,它对串联工作的装置统筹安排运动的顺序。当并联工作的某一任务结束时,装置检查器可进行整体协调。装置检查器也可询问时间采样控制器,以决定每一装置的采样时间是否要细分。时间采样控制器与各运动装置交换信息,以求得采样时间的一致。
7. 传感器的仿真
在离线编程系统中,对传感器进行构型以及能对装有传感器的机器人的误差校正进行
仿真是很重要的。传感器主要分局部的和全局的两类,局部传感器有力觉、触觉和接近觉等传感器;全局传感器有视觉等传感器。传感器功能可以通过几何图形仿真获取信息。如触觉,为了获取有关接触的信息,可以将触觉阵列的几何模型分解成一些小的几何块阵列,然后通过对每一几何块和物体间干涉的检查,并将所有和物体发生干涉的几何块用颜色编码,通过图形显示可以得到接触的信息。
接近觉传感器也可利用几何模型间的干涉检查来仿真,此时传感器的几何模型可用一长方体表示,长方体的大小即为传感器所测的范围,将长方体分块,每一块表示传感器所测距离的一个单位,通过计算传感器模型的每一块和外界物体相交的集合,进行接近觉的仿真。
由以上对触觉和接近觉传感器的仿真可以看出,传感器的仿真主要涉及几何模型间干涉(相交)检验问题。
力觉传感器的仿真比触觉和接近觉要复杂,它除了要检验力传感器的几何模型和物体间的相交外,还需计算出二者相交的体积,根据相交体积的大小可以定量地表征出实际力传感器所测力和数值。
8. 通信接口
在离线编程系统中通信接口起着联结软件系统和机器人控制柜的桥梁作用。利用通信接口,可以把仿真系统所生成的机器人运动程序转换成机器人控制柜可以接受的代码。
由于工业机器人所配置的机器人语言差异很大,这样就给离线编程系统的通用性带来了很大的限制。离线编程系统实用化的一个主要问题是缺乏标准的通信接口。标准通信接口的功能是可以将机器人仿真程序转化成各种机器人控制柜可接受的格式。为了解决这个问题,一种办法是选择一种较为通用的机器人语言,然后通过对该语言加工(后置处理),使其转换成机器人控制柜可接受的语言。直接进行语言转化有两个优点:一是使用者可以不需要学习各种机器人语言,就能对不同的机器人进行编程;二是在许多机器人应用的场合,从经济上考虑是合算的。但直接进行语言转化是很复杂的,这主要是由于目前工业上所使用的机器人语言种类很多。另外一种办法是将离线编程的结果转换成机器人可接受的代码,这种方法需要一种翻译系统,以快速生成机器人运动程序代码。
9. 误差校正
离线编程系统中的仿真模型(理想模型)和实际机器人模型存在有误差,产生误差的因素主要有如下几方面。
(1) 机器人
① 连杆制造的误差和关节偏置的变化。这些结构上小的误差将会产生机器人终端较大的误差。
②机器人结构的刚度不足,在重负载情况下会因弹性变形产生较大的误差。
③相同型号机器人的不一致性。在仿真系统中,型号相同的机器人的图形模型是完全一样的,而在实际情况下往往存在有差别。
④ 控制器的数字精度。这主要受微处理器字长以及控制算法计算效率的影响。
(2) 工作空间
① 在工作空间内,很难准确地确定出物体(机器人、工件等)相对于基准点的方位。
② 外界工作环境(例如温度)的变化,会对机器人的性能产生不利的影响。
(3)离线编程系统
① 离线编程系统的数字精度。
② 实际世界模型数据的质量。
上述因素都会使离线编程系统工作时产生很大的误差。例如,常会发生机器人并不处在理想模型所处的位置。如何有效地消除误差,是离线编程系统实用化的关键。目前主要有两种误差校正方法:一是用基准点方法,即在工作空间内选择一些基准点(一般不少于三点),这些基准点具有比较高的位置精度,由离线编程系统规划使机器人运动到这些基准点,通过两者之间的差异形成误差补偿函数。二是利用传感器(力觉或视觉等)形成反馈,在离线编程系统所提供机器人位置的基础上,局部精确定位靠传感器来完成。第一种方法主要用于精度要求不太高的场合(如喷涂),第二种方法用于较高精度的场合(如装配)。
10.4.3 机器人离线编程仿真系统 HOLPSS
下面举例介绍机器人离线编程仿真系统 HOLPSS。
1. HOLPSS 系统的结构
HOLPSS 包括机器人语言处理模块、运动学及规划模块、机器人及环境的三维构型模块、机器人运动仿真模块、通信模块、主控模块和传感器仿真模块等。软件用 C++ 语言编写,其总体结构如图 10.6 所示。HOLPSS 系统采用的机器人语言类似于 VAL-Ⅱ。

HOLPSS系统工作过程为:首先用系统提供的机器人语言,根据作业任务对机器人进行编程,所得程序由机器人语言处理模块进行处理,形成仿真所需的第一级数据。然后对编程结果进行三维图形动态仿真,进行碰撞检测和可行性检测。最后生成通信所需的代码,经过一定的后置处理后,将代码传到机器人控制柜,使机器人完成给定的任务。
2. HOLPSS 系统的功能
HOLPSS系统的主要功能包括三维几何构型、运动动态仿真和动画、通信和后处理等。还可集成某些更先进的功能,如机器人布局、自动规划、自动调度和作业仿真等。
(1) 三维几何构型
在机器人离线编程系统中,机器人及其环境的构型主要是为了对机器人运动进行图形仿真,增强直观性,以检验机器人运动轨迹的可行性和合理性。因此在构型时可将机器人和环境物的外形进行适当的简化。在三维构型模块中,主要采用多面体来逼近真实的形体。几何造型方法以体元堆砌为主,尽量避免拼合运算,实在必要时才进行布尔操作。因为堆砌操作不需修改数据结构,简单快速,很适合于机器人及环境物的造型。
根据机器人结构分级的特点,对机器人总体的构型采用体素构造和分级装配的方法,即用基本体元经过一定的操作后生成机器人各部件,然后将部件装配成整体。
(2) 运动的动态仿真和动画技术
用机器人语言编程,并进行轨迹规划,形成各关节的关节角序列 $ \{\theta_{i}\} $,经运动学正解得一机器人位姿序列。将每一位姿用三维图形连续显示出来,就实现了机器人的运动仿真。HOLPSS采用微机视频技术来制作动画,以完成仿真功能。针对微机的视频特性,采用了两种动画技术:“画面存储、重放”和“换页面”技术。
(3) 通信及后置处理
离线编程的结果必须经过通信接口传到机器人控制柜,驱动机器人完成指定的任务后,才算达到了离线编程的目的。由于机器人控制柜的多样性,要设计通用的通信模块比较困难。因此一般采用后置处理将离线编程的最终结果翻译成机器人控制柜可以接受的代码形式。
针对目前机器人控制柜的情况,通信有两种方式,一是当控制柜配有机器人语言时,把离线编程语言翻译成控制柜所配的语言形式,直接驱动机器人。二是控制柜不配有机器人语言时,将生成一些与驱动机器人有关的数据,并把数据传送到控制柜,用以驱动机器人。数据和程序的传送方式有两种:一是经过接口总线,二是以磁盘为介质进行。可根据实际情况选用。
(4) 机器人作业总体布局
离线编程系统的基本任务之一是确定作业单元的总体布局,并使机器人到达全部工作点,其中包含选用适当的机器人、工件和夹具的布置。这一工作在仿真环境下反复试验完成,比在真实环境下更加有效和省力。并且预先可以自动搜索机器人和工件位姿的可行解,从而减少用户的工作量和费用。
自动布局可采用直接搜索或启发式搜索技术。因为大部分机器人都安装在地面或车间顶面,并且第一个关节是绕垂直轴回转的,因而机器人基座的三维布局一般可简化为平面问
题。这一类搜索可按某种准则进行优化,或者找到机器人和工件的第一个可行位姿布局即可。
(5) 避碰和路径优化
无碰撞路径规划和时间最优路径规划是离线编程最为重要的部分。与之相关的问题有:利用6个自由度的机器人进行仅有5个自由度几何规定的弧焊作业;冗余度机器人进行避免碰撞和回避奇异性的自动规划等。
(6) 协调运动的自动规划
许多弧焊作业要求工件与重力矢量在焊接过程中保持一定的关系,因而把工件安装在2个或3个自由度的定向系统上,并与机器人同时协调运动。这种作业系统可能具有9个或更多的自由度协调动作,当前大多数采用示教盒编程。对于这种作业的协调运动进行自动综合的规划系统具有重要的实际意义。
(7) 力控制系统的仿真
可以建立对于各种机器人力控制策略进行仿真的仿真环境。这个问题的难点在于:某些表面性质的建模,以及各种接触情况所引起的约束状态的动态仿真。在局部约束环境下,可用离线编程系统评估各种力控制装配操作的可行性。
(8) 自动调度
机器人编程中存在许多几何问题,同时还经常碰到更为麻烦的调度和通信问题。特别是将单作业单元扩展到多作业单元,进行仿真时更是如此。规划相互作用过程的调度问题是十分困难的,仍在研究中。离线编程将成为这一领域研究的理想检验手段。
(9) 误差和公差的自动评估
离线编程系统可对定位误差源进行建模,可对带缺陷传感器的数据影响进行建模,因而使得环境模型包含各种误差界限和公差信息。用该系统可以评估不同的定位和装配任务的成功或然率,同时可以提示采用何种传感器、如何布置有关传感器,以纠正可能出现的各种问题。
10.5 基于 MATLAB 的机器人学仿真
MATLAB 是由美国 Mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案。MATLAB 的核心功能可通过大量应用领域相关的工具箱进行扩充。
MATLAB Robotics Toolbox 是由澳大利亚科学家 Peter Corke 开发和维护的一套基于 MATLAB 的机器人学工具箱,当前最新版本为第 9 版,可在该工具箱的主页上免费下载 (http://www.petercorke.com/robot/)。Robotics Toolbox 提供了机器人学研究中的许多重要功能函数,包括机器人运动学、动力学、轨迹规划等。该工具箱可以对机器人进行图形仿真,并能分析真实机器人控制时的实验数据结果,因此非常适宜于机器人学的教学和研究。
本节简要介绍了 Robotics Toolbox 在机器人学仿真教学中的一些应用,具体内容包括齐次坐标变换、机器人对象构建、机器人运动学求解以及轨迹规划等。
1. 坐标变换
机器人学中关于运动学和动力学最常用的描述方法是矩阵法,这种数学描述是以四阶方阵变换三维空间点的齐次坐标为基础的。如已知直角坐标系 $ \{A\} $中的某点坐标,那么该点在另一直角坐标系 $ \{B\} $中的坐标可通过齐次坐标变换求得。一般而言,齐次变换矩阵 $ ^{T} $是 $ 4\times4 $的方阵,具有如下形式:
$$ ^{A}_{B}\boldsymbol{T}=\left[\begin{matrix}^{A}_{B}\boldsymbol{R}&\boldsymbol{^{A}}\boldsymbol{p}_{B o}\\ 0\ 0\ 0&1\end{matrix}\right] $$
其中 $ _{B}^{A}R $ 和 $ _{B}^{A}p_{B_{0}} $ 分别表示 $ \{A\}\{B\} $两坐标系之间的旋转变换和平移变换。
矩阵法、齐次变换等概念是机器人学研究中最为重要的数学基础。由于旋转变换通常会带来大量正余弦计算,复合变换带来的多个矩阵相乘就更加难以手工计算,因此建议在仿真教学中通过计算机进行相应的坐标变换计算。利用 MATLAB Robotics Toolbox 工具箱中的 transl、rotx、roty 和 rotz 函数可以非常容易地实现用齐次变换矩阵表示平移变换和旋转变换。例如机器人在 X 轴方向平移了 0.5m 的齐次坐标变换可以表示为
$$ \begin{aligned}\gg T&=trans1(0.5,0.0,0.0)\\T&=\\&\begin{array}{cccc}{{{1.0000}}}&{{{0}}}&{{{0}}}&{{{0.5000}}} \\{{{0}}}&{{{1.0000}}}&{{{0}}}&{{{0}}} \\{{{0}}}&{{{0}}}&{{{1.0000}}}&{{{0}}} \\{{{0}}}&{{{0}}}&{{{0}}}&{{{1.0000}}} \\\end{array}\end{aligned} $$
而绕 Y 轴旋转 $ 90^{\circ} $ 可以表示为
$$ \begin{aligned}\gg&T=rot y(pi/2)\\T=&\\ &\begin{array}{cccc}0.&0.0000&0&1.0000\\0&1.0000&0&0\\-1.0000&0&0.0000&0\\0&0&0&1.0000\end{array}\end{aligned} $$
复合变换可以由若干个简单变换直接相乘得到,例如让物体绕Z轴旋转 $ 90^{\circ} $,接着绕Y轴旋转 $ -90^{\circ} $,再沿X轴方向平移4个单位,则对应的齐次变换可以表示为
$$ \begin{aligned}\gg&T=trans1(4,0,0)*rot y(-pi/2)*rot z(pi/2)\\T&=&\begin{aligned}\\ &0.0000&-0.0000&-1.0000&4.0000\\&1.0000&0.0000&0&0\\&0.0000&-1.0000&0.0000&0\\&0&0&0&1.0000\\ &\end{aligned}\\ \end{aligned} $$
2. 构建机器人对象
要用计算机对机器人运动进行仿真,首先需要构建相应的机器人对象。在机器人学的教学中通常把机械手看作由一系列关节连接起来的连杆构成。为描述相邻杆件间平移和转动的关系,Denavit 和 Hartenberg 提出了一种为关节链中的每一杆件建立附属坐标系的矩阵方法,通常称为 D-H 参数法。D-H 参数法是为每个连杆坐标系建立 $ 4 \times 4 $ 的齐次变换矩阵,表示它与前一杆件坐标系的关系。
在 Robotics Toolbox 中,构建机器人对象主要在于构建各个关节,而构建关节时,会用到 LINK 函数,其一般形式为
$$ \mathrm{L=L I N K([a l p h a~A~t h e t a~D~s i g m a],~C O N V E N T I O N)} $$
参数 CONVENTION 可以取 standard 和 modified,其中 standard 代表采用标准的 D-H 参数,modified 代表采用改进的 D-H 参数。参数 alpha 代表扭角,参数 A 代表连杆长度,参数 theta 代表关节转角,参数 D 代表连杆偏距,参数 sigma 代表关节类型:0 代表旋转关节,非 0 代表平动关节。
例如,通过如下的语句即可构建一个简单的两连杆旋转机器人,命名为2R:
» L1 = link([0 1 0 0 0], 'standard');
» L2 = link([0 1 0 0 0], 'standard');
» r = robot({L1 L2}, '2R');
这样,只需指定相应的 D-H 参数,便可以对任意种类的机械手进行建模。通过 Robotics Toolbox 扩展了的 plot 函数还可将创建好的机器人在三维空间中显示出来:
$ \gg \text{plot}(r, [0, 0]) $

除了用户自己构建机器人连杆外,Robotics Toolbox也自带了一些常见的机器人对象,如教学中最为常见的PUMA 560,Standford等。通过如下的语句即可调用工具箱已构建好的PUMA 560机器人,并显示在三维空间中:
» plot(p560,qz)
注意到机械手的末端附有一个小的右手坐标系,分别用红、绿、蓝色箭头代表机械手腕关节处的 X,Y,Z 轴方向。并且在 XY 平面用黑色直线表示整个机械手的垂直投影。

更进一步,可以通过 drivebot 函数来驱使机器人运动,就像实际在操作机器人一样。具体驱动方式是为机器人每个自由度生成一个变化范围的滑动条,以手动方式来驱动机器人的各个关节,以达到驱动机器人末端执行器的目的。这种方式对于实际的多连杆机械手的运动演示非常有益,能够使读者对机械手的关节、变量等概念有更深入的理解。

3. 机器人运动学求解
与之前介绍过的坐标变换的情况类似,手工进行机器人运动学的求解非常烦琐甚至于无法得到最终的数值结果,这对于实际机器人的设计非常不利。因此在仿真实验教学中,希望能通过计算机编程的形式来进行机器人运动学的求解,把学生从烦琐的数值计算中解脱出来。下面以教学中最常用的 PUMA 560 型机器人为例,演示如何运用 Robotics Toolbox 进行正运动学与逆运动学的求解。首先定义 PUMA 560 型机器人,注意系统同时还定义了 PUMA 560 型机器人两个特殊的位姿配置:所有关节变量为 0 的 qz 状态,以及表示
“READY”状态的qr状态。如要求解所有关节变量为0时的末端机械手状态,则相应的正运动学可由下述语句求解:
$$ \begin{aligned}&\gg puma560;\\&\gg fkine(p560,qz)\\&ans=\\&\quad1.0000\quad0\quad0\quad0.4521\\&\quad0\quad1.0000\quad0\quad-0.1500\\&\quad0\quad0\quad1.0000\quad0.4318\\&\quad0\quad0\quad0\quad1.0000\end{aligned} $$
得到的即为末端机械手位姿所对应的齐次变换矩阵。
逆运动学问题则是通过一个给定的齐次变换矩阵,求解对应的关节变量。例如,假定机械手需运动到[0,-pi/4,-pi/4,0,pi/8,0]姿态,则此时末端机械手位姿所对应的齐次变换矩阵为
$$ \begin{aligned}\gg q&=\begin{bmatrix}0&pi/4&pi/4&0pi/8\ 0\end{bmatrix}\\ q&=\\ &\quad0\quad-0.7854\quad-0.7854\quad0\quad0.3927\quad0\\ \gg&T=fkine(p560,q)\\ T&=\\ &\quad0.3827\quad0.0000\quad0.9239\quad0.7371\\ &-0.0000\quad1.0000\quad-0.0000\quad-0.1501\\ &-0.9239\quad-0.0000\quad0.3827\quad-0.3256\\ &\quad0\quad0\quad0\quad1.0000\end{aligned} $$
现在假定已知上述的齐次变换矩阵T,则可以通过ikine函数求解对应的关节转角:
$$ \begin{aligned}&\gg\mathbf{qi}=\mathbf{ikine}(p560,T)\\&\mathbf{qi}=\\&\quad-0.0000\quad-0.7854\quad-0.7854\quad-0.0000\quad0.3927\quad0.0000\end{aligned} $$
发现与原始的关节转角数值相同。值得指出的是,这样的逆运动学求解在手工计算中几乎是无法完成的。
4. 轨迹规划
机器人轨迹规划的任务就是根据机器人手臂要完成的一定任务,例如要求机械手从一点运动到另一点或沿一条连续轨迹运动,来设计机器人各关节的运动函数。目前进行轨迹规划的方案主要有两种:基于关节空间方案和基于直角坐标方案。出于实际运用考虑,在教学中以讲解关节空间求解为主,本节也只演示关节空间的求解方案。
假设 PUMA 560 型机器人要在 2s 内从初始状态 qz(所有关节转角为 0)平稳地运动到朝上的“READY”状态 qr,则在关节空间进行轨迹规划的过程如下:
首先创建一个运动时间向量,假定采样时间为 56ms,则有
$$ \text{≥}t=\left[0,.056;2\right]^{\prime}; $$
在关节空间中插值可以得到
$$ \gg[\mathtt{q},\mathtt{q d},\mathtt{q d d}]=\mathtt{j t r a j}(\mathtt{q z},\mathtt{q r},\mathtt{t}); $$
q 是一个矩阵,其中每行代表一个时间采样点上各关节的转动角度,qd 和 qdd 分别是对应的关节速度向量以及关节加速度向量。jtraj 函数采用的是 7 次多项式插值,默认的初始和终止速度为 0。对于上面的运动轨迹,主要的运动发生在第 2 个及第 3 个关节,通过 MATLAB 标准的绘图函数可以清楚地看到这两个关节随时间的变化过程(如图 10.10 所示)。我们还可以通过 Robotics Toolbox 扩展了的 plot 函数以三维动画的形式演示整个运动过程(书中无法演示),调用语句为
$$ \gg plot(p560,q); $$


10.6 本章小结
本章讨论的机器人程序设计问题是机器人运动和控制的结合点,也是机器人系统的灵魂。首先,研究了对机器人编程的要求。这些要求包括能够建立世界模型、能够描述机器人的作业和运动、允许用户规定执行流程、要有良好的编程环境以及需要功能强大的人机接口,并能综合传感信号等。
接着讨论机器人编程语言的分类问题。按照机器人作业水平的高低,把机器人编程语言分为三级,即动作级、对象级和任务级。这些层级的编程语言各有特点,并适于不同的应用。本章所讨论的机器人编程问题,实际上为专用机器人语言编程。限于篇幅,本章没有介绍用通用计算机语言进行机器人编程。
10.2 节涉及机器人语言系统的结构和基本功能。一个机器人语言系统应包括机器人语言本身、操作系统和处理系统等,它能够支持机器人编程、控制、各种接口以及与计算机系
统通信。机器人编程语言具有运算、决策、通信、描述机械手运动、描述工具指令和处理传感数据等功能。
10.3 节介绍了专用机器人语言,并举例介绍了 VAL 语言,讨论了它的特点、功能、指令或语句以及适应性等。
10.4 节讨论了机器人的离线编程,包括机器人离线编程系统的特点和要求、机器人离线编程系统的结构,以及一个机器人离线仿真系统 HOLPSS 等内容。机器人离线编程是机器人编程语言的拓展,它比传统的示教编程具有一系列优点。离线编程系统不仅是机器人实际应用的必要手段,也是开发任务规划的有力工具,并可以建立 CAD/CAM 与机器人间的联系。
10.5 节介绍了 MATLAB Robotics Toolbox 在机器人学实验教学中的应用。该工具箱提供了机器人学中关于建模与仿真的许多重要函数,能够用一种规范的形式(标准的或改进的 DH 参数法)对任意的连杆机器人进行描述,并提供了三维图像/动画演示及手动关节变量调节等功能。基于 MATLAB Robotics Toolbox 的仿真实验教学,把学生从烦琐的数值计算中解脱出来,能够专注于机器人学本身的重要概念的理解与应用,获得了良好的教学效果。鉴于学生的接受能力,在给本科生授课时主要练习了坐标变换、机器人对象构建、正运动学、逆运动学求解和轨迹规划等方面的内容。更多的关于 Robotics Toolbox 的使用说明可以参见工具箱文件夹中的用户说明文档(robot.pdf)。
习题10
10.1 试谈机器人编程语言的层级、要求和研究方向。
10.2 机器人系统一般有哪些程序功能?
10.3 用任一机器人语言编写一个机器人程序,把一块积木从 A 处拾起放到 B 处。
10.4 设计一个新的机器人编程语言语法,包括绘出运动轨迹持续时间或速度的方法,对外围设备的输入输出语句,控制夹手的命令以及力感(即防护性运动)命令等。
10.5 用市场上供应的机器人编程语言编写一个程序,以执行题10.3的任务。做出任何涉及输入输出连接和其他细节的合理假设。
10.6 用任何机器人语言编写一个用于卸下小车上任意尺寸零件的通用程序。此程序应当跟踪小车的位置,而且当小车上没有零件时,应向操作人员发出信号。假设小车上的零件被卸至某条传送带上。
10.7 用任一种机器人语言编写一个用于从任意尺寸的源集装箱上卸下负载,并把它们装上任意尺寸的目标集装箱上的程序。此程序应当跟踪集装箱的位置,而且当源集装箱卸空时或目标集装箱装满时,应向操作人员发出信号。
10.8 用 AL 语言编写一个程序,它运用力控制来装香烟盒,每盒装 20 支。假设机械手的精度约为 0.64cm。应当把力控制用于许多操作。在传送带上的香烟通过视觉系统来呈现它们的坐标位置。
10.9 用任何机器人语言编写一个装配标准电话机手持部分的程序。有6个组成部件(手把、麦克风、喇叭、两个插座以及导线)放在一个料架上(料架上持有每种部件各一)。假设有个能够握持手把的夹具,还可以做出任何其他合乎情理的需要假设。
10.10 编写一个使用两台机械手的 AL 程序。一台机械手叫做 GARM,具有专用的
末端执行器,用于拿住酒瓶。另一台机械手BARM用于持住酒杯,并装有力感手腕,以便当酒杯将要装满酒时向GARM发出停止倒酒的信号。
10.11 图 10.11 表示一台机械手即将执行的把螺钉 BO 插入部件 B 上四个孔的作业任务。

其中:
$$ \mathbf{\Phi}^{\mathbf{\Phi}}\mathbf{Z}=\begin{bmatrix}1&0&0&20\\ 0&1&0&0\\ 0&0&1&20\\ 0&0&0&1\end{bmatrix},\quad\mathbf{\Phi}^{\mathbf{\Phi}}\mathbf{B}=\begin{bmatrix}0&-1&0&20\\ 1&0&0&20\\ 0&0&1&0\\ 0&0&0&1\end{bmatrix} $$
$$ ^{0}\mathbf{B}\mathbf{O}=\begin{bmatrix}{{{1}}}&{{{0}}}&{{{0}}}&{{{20}}} \\{{{0}}}&{{{1}}}&{{{0}}}&{{{40}}} \\{{{0}}}&{{{0}}}&{{{1}}}&{{{5}}} \\{{{0}}}&{{{0}}}&{{{0}}}&{{{1}}}\end{bmatrix},\quad^{BO}\mathbf{B}\mathbf{G}=\begin{bmatrix}{{{-1}}}&{{{0}}}&{{{0}}}&{{{0}}} \\{{{0}}}&{{{1}}}&{{{0}}}&{{{0}}} \\{{{0}}}&{{{0}}}&{{{-1}}}&{{{0.5}}} \\{{{0}}}&{{{0}}}&{{{0}}}&{{{1}}}\end{bmatrix} $$
$$ ^{BO}\mathbf{B}\mathbf{T}=\begin{bmatrix}{{{-1}}}&{{{0}}}&{{{0}}}&{{{0}}} \\{{{0}}}&{{{1}}}&{{{0}}}&{{{0}}} \\{{{0}}}&{{{0}}}&{{{-1}}}&{{{-4}}} \\{{{0}}}&{{{0}}}&{{{0}}}&{{{1}}}\end{bmatrix},\quad^{B}\mathbf{B}\mathbf{S}\mathbf{H}\left[1\right]=\begin{bmatrix}{{{0}}}&{{{-1}}}&{{{0}}}&{{{3}}} \\{{{1}}}&{{{0}}}&{{{0}}}&{{{2}}} \\{{{0}}}&{{{0}}}&{{{-1}}}&{{{20}}} \\{{{0}}}&{{{0}}}&{{{0}}}&{{{1}}}\end{bmatrix} $$
$$ ^{B}\mathbf{B}\mathbf{S}\mathbf{H}\left[2\right]=\left[\begin{matrix}{0}&{-1}&{}&{0}&{13}\\ {1}&{}&{0}&{}&{0}&{2}\\ {0}&{}&{0}&{-1}&{20}\\ {0}&{}&{0}&{}&{0}&{1}\\ \end{matrix}\right],\quad^{B}\mathbf{B}\mathbf{S}\mathbf{H}\left[3\right]=\left[\begin{matrix}{0}&{-1}&{}&{0}&{3}\\ {0}&{}&{0}&{}&{0}&{12}\\ {0}&{}&{0}&{-1}&{20}\\ {0}&{}&{0}&{}&{0}&{1}\\ \end{matrix}\right] $$
$$ ^{B}\mathbf{B}\mathbf{S}\mathbf{H}\left[4\right]=\begin{bmatrix}0&-1&0&13\\1&0&0&12\\0&0&-1&20\\0&0&0&1\end{bmatrix},\quad^{T}_{6}\mathbf{E}=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&10\\0&0&0&1\end{bmatrix} $$
试编写一道把此螺钉插入部件 B 上 4 个孔的程序。
10.12 进行下列 MATLAB 程序设计:
(1)使用 $ Z-Y-X $ ( $ \alpha-\beta-\gamma $) 欧拉角表示法,编写一个 MATLAB 程序,当用户输入欧拉角时,计算旋转矩阵 $ ^{A}_{B}R $。通过以下两组实例,来进行验证:
$$ \textcircled{1}\alpha=10^{\circ},\beta=20^{\circ},\gamma=30^{\circ} $$
$$ \alpha=30^{\circ},\beta=90^{\circ},\gamma=-55^{\circ} $$
(2)编写一个 MATLAB 程序,当用户输入旋转矩阵 $ ^{A}_{B}R $ 时,计算对应的欧拉角 $ \alpha\beta\gamma $。注意求取所有可能的解。
(3)坐标系{B}相对于坐标系{A}绕Y轴旋转β角度。当 $ \beta=20^{\circ} $时,如有 $ ^{B} $P={101},编写一个MATLAB程序求解 $ ^{A} $P。
(4)使用 MATLAB 机器人工具箱中的函数,对上述问题进行验证。试用以下函数 $ rpy2tr() $, $ tr2rpy() $, $ rotx() $, $ roty() $, 以及 $ rotz() $。
10.13 进行下列 MATLAB 程序设计:
(1)当用户输入 Z-Y-X 欧拉角 $ (\alpha\beta-\gamma) $ 以及位置向量 $ ^{A}P_{B} $ 时,编写一个 MATLAB 程序计算对应的齐次变换矩阵 $ ^{A}_{B}T $。通过以下两组实例,来进行验证:
$$ \textcircled{1}\alpha=10^{\circ},\beta=20^{\circ},\gamma=30^{\circ},{}^{A}\mathbf{P}_{B}=\left\{123\right\}^{\mathrm{T}} $$
$$ \beta=20^{\circ}(\alpha=\gamma=0^{\circ}),\mathbf{P}_{B}=\left\{301\right\}^{\mathrm{T}} $$
(2) 当 $ \beta = 20^{\circ} (\alpha = \gamma = 0^{\circ}) $ 时,如有 $ ^{A}P_{B} = \{3\ 0\ 1\}^{T} $,以及 $ ^{B}P = \{1\ 0\ 1\}^{T} $,编写一个 MATLAB 程序来计算 $ ^{A}P $。
(3)通过符号计算,编写一个MATLAB程序来计算齐次变换逆矩阵,即 $ \overrightarrow{B}T^{-1}=\overrightarrow{A}T $。对于(1)、(2)的实例,将你的结果与MATLAB数值函数(如inv函数)的结果进行比较,说明两种方法均能得到正确的结果(例如 $ \overrightarrow{B}T_{B}^{A}T^{-1}=\overrightarrow{A}T^{-1}\overrightarrow{B}T=I_{4} $)。
(4)使用 MATLAB 机器人工具箱中的函数,对上述问题进行验证。试用以下函数 $ rpy2tr() $ 和 $ trans1() $。
10.14 对于图3.7所示的平面三连杆机器人,给定如下的连杆参数: $ L_{1}=4m $, $ L_{2}=3m $,以及 $ L_{3}=2m $。
(1)求取该机器人的 D-H 参数。将你的答案与表 3.1 的结果进行对比。
(2)求取相邻两连杆坐标系之间的齐次变换矩阵 $ ^{i-1}_{i}T $,i=1,2,3。这些矩阵都是关节角变量 $ \theta_{i} $,i=1,2,3的函数。
(3)采用 MATLAB 符号计算,求取该机器人的正向运动学的求解 $ ^{0}_{3}T $(作为关节角变量 $ \theta_{i} $的函数)。当输入下面三组数据时,输出该机器人末端机械手的位姿(即正向运动学的解):
$$ \textcircled{1}\Theta=\{\theta_{1}\;\theta_{2}\;\theta_{3}\}^{\mathrm{T}}=\left\{0\;0\;0\right\}^{\mathrm{T}} $$
$$ \textcircled{2}\Theta=\left\{10^{\circ}20^{\circ}30^{\circ}\right\}^{\mathrm{T}} $$
$$ \textcircled{3}\Theta=\left\{90^{\circ}90^{\circ}90^{\circ}\right\}^{\mathrm{T}} $$
(4)使用 MATLAB 机器人工具箱中的函数,对上述问题进行验证。试用以下函数 link(),robot(),以及 fkine()。
10.15 对于图3.7所示的平面三连杆机器人,其D-H参数如表3.1所示,给定如下的连杆参数: $ L_{1}=4m $, $ L_{2}=3m $,以及 $ L_{3}=2m $。
(1)根据第三章介绍的方法,手工计算该机器人的逆运动学位姿,即给定 $ ^{0}_{H}T $(假设手部坐标系 $ \{H\} $与坐标系3重合),求取所有可能的关节角组合 $ \{\theta_{1}\ \theta_{2}\ \theta_{3}\} $。
(2)编写一个 MATLAB 程序,来完整地求解该机器人的逆运动学问题(即需给出所有可能的关节角求解)。通过以下四组实例,来验证编写的逆运动学程序的正确性。
①
$$ ^{0}_{H}\mathbf{T}=\begin{bmatrix}{{{1}}}&{{{0}}}&{{{0}}}&{{{9}}} \\{{{0}}}&{{{1}}}&{{{0}}}&{{{0}}} \\{{{0}}}&{{{0}}}&{{{1}}}&{{{0}}} \\{{{0}}}&{{{0}}}&{{{0}}}&{{{1}}}\end{bmatrix} $$
②
$$ ^{0}_{H}\boldsymbol{T}=\begin{bmatrix}0.5&-0.866&0&7.5373\\ 0.866&0.6&0&3.9266\\ 0&0&1&0\\ 0&0&0&1\end{bmatrix} $$
③
$$ {}^{0}_{H}\mathbf{T}=\left[\begin{matrix}{0}&{1}&{0}&{-3}\\ {-1}&{0}&{0}&{2}\\ {0}&{0}&{1}&{0}\\ {0}&{0}&{0}&{1}\\ \end{matrix}\right] $$
④
$$ \mathbf{\Sigma}_{H}^{0}\mathbf{T}=\left[\begin{matrix}{0.866}&{0.5}&{0}&{-3.1245}\\ {-0.5}&{0.866}&{0}&{9.1674}\\ {0}&{0}&{1}&{0}\\ {0}&{0}&{0}&{1}\\ \end{matrix}\right] $$
将所有求出的解带回到上一题中得到的正向运动学程序中去,看是否能够得到与原本相同的齐次变换矩阵。
(3)使用 MATLAB 机器人工具箱中的函数,对上述问题进行验证。试用以下函数 ikine()。
10.16 编写一个 MATLAB 程序来进行关节空间的轨迹规划,对以下三种场景采用多项式插值的方式获得单关节的轨迹,对每种场景给出其关节角度、角速度、角加速度以及角急动度(加速度的时间导数)的多项式函数,并画出其随时间变化的图形。
(1)三阶多项式插值。开始和结束时的角速度均为0,起始角为 $ 120^{\circ} $,终止角为 $ 60^{\circ} $,运动时间为1s。
(2)五阶多项式插值。开始和结束时的角速度、角加速度均为0,起始角为 $ 30^{\circ} $,终止角为 $ 60^{\circ} $,运动时间为1s。用同样的数值将五阶多项式的结果与(1)中的三阶多项式结果进行对比。
(3)过路径点的三阶多项式插值。开始和结束时的角速度均为0,但在路径点上的角速度不为0——让路径点前后两段的角速度和角加速度相同。起始角为 $ 60^{\circ} $,路径点上的角度为 $ 120^{\circ} $,终止角为 $ 30^{\circ} $,路径点前后的运动时间均为1s,总运动时间为2s。
(4)使用 MATLAB 机器人工具箱中的函数,对问题(1)和问题(2)的解进行验证。试用以下函数 jtraj()。