更多内容请点击上方安德鲁机器人关注.转载请先后台留言,请支持原创!谢谢

难得的机会让胖老师Johnny Pan跟大家开个车,可能速度有点快,各位系好安全带坐好。关于胖老师Johnny Pan这里就不作过多介绍,搞机老师傅估计都认识他。搬好我的小板凳聆听大佬的声音。

轻松学机器人系列(一)

坐标系关系

大家好,我是Johnny。今天很高兴应邀在这个平台和大家一起交流玩机的经验,今天主要和大家聊聊机器人坐标系的前世今生。

刚开始玩机器人的朋友通常会被一堆没听到过名字的坐标系砸闷,有时候即使会用了也未必完全清楚坐标系各自的来历及相互关系,而一般的培训或者文档也没有对此加以详细说明。

本文本着让普通人都能看懂的原则,会用尽量简单的语言来把坐标系之间的关系给大家展开一下。

首先让我们捋一下,目前所知道的或者听说过的坐标系:

序号

名称

1

轴坐标系

2

机器人根坐标系

3

世界坐标系

4

法兰坐标系

5

工具坐标系

6

工件坐标系

是不是看着很多?没关系,一个个捋:

1.轴坐标系:用来描述机器人各个轴的关节角度,所有机器人都有的最基础的坐标系。(一句话点评:这货其实实际用处不多,一般在示教,轴运动编程,轴工作区域监控等情形下会用到)
2.机器人根坐标:在KUKA中称作robroot,在ABB中称作base。这个坐标系是一个空间直角坐标,由X,Y,Z构成,满足右手定则,如下图所示

这个坐标系是干嘛的呢?啥意义?类比一下,这个坐标系相当于告诉机器人它的脚在哪?也就是说,不管机器人装在哪,怎么装的,这个坐标系永远和机器人底座呈上述关系,通俗点说就是跟着机器人走,就像脚和身体的关系。而通常标准机器人是不会移动的,因此该坐标系固定不变。(一句话点评:机器人内部坐标变换的基础坐标系,直观且容易理解)

3.世界坐标系:世界坐标告诉机器人你处在大地的哪个位置上。一般情况下和机器人根坐标重合。当然也有不重合的时候,如下所示:

其中B为世界坐标,A和C为根坐标,默认情况下B与C重合,在一些情况下也可以设置成不重合(例如多机机器人统一世界坐标时)。世界坐标的特点是一旦确认,就固定不变,Z方向始终向上(为了配合负载计算)。(一句话点评:示教机器人时的首选坐标系)

4.法兰坐标系:法兰坐标位于机器人6轴法兰中心,当机器人处于零位时,方向如下图所示:

法兰坐标系是用来干嘛的呢?它用来描述这个机器人运动系统的末端位置。通俗点说就是告诉机器人手在哪里。当一个机器人开始运动的时候,我们并不关注其他轴在空间的位置,我们更关心机器人末端(即法兰中心)在空间所处的位置情况,以方便我们判断到不到位,准不准确。也就是说在这种坐标系下,所有机器人运动计算都是基于法兰中心点。(一句话点评:机器人末端的基础坐标系,受零位和机器人机械参数影响。)

5.工具坐标系:工具坐标系描述的是法兰前端安装的工具的位置情况。在默认情况下,工具坐标和法兰坐标是重合的。既然差不多那为什么要有工具坐标?考虑一下实际情况,让你去写毛笔字,你会不会用到笔?答案是肯定的。那么这个时候你是更关心手在哪还是更关心笔尖在哪?自然是笔尖的位置,因为那直接关系到我写的字好不好看。同理,在正常生产过程中,机器人前端都是安装有工具的,工具末端的位置相比法兰位置更为重要。其中,我们把工具坐标系的原点(注意是一个)称为TCP(Tool Center Point)工具中心点。由于工具五花八门,因此工具坐标系可以由用户自定义。(一句话点评:实际编程中最重要的坐标系之一。)

