“机器人的软件限位” 与“机器人的工作空间”之间的区别与联系

收到一封读者的 email:

LT你好:

想请教一下  机器人的软件限位  与机器人的工作空间 之间的区别与联系

因为小弟是初学机器人   所以不是很清楚   网上又找不到合适的资料

在网上看到你的文章  写得很不错  希望也能和你交朋友  如果你不介意我这样的初学者O(∩_∩)O

随后 LT 翻阅了小站的以往文章,发现并没有这方面的介绍,所以决定干脆整理一篇专门的文章来聊聊这个话题。

Continue reading

ABB工业机器人对于点位的定义

ABB工业机器人的编程语言 RAPID 中,对于点位的描述,专门有一种数据类型:robtarget ,如下面对于点 Target_10 的定义 :

CONST robtarget Target_10:=[[103.446614369839,177.778223757339,29.9999999999999],[6.07064838351457E-17,-0.130526192220051,0.99144486137381,7.99216021664582E-18],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];

其结构解释如下:

< dataobject of robtarget >
< trans of pos >
< x of num >
< y of num >
< z of num >
< rot of orient >
< q1 of num >
< q2 of num >
< q3 of num >
< q4 of num >
< robconf of confdata >
< cf1 of num >
< cf4 of num >
< cf6 of num >
< cfx of num >
< extax of extjoint >
< eax_a of num >
< eax_b of num >
< eax_c of num >
< eax_d of num >
< eax_e of num >
< eax_f of num >(注1)

其中,XYZ是TCP在参考坐标系中的坐标值;q1\q2\q3\q4是四元数来表示TOOL坐标系在参考坐标系中的姿态,有的机器人系统是用欧拉角来表示姿态的的;cf1\cf4\cf6\cfx表示1\4\6\x轴的配置,因为对于一个点,机器人各轴可能有两种以上姿态可以到达;eax_a\~\f 表示外轴的位置。

regular

(未完待续)
注1: 3HAC 16581-1  revG RAPID Instructions, Functions and Data types page 1114

扩展阅读:

  • Conversion between quaternions and Euler angles
    http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
  • 四元数与欧拉角互换
    http://www.cppblog.com/Leaf/archive/2010/12/18/136861.html
  • 四元数,欧拉角和旋转矩阵的各自的优点用途
    http://blog.ednchina.com/zhouusong/1616449/message.aspx
  • 四元数的优点和缺点
    http://www.cnblogs.com/dcysun/archive/2009/09/28/1576032.html
  • 欧拉旋转
    http://v.youku.com/v_show/id_XNzkyOTIyMTI=.html
  • 3D class &四元数
    http://blog.sina.com.cn/s/blog_6868676c0100s860.html
  • ABB机器人与ROBOTSTUDIO之间的沟通问题
    http://blog.sina.com.cn/s/blog_645fde9b01011cc3.html

 

 

记学习RAPID中断特性的一则笔记 – 初识 RAPID 中的 Interrupts

题记:国庆长假,整理了以前几篇老文章放上来。也算是对自己足迹的一个记录。这篇文章大概是 2008年10月记录的。Interrupts 中断是 ABB Robot 编程语言 RAPID 中很实用的一个功能,后面的文章 LT 会陆续介绍到。这里发的是当时学习最普通的中断功能(对某一信号响应)时做的一个学习笔记,内容上有摘录和翻译了官方文档(RAPID 4.0.40 )里的一些片断。注释是以”!”标识的,内容原来是英文的,这里改为了中文以便区别代码。实际上用中文作注释是不明智的。

初识 RAPID 中的 Interrupts

原发布于2008年10月@CSDN Blog

 

准备仔细研究RAPID的语法结构,由于中断功能比较常用,故先拿它开刀。正文之前,先说个形象的说法来解释程序里处理外部I/O的方法:查询和中断。那两者有什么区别呢?话说某人得了孩子,照看婴儿,于是就用撒尿论来解释中断和查询的区别:

查询:每隔一段时间就去看看婴儿尿了没有
中断:听到婴儿大哭,应该是尿了,赶快去处理

步入正文,举个例子:

!例子: VAR intnum empty;
VAR intnum full;
PROC main()
!连接中断程序
CONNECT empty WITH etrap;
CONNECT full WITH ftrap;
!定义 feeder中断信号
ISignalDI di1, high, empty;
ISignalDI di3, high, full;


IDelete empty;
IDelete full;
ENDPROC
!响应“feeder empty” 中断
TRAP etrap
open_valve;
RETURN;
ENDTRAP

!响应 “feeder full” 中断
TRAP ftrap
close_valve;
RETURN;
ENDTRAP

 

 

 

中断介绍(interrupts):

中断(interrupts)是编程定义的事件,用中断号来识别。当一个中断条件满足真(TRUE)时中断就会发生。中断发生时正常运行的程序暂停,并把控制权交给中断子程序。
即使机器人立即识别到一个中断发生(硬件速度会延迟),它的响应(调用trap子程序)只会发生在程序特定位置,即:

  • 当指令被执行时
  • 等待型指令执行中的任何时间,如 WaitUntil
  • 运动型指令执行中的任何时间,如 MoveL

