机器人编程【robot programming】为使机器人完成某种任务而设定的动作顺序描述。机器人运动和作业的指令都是由程式进行控制,常见的编制方法有两种,示教编程方法和离线编程方法。其中示教编程方法包括示教、编辑和轨迹再现,可以通过示教盒示教和导引式示教两种途径实现。由于示教方式实用性强,操作简便,因此大部分机器人都採用这种方式。离线编程方法是利用计算机图形学成果,藉助图形处理工具建立几何模型,通过一些规划算法来获取作业规划轨迹。与示教编程不同,离线编程不与机器人发生关係,在编程过程中机器人可以照常工作。
基本介绍
- 中文名:机器人编程
- 外文名:robot programming
- 性质:使机器人完成某种任务
- 属性:设定的动作顺序描述
编辑
用EDIT指令进入编辑状态后,可以用C、D、E、I、L、P、R、S、T等命令来进一步编辑。如:
C命令:改变编辑的程式,用一个新的程式代替。
D命令:删除从当前行算起的n行程式,n预设时为删除当前行。
机器人编程

E命令:退出编辑返回监控模式。
I命令:将当前指令下移一行,以便插入一条指令。
P命令:显示从当前行往下n行的程式文本内容。
T命令:初始化关节插值程式示教模式,在该模式下,按一次示教盒上的“RECODE”按钮就将MOVE指令插到程式中。
列表指令
DIRECTORY指令:此指令的功能是显示存储器中的全部用户程式名。
LISTL指令:功能是显示任意个位置变数值。
LISTP指令:功能是显示任意个用户的全部程式。
存储指令
FORMAT指令:执行磁碟格式化。
STOREP指令:功能是在指定的磁碟档案记忆体储指定的程式。
STOREL指令:此指令存储用户程式中注明的全部位置变数名和变数值。
LISTF指令:指令的功能是显示软碟中当前输入的档案目录。
LOADP指令:功能是将档案中的程式送入记忆体。
LOADL指令:功能是将档案中指定的位置变数送入系统记忆体。
DELETE指令:此指令撤销磁碟中指定的档案。
COMPRESS指令:只用来压缩磁碟空间。
ERASE指令:擦除磁内容并初始化。
执行指令
ABORT指令:执行此指令后紧急停止(急停)。
DO指令:执行单步指令。
EXECUTE指令:此指令执行用户指定的程式n次,n可以从–32 768到 32 767,当n被省略时,程式执行一次。
NEXT指令:此命令控制程式在单步方式下执行。
PROCEED指令:此指令实现在某一步暂停、急停或运行错误后,自下一步起继续执行程式。
RETRY指令:指令的功能是在某一步出现运行错误后,仍自那一步重新运行程式。
SPEED指令:指令的功能是指定程式控制下机器人的运动速度,其值从0.01到327.67,一般正常速度为100。
控制指令
CALIB指令:此指令校準关节位置感测器。
STATUS指令:用来显示用户程式的状态。
FREE指令:用来显示当前未使用的存储容量。
ENABL指令:用于开、关係统硬体。
ZERO指令:此指令的功能是清除全部用户程式和定义的位置,重新初始化。
DONE:此指令停止监控程式,进入硬体调试状态。
程式指令
运动指令
指令包括GO、MOVE、MOVEI、MOVES、DRAW、APPRO、APPROS、DEPART、DRIVE、READY、OPEN、OPENI、CLOSE、CLOSEI、RELAX、GRASP及DELAY等。
这些指令大部分具有使机器人按照特定的方式从一个位姿运动到另一个位姿的功能,部分指令表示机器人手爪的开合。例如:
MOVE #PICK!
表示机器人由关节插值运动到精确PICK所定义的位置。“!”表示位置变数已有自己的值。
MOVET <位置>,<手开度>
功能是生成关节插值运动使机器人到达位置变数所给定的位姿,运动中若手为伺服控制,则手由闭合改变到手开度变数给定的值。
又例如:
OPEN [<手开度>]
表示使机器人手爪打开到指定的开度。
机器人位姿控制指令
这些指令包括RIGHTY、LEFTY、ABOVE、BELOW、FLIP及NOFLIP等。
赋值指令
赋值指令有SETI、TYPEI、HERE、SET、SHIFT、TOOL、INVERSE及FRAME。
控制指令
控制指令有GOTO、GOSUB、RETURN、IF、IFSIG、REACT、REACTI、IGNORE、SIGNAL、WAIT、PAUSE及STOP。
其中GOTO、GOSUB实现程式的无条件转移,而IF指令执行有条件转移。IF指令的格式为
IF <整型变数1> <关係式> <整型变数2> <关係式> THEN <标识符>
该指令比较两个整型变数的值,如果关係状态为真,程式转到标识符指定的行去执行,否则接着下一行执行。关係表达式有EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于或等于)及GE(大于或等于)。
开关量赋值指令
指令包括SPEED、COARSE、FINE、NONULL、NULL、INTOFF及INTON。
其他指令
其他指令包括REMARK及TYPE。
SIGLA语言
SIGLA是一种仅用于直角坐标式SIGMA装配型机器人运动控制时的一种程式语言,是20世纪70年代后期由义大利Olivetti公司研製的一种简单的非文本语言。
这种语言主要用于装配任务的控制,它可以把装配任务划分为一些装配子任务,如取旋具,在螺钉上料器上取螺钉A,搬运螺钉A,定位螺钉A,装入螺钉A,紧固螺钉等。编程时预先编制子程式,然后用子程式调用的方式来完成。
IML语言
IML也是一种着眼于末端执行器的动作级语言,由日本九州大学开发而成。IML语言的特点是编程简单,能人机对话,适合于现场操作,许多複杂动作可由简单的指令来实现,易被操作者掌握。
IML用 直角坐标系描述机器人和目标物的位置和姿态。坐标系分两种,一种是机座坐标系,一种是固连在机器人作业空间上的工作坐标系。语言以指令形式编程,可以表示 机器人的工作点、运动轨迹、目标物的位置及姿态等信息,从而可以直接编程。往返作业可不用循环语句描述,示教的轨迹能定义成指令插到语句中,还能完成某些 力的施加。
IML语言的主要指令有:运动指令MOVE、速度指令SPEED、停止指令STOP、手指开合指令OPEN及CLOSE、坐标系定义指令COORD、轨迹定义命令TRAJ、位置定义命令HERE、程式控制指令IF…THEN、FOR EACH语句、CASE语句及DEFINE等。
任务程式设计师能够指挥机器人系统去完成的分立单一动作就是基本程式功能。例如,把工具移动至某一指定位置,操作末端执行装置,或者从感测器或手调输入装置读个数等。机器人工作站的系统程式设计师,他的责任是选用一套对作业程式设计师工作最有用的基本功能。这些基本功能包括运算、决策、通讯、机械手运动、工具指令以及感测器数据处理等。许多正在运行的机器人系统,只提供机械手运动和工具指令以及某些简单的感测数据处理功能。
1. 运算
在作业过程中执行的规定运算能力是机器人控制系统最重要的能力之一。
如果机器人未装有任何感测器,那幺就可能不需要对机器人程式规定什幺运算。没有感测器的机器人只不过是一台适于编程的数控机器。
装有感测器的机器人所进行的一些最有用的运算是解析几何计算。这些运算结果能使机器人自行做出决定,在下一步把工具或夹手置于何处。
2. 决策
机器人系统能够根据感测器输入信息做出决策,而不必执行任何运算。按照未处理的感测器数据计算得到的结果,是做出下一步该乾什幺这类决策的基础。这种决策能力使机器人控制系统的功能更强有力。
3. 通讯
机器人系统与操作人员之间的通讯能力,允许机器人要求操作人员提供信息、告诉操作者下一步该乾什幺,以及让操作者知道机器人打算乾什幺。人和机器能够通过许多不同方式进行通讯。
4. 机械手运动
可用许多不同方法来规定机械手的运动。最简单的方法是向各关节伺服装置提供一组关节位置,然后等待伺服装置到达这些规定位置。比较複杂的方法是在机械手工作空间内插入一些中间位置。这种程式使所有关节同时开始运动和同时停止运动。用与机械手的形状无关的坐标来表示工具位置是更先进的方法,而且(除X-Y-Z机械手外)需要用一台计算机对解答进行计算。在笛卡儿空间内插入工具位置能使工具端点沿着路径跟随轨迹平滑运动。引入一个参考坐标系,用以描述工具位置,然后让该坐标系运动。这对许多情况是很方便的。
5.工具指令
一个工具控制指令通常是由闭合某个开关或继电器而开始触发的,而继电器又可能把电源接通或断开,以直接控制工具运动,或者送出一个小功率信号给电子控制器,让后者去控制工具。直接控制是最简单的方法,而且对控制系统的要求也较少。可以用感测器来感受工具运动及其功能的执行情况。
6. 感测数据处理
用于机械手控制的通用计算机只有与感测器连线起来,才能发挥其全部效用。我们已经知道,感测器具有多种形式。此外,我们按照功能,把感测器概括如下:
(1) 内体感受器用于感受机械手或其它由计算机控制的关节式机构的位置。
(2) 触觉感测器用于感受工具与物体(工件)间的实际接触。
(3) 接近度或距离感测器用于感受工具至工件或障碍物的距离。
(4) 力和力矩感测器用于感受装配(如把销钉插入孔内)时所产生的力和力矩。
(5) 视觉感测器用于“看见”工作空间内的物体,确定物体的位置或(和)识别它们的形状等。感测数据处理是许多机器人程式编制的十分重要而又複杂的组成部分。
程式语言
于机器人专家来说,最重要的事情是开拓你的”编程思维”,而不是精通一种特定的程式语言。从很多方面来说,从哪种程式语言开始学习真的无关紧要。你学习的每种语言提升了你的编程思维,拥有了这种思维,去学习一种新程式语言的时候会容易不少。机器人编程中最流行的程式语言有BASIC/Pascal;工业机器人程式语言;LISP;硬体描述语言(HDLs);Assembly;MATLAB;C#.NET;Java;Python;C/C++。