6.工件坐标系:工件坐标系描述的是机器人在哪个工作台干活。由于工位的多样性,工件坐标系也是可以人为定义的。默认的情况下,工件坐标系和世界坐标系重合。工件坐标系看着和世界坐标系根坐标系都差不多,为什么还需要设这么一种坐标系出来?这是因为:程序中的点都是记录在对应工件坐标系上的,可以理解为点的位置绑定对应工件坐标系。也就是说当工件坐标系发生变化后,其上所有点位都会发生对应变化。这个功能可谓神技。

很多衍生的功能(码垛,输送线跟踪,外部轴数学耦合等)都建立在这个原理之上。(一句话点评:实际编程中最重要的坐标系之一)。

接下来,我们来聊聊这些坐标系之间的相互关系:

第一层关系

世界坐标与工件坐标的关系

按照最简单的情况来分析,先来看图,

前面说了,如图安装完机器人后,世界坐标系和根坐标系重合,因此这里不再罗列根坐标系。

先来看世界坐标系,它的特点很容易总结:

1. 固定不变

2. 所有使用者都知道世界坐标系的位置及方向。(即坐标系已知)

再来看看工件坐标系,它有哪些特点呢?我们来看一下。首先,很多时候一个机器人需要在多个工位上干活,这意味着我得为机器人设定很多个工件坐标系以对应不同工位。

因此第一个特点很简单,一个机器人虽然只有一个世界坐标系,但是可以有很多个工件坐标系。(理论上ABB,KUKA都可以无限设定)

考虑一下,如果把机器人的工件坐标系设定在北京天安门楼顶行不行呢??

行不行呢?行不行呢?行不行呢?

当然可以!!!要问为啥?用户自定义呗,自定义还不够你臭屁的么?

所以第二个特点就是工件坐标系可以自定义。

好,现在我们深入思考一下这个问题。由于工件坐标系是由用户自定义的,因此当你设定了一个工件坐标系后,你必须得告诉机器人这个工件坐标系的具体位置情况,不然机器人是不知道这个坐标系的信息的。那么问题来了,怎么样能让机器人知道一个工件坐标系具体情况呢?

当我们要描述一个具体的坐标系时,首先需要做的是........找参考坐标系。。。。

参考坐标系的选择有两个前提条件:

1. 两者相对位置固定不变

2. 参考坐标系已知。

然后我们发现了一个现成的坐标系,没错,就是世界坐标系。它正好符合这两个要求。

当把世界坐标系设定为参考坐标系后,剩下的事情只有两件了:

1.指明工件坐标系原点的位置

2.指明工件坐标系三个方向的情况

简单来说,就是找原点,定方向

原点怎么表示呢??

原点是不是一个点?一个点在一个坐标系中怎么表示?学过初中数学的都知道,可以用X,Y,Z三个值来表示空间点的位置。所以我们用一组X,Y,Z就搞定了原点的位置信息

接下来方向该怎么定呢?

直接对坐标系方向做说明是件很繁琐的事,不过我们有更简易的方法,那就是欧拉角欧拉角的意义是这样的:我们已经有一个参考坐标系(世界坐标系),这个坐标系是已知的(即原点方向我们都知道),那么我们能不能这么操作,在原始坐标系方向的基础上,让它沿着不同的方向轴进行旋转,比如先绕着Z轴旋转一定角度(角度A),再绕着Y轴旋转一定角度(角度B),最后绕着X轴旋转一定角度(角度C),使得旋转之后的坐标系方向和我所需的工件坐标系方向一致。那么这三个旋转角就可以用来描述方向的变化,也就是我们所说的欧拉角。值得注意的是,类似X,Y,Z的平移是不讲究顺序的,也就是说,只要这三个值确定了,目标点的空间位置就是确定的。而转角却和旋转顺序有关,先转和后转会导致不同的结果。

因此需要说明的是,ABB,KUKA欧拉角顺序为ZYX,也就是先转Z轴,然后Y轴,最后X轴。有些机器人品牌是另外的欧拉角顺序,比如KEBA,Comau是ZYZ等等。

好了,我们现在既有原点信息(X,Y,Z),又有方向信息(A,B,C),这样一来机器人就知道工件坐标系的确切空间位置了。举例:KUKA的工件坐标系描述:base_data[1]={x 0,y 0,z 0,a 0,b 0,c 0}。ABB的工件坐标系描述和KUKA稍有不同,采用四元数的方式描述方向,此次讨论暂不涉及。