通常中断检测和响应之间有几十ms的延迟,取决于中断时何种运动被正在执行。中断可以被禁用和启用。如果中断被禁用,发生的任何中断将会被排队不被调用直到中断被再次启用。注意中断队列可以包含一个以上的等待中断。列队的中断遵循FIFO即先进先出的顺序。当一个陷阱子程序执行时中断通常是被禁用的。当步进运行时或者当程序被停止时,中断将不会被处理。这种环境下产生的中断是不被处理的。一次可被定义的中断的最大数目被限制在每个任务(task)100个。

中断处理(interrupt manipulation):

中断要定义以便机器人识别。定义指明了中断的条件并激活和启用中断。

!例子:
VAR intnum sig1int;

ISignalDI di1, high, sig1int;

一个激活的中断(activated interrupt)可以撤销其活动(deactivated)。在没有激活的时间里,产生的任何中断被扔掉(thrown away)不执行任何trap中断子程序。

!例子: !不激活
ISleep sig1int;

!激活
IWatch sig1int;
 

一个启用的中断(enabled interrupt)也可以使其禁止。在禁止的时段里,产生的任何中断将列队并在终端启用时再次调用。

!例子:
!禁用
IDisable sig1int;

!启用
IEnable sig1int;

删除一个中断就是移除它的定义。明确的说没有必要去移除一个中断定义,但是前一个定义如果不删除的话就不可以定义一个新的中断。

!例子:
IDelete sig1int;

中断子程序(trap routines):

代码如本篇开头所写。中断子程序提供处理中断的方法。一个中断子程序和一个特定的中断可以使用CONNECT指令连接起来。当一个中断发生时,控制权立即转移到相关联的中断子程序。如果一个中断发生后,没有连接任何中断子程序,将作为一个严重错误,如:导致程序立即终止执行。
几个中断可以连接到相同的中断子程序。系统变量INTNO包含了中断号并可以被一个中断子程序用来识别某个中断。当必要的动作执行后,一个中断子程序可以使用RETURN指令来终止,或者直接执行到ENDTRAP。然后程序继续从中断发生的地方继续执行。

注:摘译自 RAPID Overview 4.0.40

扩展阅读:
中断和异常 http://blog.csdn.net/liangzhibiao/article/details/4049304
中断与异常有什么区别?http://topic.csdn.net/t/20040916/13/3378467.html

RAPID 编程中对边沿检测

RAPIDRobotics Application Programming Interactive Dialogue)是 ABB industrial robots 的编程语言 ,是 LT 非常欣赏的一种高级语言。

LT在使用中曾经遇到一搞PLC的同事咨询,ABB的IO系统是否可以象PLC那样有对信号边沿检测的功能?笔者当时并没有发现IO配置上有此功能,于是一直在思考这个问题。(如果看客你知道有这个功能,请不喜吝啬告诉小弟,不胜感激!)

近来在想,RAPID中的Interrupt功能不是就有此功能吗?当一个信号由0变为1,或由1变为0时,触发一个中断子程序来处理后续,是不是就有类似PLC中的上升沿,下降沿检测功能了么。

如果你有什么好的实现方法, 欢迎讨论:)

P.S. 20110504补充: 后期的 IRC5 集成了PLC功能,那么这个边沿检测自然更不成问题了。参见《Integrated PLC AC500 in IRC5

ABB Robot M2000 的FTP联机和程序编辑

M2000 /S4C+ 的ABB工业机器人控制器都支持FTP连接,以方便存取系统和程序文件。相比于M94/M96/M97标配只有个蜗牛般速度的软驱,实在是无比的方便。

Robot控制器的设置保持默认,更改PC的IP如下:

IP地址:192.168.125.82
掩码:255.255.255.240
网关:192.168.125.81

然后,在FTP Clent软件里填入Robot控制器的IP : 192.168.125.1 ,用户名密码是abb,就可以连接进入了。有很多的ftpclient软件可以使用,比如 flashfxp / filezilla  等 ,不过可能 S4C+ Robot 的ftp服务器仅支持最基本的ftp命令,所以ftp client软件里的列表方式最好改为只list。比如flashfxp默认的就是 list -al,可能会列不出目录。

至于程序修改,由于abb robot的程序文件RAPID都是文本格式且风格类似c/pascal,所以我们首选Ultraedit作为编辑器(简称UE),对应的语法高亮文件 abb-s4.uew 可以从UE官方下载: http://www.ultraedit.com/files/wf/abb-s4.uew 下载后添加到UE里,就可以识别函数高亮语法,很是方便。UE提供了非常灵活的规则,感兴趣的可以研究研究它的帮助文件 Syntax Highlighting 一章。

2010.07.20 补充:  关于用另一种编辑器Notepad++怎样高亮显示RAPID语法,Bruce已经在他的blog里提及,感兴趣的请点击: Notepad ++版ABB RAPID程序编辑器 http://www.brucebot.com/2010/07/rapid-for-notepad/