下面是运行时编程的描述和实际示例。
通常,机器人的程序是机器人机械手的一系列位置。每个位置的特点是TCP(Tool Center Point)位置,工具**的点安装在机械手上(默认情况下,TCP位于机器人法兰的中心,见下图,但其位置可以调整,通常是TCP与工具**安装在机器人的机械手上)。因此,在编程时,经常会指定TCP在空间中的位置,由机器人自行决定机械手关节的位置。在本文中,我们将使用术语“TCP位置”,换句话说,机器人将到达的点。
机器人的程序还可以包含控制逻辑(分支、循环)、简单的数学操作和控制外围设备的命令--模拟和数字输入/输出。在建议的运行时编程方法中,使用标准PC作为外部控制器,它可以使用强大的软件来确保必要的抽象级别(OOP和其他范例),以及确保开发复杂逻辑(高级编程语言)的速度和易用性的工具。机器人本身只需处理对响应率至关重要的逻辑,执行时需要工业控制器的可靠性,例如,对紧急情况作出迅速和充分的反应。与机器人连接的外围设备的控制只是由PC上的机器人“代理”,允许PC激活或关闭机器人上的相应信号;这类似于控制Arduino的“腿”。
如前所述,运行时编程允许将程序分部分发送给机器人。通常,一组输出信号和几个点,甚至只有一个点被发送。因此,机器人所执行的TCP运动轨迹可以动态构建,其部分部件可能属于不同的工艺过程,甚至属于不同的机器人(连接到同一外部控制器),其中一组机器人工作。
例如,机器人移动到一个工作区域,执行所需的操作,然后--到下一个,再到另一个,然后返回到**个,等等。在不同的工作区域,机器人执行不同工艺过程所需的操作,在外部控制器上以并行线程执行程序,将机器人分配给不需要机器人经常出现的不同过程。这种机制类似于OS将处理器时间(执行资源)分配给不同线程的方式,同时,在整个程序执行期间,不同的执行器并不链接到线程。
再多一点理论,我们就开始实践。
描述现有的工业机器人编程方法。
不考虑本文介绍的运行时编程方法,工业机器人的编程方法通常有两种。离线和在线编程。
过程在线编程与程序员和机器人在使用位置的直接交互发生。使用遥控器,或通过物理运动,安装在机器人法兰上的工具(TCP)被移动到所需的点。
这种编程方法的优点是易于实现机器人编程。一个人不需要知道任何关于编程的知识,只需说明机器人位置的顺序就足够了。
这种方法的一个重要缺点是,当程序被增加到至少几十个点(更不用说数千点)时,或者当它(程序)随后被修改时,时间消耗会显著增加。此外,在这样的学习过程中,机器人不能用于工作。
过程离线编程顾名思义,发生在机器人及其控制器之外。可执行程序是在PC机上的任何编程环境中开发的,然后完全加载到机器人中。然而,用于这种开发的编程工具并不包括在机器人的基本交付集中,而是需要单独购买的额外选项,而且总体上是昂贵的。
离线编程的优点是机器人可以用于生产和工作,而该程序正在开发中。机器人只需要调试现成的程序。没有必要去自动化对象和程序的机器人亲自。
现有的离线编程环境的一个很大的缺点是它们的成本很高。另外,动态地将可执行程序分发给不同的机器人是不可能的。
例如,让我们考虑在运行时模式下创建一个机器人程序,它允许使用标记编写广告的过程。
为了让机器人写这篇文章,有必要向机器人发送1700多个点。
作为一个例子,扰流板包含了程序的屏幕截图,从机器人的遥控器中画出一个正方形。它只有5个点(第4-8行);实际上,每个点都是一个完整的表达式,并取了一行。机械手穿过这四个点中的每一个点,并在完成后返回到起点。
带有可执行程序的远程控制的屏幕截图:
那么,让我们继续讨论解决方案…
我们有一个FANUC LR Mate 200 iD机器人,带有R-30iB系列机柜控制器。机器人的标志端有一个预先配置好的TCP和桌面坐标系,因此可以直接发送坐标,而不必担心将坐标从表的坐标系转换为机器人的坐标系。
为了实现将坐标发送给机器人的程序,该程序将计算每个点的**值,我们将使用支持该机器人的RCML编程语言,这一点很重要,任何人都可以自由使用。
让我们用点来描述每个字母,但是在框架内的相对坐标中,字母将被刻在其中,而不是在真实的空间坐标中。每个字母将由一个单独的函数绘制,接收字符的序号、行号和字母大小作为输入参数,并向机器人发送一组点,计算出每个点的**坐标。
要写一篇文章,我们必须调用一系列的函数,这些函数将按照字母(字母)在文本中出现的顺序绘制字母。RCML有一组用于处理字符串的工具,因此我们将编写一个外部Python脚本,它将在RCML中生成一个程序--本质上,只生成对应于字母序列的函数调用序列。
整个代码可在存储库中获得:RCT油漆字
让我们更详细地考虑输出文件,执行从函数main()开始:
剧透者:“让我们考虑一下画一封信的代码,例如字母A:”
函数机器人_FANUC::SUP_A(x_cell,y_cell){
//将标记设置为点,字母框内点的坐标沿X方向为5%,沿Y方向为95%
机器人->设置点(x_cell,y_cell,5,95);
//画一条线
机器人->移动点(x_cell,y_cell,50,5);
//绘制第二行
机器人->移动点(x_cell,y_cell,95,95);
//我们得到“屋顶”/\
//移动从表中抬起的标记以绘制交叉线
机器人->设置点(x_cell,y_cell,35,50);
//画十字线
机器人->移动点(x_cell,y_cell,65,50);
//将标记从表中移到下一个字母
机器人->标记_up();
}
扰流板末端
扰流板:“移动标记的功能,无论是否解除,也非常简单:
//将提升的标记移动到点,或设置开始绘图的点
函数机器人_FANUC::SetPoint(x_cell,y_cell,x_%,y_preent){
//计算**坐标
x=计算_**值_协弦_x(x_单元,x_百分比);y=计算_**_弦_y(y_单元,y_百分比);
机器人->mark_up();//从表中提升标记
机器人->标记移动(x,y);//移动
机器人->mark_down();//将标记降到表中
//将标记移动到点而不提升,或实际绘制
函数机器人FANUC:移动点(x_cell,y_cell,x_%,y_preent){x=计算_**值_协弦_x(x_cell,x_%);
//这里一切都很清楚,
机器人->标记移动(x,y);
}
扰流板末端
扰流板:函数标记_up、标记_down、标记_MOVE只包含将更改后的TCP点坐标(Z或XY)发送给机器人的代码。
函数机器人_FANUC::mark_up(){
机器人->SET_REARY_di(“z”,Safe_Z);
ER=机器人->sendMoveSignal();
如果(er!=0){
system.echo(“错误标记向上\n”);
掷呃;
}
}
函数机器人_FANUC::mark_down(){
机器人->SET_REARY_di(“z”,Start_Z);
ER=机器人->sendMoveSignal();
如果(er!=0){
system.echo(“错误标记向下\n”);
掷呃;
}
}
函数机器人_FANUC::MARMER_MOVE(x,y){
机器人->SET_REARY_di(“x”,x);
机器人->SET_REARY_di(“y”,y);
ER=机器人->sendMoveSignal();
如果(er!=0){
system.echo(“错误标记移动\n”);
掷呃;
}
}
扰流板末端
所有的配置常量,包括字母的大小,它们在行中的编号等等,都放在一个单独的文件中。
扰流板:“配置文件”
定义CHAR_HERH_MM 50//字符高度(以毫米为单位)
以高度百分比定义字符宽度60//字符宽度
定义安全Z-20//标记**沿z轴的安全位置
定义开始_z0//标记**沿z轴的工作位置
//工作区边界
定义边框Y 120
定义边框X_75
//开关信号
定义1
定义OFF 0
//暂停发送某些信号,毫秒
定义信号暂停MILISEC 50
定义_OFF_MILLISEC 200
初始标记位置的//欧拉角
定义Start_W-179.707//Rolle
定义Start_P-2.500/螺距
定义Start_R 103.269//偏
//欧拉转角
定义第二W-179.704
定义第二个P-2.514
定义第二R-14.699
定义字符之间的CHAR_偏移量_MM 4//间距
定义U
定义UTOOL 2//工具号
定义有效载荷4//负载号
定义速度100//速度
定义CNT 0//运动平滑参数
依次定义转速//速度
定义HOME_PNS 4//家庭职位返回的PNS程序数
扰流板末端
总共,我们有大约300行高级代码,开发和编写不超过1小时。
如果问题是以“直截了当”的方式通过使用点数进行在线编程来解决的,那么就需要超过9个小时(每点大约20-25秒,因为有1,700点以上)。在这种情况下,开发商所遭受的痛苦是无法想象的:)尤其是当他发现他忘记了字母被刻在的框架之间的凹痕,或者字母的高度不对,而且文字不合适的时候。
结论:
使用运行时编程是创建可执行软件的方法之一。这种方法的优点包括:
在不需要停止机器人的情况下编写和调试程序的可能性,从而*小化了切换的停机时间。
一个参数化的可执行程序,很容易编辑。
动态激活和失活机器人在主动技术任务中,以及各厂商机器人的合作。
因此,通过使用运行时编程,可以以一种方式描述可执行命令,以便使工作组内的任何机器人都能执行它,或者可以为特定的机器人编写可执行命令,该机器人将是**执行该命令的机器人。
更多请点击咨询:发那科机器人