所以第一层关系就明确了:工件坐标系是通过世界坐标系下的{x ,y ,z,a ,b ,c }来确定的,或者说工件坐标系是基于世界坐标系推算出来的。

接下来看看第二层关系

法兰坐标系与工具坐标系的关系

和工件坐标系一样,工具坐标系也是人为定义的,那么怎么告诉机器人工具坐标系的位置信息呢??我们先要做的事情其实一样,先得找一个靠谱的参考坐标系。之前说了,参考坐标系必须满足两点:

1. 两者相对位置固定不变;

2. 参考坐标系已知。

按照这个标准,世界坐标系就不适合作为工具坐标系的参考坐标系了,因为两者相对位置会发生变化。

突然发现我们还有一个法兰坐标系,这个和工具坐标系位置肯定不会改变。(如果会改变。。。。。我的天,你到底有米有好好固定工具。)

那它满不满足第二个条件呢?先说结论:可以认为它是已知的坐标系,只要满足两点:

1.机器人机械零位准确

2.机器人机械参数正确。

这是什么意思,法兰坐标系是通过机器人的内部算法建立的,该算法会把根坐标通过数学的方式偏转至机器人法兰上。由于是计算过程,所以仍然会受到一些因素制约。我们可以把它想象成是解一个复杂的方程,机械零位决定了方程的初值,机械参数决定了方程的表达式。很显然,当这两者有任何一个出现问题,方程的解就会出问题。(注:机械零位就是大家经常要做的零点标定,机械参数则是对应于不同机器人的相关参数,以KUKA为例子:KR30和KR360机械参数完全不同,包括减速比,轴距等各类本体参数。)

现在我们仍然把问题简化一下,假定大家的零点都正确标定了,同时选择的机器参数也匹配当前机器人,那么结论就出来了:法兰坐标系可以作为工具坐标系的参考坐标系。事实上所有机器人厂家也都是这么做的。与之前描述一样,只要给出对应的X,Y,Z,A,B,C这6个值,就可以让机器人知道目标工具在法兰的什么位置。

举例:KUKA的工具坐标系:tool_data[1]={x 0, y 0,z 0,a 0,b 0,c 0}

至此,第二层关系明朗了:工具坐标系是由法兰坐标系下的{x ,y,z ,a ,b ,c }来确定的。

接下来,最难的第三层关系来了

工具和工件有没有关系呢??

咳咳,这个稍微有点复杂,大家可以先去喝口水。。。。。。。

闲话不提,上图

假定我们建立了一个工件坐标系A,还有一个工具坐标系B。然后编了一个程序,在程序中示教了一个点P。好,问题来了,点是不是随意示教的???

是不是??是不是???是不是?????

当然是啦,想示教在哪就示教在哪,只要够得到。那么这个点的位置信息是怎么告诉给机器人的呢???

在数学上描述一个点是挺简单的一件事,只要有个参考坐标系,一组X,Y,Z就能搞定了(我想耐心看到这里的同鞋应该都能理解了)。先看一下,这个时候哪个坐标系作为参考坐标系更合适?1. 世界 2. 法兰 3. 工件选哪个??

回想一下参考坐标系的要求我们就明白了,第一个剔除的是法兰坐标,因为它相对点位会动。

那世界坐标行不行???也不够好,为什么呢?因为世界坐标系固定不变,意味着一旦你示教了这个点,这个点的位置也就固定不变了。如果你示教了100个点,然后发现需要整体往X方向平移100mm,那么你惨了,你得一个一个点改。

所以,示教点位置是基于所选的工件坐标存储的。如果需要把很多点做整体平移时,只要变更工件坐标的值即可。

参考坐标系搞定了,继续往下想,仅仅x ,y ,z 就能描述一个示教点么?数学上的点和我们示教的点是一样的意义么??记住一个原则,所有的示教点必须能让机器人以唯一的一种姿态到达。也就是如果机器人有两种以上的方式可以到达这个位置,就是不可以的(如果你家的机器人今天这么走轨迹,明天那么走轨迹,就问你会不会疯?)。这么一来,我发现X,Y Z完全不够,我至少还需要一些可以确定姿态方向的参数。有同鞋说,之前说的A,B,C不就是规定方向的么?在这里可以用么??等等,我们不是聊的是点么?点有方向么??数学上点是没方向的。因此,这里需要说明一下:示教的点其实并不仅仅是一个数学上的点。那示教的点到底是什么???

