KRL是“KUKA Robot Language”的缩写。KUKA机器人编程语言是一种类Python的高级编程语言,编程方式灵活多样,语句指令功能强大,本文对其运动编程的指令及含义进行简要归纳总结如下:在实际编程中,语句不区分大小写。
KRL中用于表示、记录、存储机器人空间位置的特定变量,其类型为结构体Structure,有如下几类:
(1)AXIS { A1, A2, A3, A4, A5, A6 } ,用于存储机器人6根轴的轴角度数据。
(2)E6AXIS { A1, A2, A3, A4, A5, A6,E1, E2, E3, E4, E5, E6},用于存储机器人6根轴和6个外部轴的轴角度数据。
(3)POS {X, Y, Z, A, B, C, S, T },用于存储机器人的TOOL(工具坐标)相对于BASE(工件坐标系)或世界坐标系(WORLD)的笛卡尔三维坐标值及分别绕三维旋转的角度值;S即Status,T即Turn,这两个参数用来规避奇异点,确保机器人空间坐标对应轴坐标的唯一性。
(4)E6POS {X, Y, Z, A, B, C, S, T,E1, E2, E3, E4, E5, E6},上述POS结构体增加6根外部轴的角度位置。
(5)FRAME {X, Y, Z, A, B, C},用于存储机器人的TOOL(工具坐标)相对于BASE(工件坐标系)或世界坐标系(WORLD)的笛卡尔三维坐标值及分别绕三维旋转的角度值。
说明:机器人程序中示教的路径点都是以E6POS结构体保存,机器人的起始点HOME是以E6AXIS结构体保存,工具坐标、工件坐标都是以FRAME结构体保存。
一、SPTP-轴运动指令:
SPTP是"Spline Point to Point"的缩写即“样条点到点运动”。SPTP是机器人轴运动即关节型运动,特点是运动轨迹非线性、路径由机器人自主决定、节拍速度通常最快,适用于无特定轨迹要求、空间中位移等场合。
SPTP指令可以定义并使用的结构体类型有:AXIS,E6AXIS,POS,E6POS,FRAME
1、sptp xp1 with $tool=tool_data[1],$base=base_data[1] ;xp1 机器人程序中示教保存的第一个路径点,存储在DAT数据列表中的名称为"XP1"
2、sptp {a1 0,a2 -90,a3 90,a4 0,a5 0,a6 0} ;让机器人的6根轴回到零点位置。
sptp {a2 -45} ;仅让机器人的A2轴运动到-45度的位置。
说明:tool和base在运动前初始化或在运动指令中给定,针对E6POS,POS类型位置。
$tool=tool_data[1] ;指定当前工具为1号工具;(工具号:1-16)
$base=base_data[1] ;指定当前工件为1号工件;(工件号:1-32)
sptp {x 100,y -100,z 200,a 0,b 0,c 0}
sptp {x 1000}
3、逼近点设置
sptp xp1 c_spl ;c_spl代表xp1是一个逼近点,非精确到达的点,旧的PTP指令用c_dis代表逼近点(ptp xp1 c_dis)。
二、SLIN-直线运动指令
SLIN指令可以定义并使用的结构体类型有:E6POS,POS,FRAME
例:slin xp1 with $tool=tool_data[1],$base=base_data[1],$vel.cp=0.5,$jerk={cp 50} c_spl
slin {x 100} with …….
三、SCIRC-圆弧运动指令
SCIRC指令可以定义并使用的结构体类型有:E6POS,POS,FRAME
例:
1、scirc xp7,xp8 c_spl with …. ;xp7是圆弧的辅助点,xp8是圆弧的目标点,
scirc xp7,xp8, ca 360 with …. ; ca 用来定义圆弧的圆心角,360度代表运动一周。
2、scirc {x 100,y 300} , {x 200,y 280} with…
Scirc {x 100,y 300} , {x 200,y 280},ca 180 with…
四、运动参数初始化的指令:
1、$tool=tool_data[1] ;指定当前工具是1号工具
$load=load_data[1] ;指定当前工具负载是1号工具负载
2、$base=base_data[1] ;指定当前工件是1号工件
3、$ipo_mode=#base,#tcp ;指定机器人运动模式
4、axis velocity ;指定机器人6根轴的移动速度
for n=1 to 6
$vel_axis[n]=100 ;100%全速移动
endfor
cp velocity ;指定机器人轨迹移动速度
$vel.cp=3 (max.3m/s) ;指定机器人工具TCP当前的轨迹移动速度为3米/秒
$vel.ori1= 100 (A,B) ;指定机器人工具绕Y、Z轴旋转的角速度为100度/秒
$vel.ori2=100 (C) ;指定机器人工具绕X轴(工具作业方向)旋转的角速度为100度/秒
5、$acc_axis[1]=100 ;指定机器人A1轴加速度为100%
$acc.cp=100 ;指定机器人TCP轨迹加速度为100%
$acc.ori1=150 ;指定机器人工具绕Y、Z轴旋转加速度
$acc.ori2=200 ;指定机器人工具绕X轴(工具作业方向)旋转加速度
6、$apo.cdis=100 c_spl (c_dis) ;指定机器人轨迹逼近距离为100mm
$apo.cvel=100 c_vel ;指定机器人速度逼近
$apo.cori=50 c_ori ;指定机器人姿态角逼近
说明:CP运动要设置以上参数,可指定其中一种即可,最常用的是距离逼近 c_dis
7、CP-PTP,也需要指定以上参数中的一种。
纯PTP的逼近: c_ptp, $apo.cptp=100,轴运动的路点逼近
ptp xp1 c_ptp
ptp xp2 c_ptp
ptp xp3 c_ptp
ptp xp4 c_ptp
四、相对运动指令:
sptp_rel ;PTP相对运动指令
slin_rel ;LIN相对运动指令
slin_rel {x 100} #base (默认相对工件坐标,可省略)
slin_rel {x 100} #tool (相对工具坐标,沿工具作业方向X+移动100,须做工具标定)
scirc_rel ;CIRC相对运动指令
我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
可能已经问过了,但我找不到它。这里有2个常见的情况(对我来说,在编程Rails时......)用ruby编写是令人沮丧的:"astring".match(/abc(.+)abc/)[1]在这种情况下,我得到一个错误,因为字符串不匹配,因此在nil上调用[]运算符。我想找到的是比以下内容更好的替代方法:temp="astring".match(/abc(.+)abc/);temp.nil??nil:temp[1]简而言之,如果不匹配,则简单地返回nil而不会出错第二种情况是这样的:var=something.very.long.and.tedious.to.writevar=some
我正在学习Ruby的基础知识(刚刚开始),我遇到了Hash.[]method.它被引入a=["foo",1,"bar",2]=>["foo",1,"bar",2]Hash[*a]=>{"foo"=>1,"bar"=>2}稍加思索,我发现Hash[*a]等同于Hash.[](*a)或Hash.[]*一个。我的问题是为什么会这样。是什么让您将*a放在方括号内,是否有某种规则可以在何时何地使用“it”?编辑:我的措辞似乎造成了一些困惑。我不是在问数组扩展。我明白了。我的问题基本上是:如果[]是方法名称,为什么可以将参数放在括号内?这看起来几乎——但不完全是——就像说如果你有一个方法Foo.d
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
我正在尝试使用ruby编写一个双线程客户端,一个线程从套接字读取数据并将其打印出来,另一个线程读取本地数据并将其发送到远程服务器。我发现的问题是Ruby似乎无法捕获线程内的错误,这是一个示例:#!/usr/bin/rubyThread.new{loop{$stdout.puts"hi"abc.putsefsleep1}}loop{sleep1}显然,如果我在线程外键入abc.putsef,代码将永远不会运行,因为Ruby将报告“undefinedvariableabc”。但是,如果它在一个线程内,则没有错误报告。我的问题是,如何让Ruby捕获这样的错误?或者至少,报告线程中的错误?