我们换个角度想这个问题,当执行这个程序时,机器人哪个部位会到达这个示教点??答案是:TCP。上文有提到,TCP是工具中心点,在运动过程中机器人所有的轨迹计算会围绕这个点进行。

换句话说,这个点决定了工具如何到达这个位置,包括方向。从这个角度来说,示教点其实是描述的是两个坐标系之间的位置关系。因此它可以有方向。因此我们可以用x,y,z,a,b,c这6个参数来描述一个示教点的位置。其中X,Y,Z描述的是该点在工件坐标系下的空间位置,A,B,C描述的是工具坐标到达该点时与工件坐标系之间的欧拉角。

。。。。。。

。。。。。。

你以为就结束了么?确定了一组X,Y,Z,A,B,C就一定只有唯一解么???来看看一个特殊情况,如图所示:

我们可以看到,当规定好了X,Y,Z,A,B,C的值后,实际上机器人法兰前端的姿态位置就被确定了,但是如图所示,这两个机器人法兰空间位置姿态完全一致,但是机器人整体姿态仍有区别。

在KUKA软件中,通过S,T这两个姿态参数来规范这种情况,以避免同一个位置点机器人有多种姿态。类似的ABB也有Confdata。

。。。。。。

。。。。。。

你又以为结束了么?以前仅仅讨论了机器人本体的情况,如果机器人带有外部轴呢??以KUKA为例,一般可以带6个外部轴,所以完整的点坐标还包含外部轴信息。

举例: KUKA   xp1={x , y , z , a ,b ,c ,s , t , e1 , e2,e3 ,e4 ,e5 ,e6 }

总结:第三层关系,原来程序中的点,是由工具坐标系和工件坐标系算出来的。现在知道为什么要好好做工具坐标,好好做工件坐标了?现在知道为什么示教语句不能乱选坐标系了??

又及:第一次发稿,写得有点乱,对于细节描述各位大牛不用太较真,希望对初学者有所帮助。

再及:我不是段子手。

俗话说,在家靠父母,出外靠朋友。各位看官,胖老师初来咋到,以诙谐有趣而又生动的方式给大家卖艺(重点:卖艺不卖身,就不要惦记胖老师,人家可是家庭美满)。初次卖艺,请大家有钱的买个钱场,没钱的捧个人场。欢迎打赏转发(所有的赞赏与欣赏我都代为传递给胖老师)!!!!期待胖老师下次继续开车带着大家兜兜风,寻找初恋的感觉!!!❤❤❤❤

——————————————

往期文章回顾:1.库卡机器人编程之CAST指令2.库卡机器人编程之系统子程序及函数3.库卡机器人编程之如何log数据4.库卡机器人编程之如何判断机器人当前是否到目标位置5.库卡机器人编程之传统运动编程6.库卡机器人编程之Frame数据以及位置偏移7.库卡机器人编程之3点法算Base原点8.库卡机器人之信息编程及语言切换9.库卡机器人编程之中断指令10.库卡机器人之浮点数处理111.库卡机器人之坐标偏移12.库卡机器人之编程运算符113.库卡机器人编程之求余14.库卡机器人编程之程序库15.库卡机器人编程之欧拉角与四元数转换16.库卡机器人编程之随机函数17.库卡机器人编程之BAS程序18.库卡机器人编程之字符串处理函数19.库卡机器人编程之故障相关变量及函数20.库卡机器人编程之WorkVisual编程功能

工具坐标6点法_轻松学机器人系列之各坐标系关系相关推荐

  1. 数据集制作_轻松学Pytorch自定义数据集制作与使用

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 大家好,这是轻松学Pytorch系列的第六篇分享,本篇你将学会如何从头开始制作自己的数据集,并通过DataLo ...

  2. 轻松学Linux系列课程-赵永刚-专题视频课程

    轻松学Linux系列课程-4263人已学习 课程介绍         从0开始,Linux云计算系列课程,包含Linux初级运维.运维.初级架构师.云计算运维及开发..... 课程收益      讲师 ...

  3. 小白轻松学SpringBoot系列

    小白轻松学SpringBoot系列 Spring Boot简介 Spring Boot特点: Spring Boot 学习地址: Spring Boot简介 Spring Boot目前也是一个比较火的 ...

  4. a pycharm 标记多个_轻松学透Markdown的终极教程 #3:Markdown标准标记语法(全)

    轻松学透Markdown的终极教程 #3: Markdown标准标记语法(全) 掌握并熟记一些常用的Markdown的标记语法,简单.有趣.实用 其实如果大家选择了一款Markdown编辑器上手的话, ...

  5. 灵宝机器人编程学校_南宁学机器人编程的学校

    南宁学机器人编程的学校|可来南宁童程童美青少儿编程培训学校,童程童美在南宁青秀区.西乡塘区等开设校区,线下可学编程,线上也可学习,线上线下同步教学,方便家长选择.南宁童程童美设有试听课,欢迎广大家长预 ...

  6. c++图书管理系统_轻松学做C语言课程设计:图书管理系统-数组实现

    C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力.从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现. 题目要求 图书管理系统 ...

  7. rcnn代码实现_轻松学Pytorch实现自定义对象检测器

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 大家好,今天来继续更新轻松学Pytorch专栏,这个是系列文章我会一直坚持写下去的,希望大家转发.点赞.留言支 ...

  8. c语言随机生成整数存放一维数组_文科生学 Python 系列 7: Numpy 数组/索引和切片...

    第四课:本课内容: • 0. 导入 NumPy 包 • 1. 创建 NumPy 数组 • 2. 索引和切片 • 3. 读取文件 • 4. 布尔型索引 • 5. 数组的运算 • 6. 常用函数举例 Nu ...

  9. df满足条件的值修改_文科生学 Python 系列 16:泰坦尼克数据 2(缺失值处理)

    第八课:案例分析 - 泰坦尼克数据 本节课将重点分析泰坦尼克号沉船事故,我们将探索是什么因素决定了最后是否生还. 我们将将前面课程所学过的知识点融会贯通,举一反三 新增知识点: 缺失值处理:panda ...

最新文章

  1. WebService开发
  2. [kubernetes] 资源管理 ---- 资源请求和限制
  3. [机器学习]回归--Polinomial Regression 多项式回归
  4. Java 数组实现堆栈操作
  5. 网络编程 socket介绍
  6. java代下订单管理模块_用java语言开发一个订单管理系统
  7. 四个程序员恋爱必学的聊天知识点!
  8. [20180625]10g下查询条件rownum = 0.txt
  9. 第四章 数据字典详解
  10. 液压阀的“通”和“位”
  11. 2020 智慧城市解决方案(智慧城市系统及相关技术)
  12. PHP实现图片加文字/图案水印
  13. VB6下的BitMap示例:模拟雨点程序
  14. 如何利用新闻传播进行产品网络推广?
  15. IDC网络传输优化的罪与罚
  16. eclipse android模拟器 慢,android模拟器太慢怎么办?
  17. 【校招VIP】产品经理之明确活动目的
  18. mysql练习题记录之:学生表、课程表、成绩表、讲师表、等级表
  19. 学习笔记整理——vim,vim文件编码,vim配置文件
  20. css设置1.5倍行高,CSS怎么控制行高?

热门文章

  1. python基础装饰器_Python基础 装饰器及练习
  2. Buuctf(pwn) jarvisoj_tell_me_something 栈溢出
  3. 【Python教程】30个语言特性技巧整理
  4. python中的urlencode和urldecode的用法
  5. Python 删除列表中的重复数据
  6. Python 如何在子类派生的新方法中重用父类的功能
  7. Python中的sort()方法使用基础
  8. Python基础教程:数据结构
  9. gogs mysql 报错_docker上对gogs二次开发
  10. 平顶山学院计算机专业是几本,平顶山学院是几本_是二本还是三本大学?