机器人与视觉,基于坐标系的运动偏移

news2024/11/16 7:48:37

基于可移动坐标系的机器人坐标偏移
在生产过程中,当需要建造多个坐标系的时候,我们可以采用基于坐标系偏移,可以实现使用机器人坐标系直接完成多个坐标系的联动。
由于实现多个坐标系的联动情况,那么通常都会伴随着坐标系的移动和旋转,所以我们会设立2个机器人坐标系,一个是机器手的工作坐标系,即为baseX;一个为机器手底座基准坐标系,即为base0;
在这里插入图片描述

如上图所示,base0为机器手底座的坐标系,是机器人自带的坐标系,不受任何控制的影响。baseX坐标系为机器手的工作坐标系,在示教是直接确定,baseX点在base0坐标系下的点。左图为示教的工件,右图红色为工作的工件,黑色为旋转后的示教坐标系。蓝色为我们最后发送给电气的偏移X距离,偏移Y距离,偏移角度Angle。
第一步:示教确定。在标定结束后,机器人在示教位置应确定一个工作坐标系(工作坐标系推荐使用机器手末端的中心为baseX坐标系)。
第二步:确定示教点坐标。当前的示教点坐标应通过电气使用机器手到达工件位置,然后记录示教点基于base0坐标系下的坐标的(即为在机器手全局坐标系的点)。同时也需要记录示教点在相机坐标系下的坐标。
【在确定示教点时,相机应该画面的中心应该正对到示教点,在识别工作坐标时可以按偏移量获取到工作坐标具体值】
在这里插入图片描述

如上图:2个正方形框为相机的拍照画面,那么我们在示教的时候应该将示教点放置在画面的正中心。
第三步:获取到工作时的基于base0坐标系下的工作坐标。
拟定:相机.work.x:相机坐标系下的工作点X坐标(可以拍照直接获取);相机.work.y:相机坐标系下的工作点Y坐标(可以拍照直接获取)
那么基于Base0下的工作坐标可以为:base0.work.x=base0.Teach.X+(相机.work.x-相机.Teach.X);base0.work.y=base0.Teach.y+(相机.work.y-相机.Teach.y);
所以工作点1和2,我们可以通过上述的计算方式对基于base0下的工作点1和2的坐标值。
第四步:在获取到基于base0下的示教点1和2坐标,基于base0下的工作点1和2坐标,基于base0下的baseX坐标值。(其中应该注意到,baseX点有2个,一个是开始搬运的点,一个是结束搬运的点)。
第五步:计算坐标系的旋转角度。
TeachLineW=Teach2.X-Teach1.X;
TeachLineL=Teach2.Y-Teach2.Y;
TeachAngel=arctan(TeachLineL/TeachLineW);
WorkLineW=Work2.X-Work1.X;
WorkLineL=Work2.Y-Work1.Y;
WorkAngle=arctan(WorkLineL/WorkLineW);
OffsetAngel=TeachAngle-WorkAngle;
所以我们得出的OffsetAngle即为我们坐标系的偏移角度
第六步:将坐标系进行旋转,然后计算与示教点的偏移量。
由于我们进行了旋转,所以旋转后的示教点的坐标在基于base0下会发生改变

在这里插入图片描述

不仅示教点会发生变化,示教的坐标系baseX也会发生变化,而且由于是绕着baseX进行旋转,所以点相对baseX的坐标不会改变,但是相对base0的坐标会改变,所以我们需要基于base0下的坐标系进行计算,并且直接输出基于base0下的示教坐标。
所以根据等腰三角形的特点,已知2点坐标,腰长,和旋转角度,求另一个点的坐标为多少:
nowTeach1.X=(Teach1.X-BaseX.X)*cosθ-(Teach1.Y-BaseX.Y)*sinθ+BaseX.X;
nowTeach1.Y=(Teach1.X-BaseX.X)*sinθ-(Teach1.Y-BaseX.Y)*cosθ+BaseX.Y;
则最后的偏移量为:
OffsetX=work1.X-nowTeach1.X;
OffsetY=work1Y-nowTeach1.Y;
最终我们输出给电气的值有:OffsetAngel(偏移旋转角度),OffsetX,OffsetY。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣1781. 子字符串的美丽值之和(cpp实现+解析)

文章目录1781.子字符串的美丽值之和完整代码1781.子字符串的美丽值之和 力扣传送门: https://leetcode.cn/problems/sum-of-beauty-of-all-substrings/description/ 题目描述: 一个字符串的 美丽值 定义为:出现频率最高字符与出现频率最低字…

CMake中add_compile_options/target_compile_options的使用

CMake中的add_compile_options命令用于向源文件的编译添加选项&#xff0c;其格式如下&#xff1a; add_compile_options(<option> ...) 将选项添加到COMPILE_OPTIONS目录属性。从当前目录及以下目录编译target时&#xff0c;将使用这些选项。 add_compile_option…

48-90-Scala-函数式编程基础特性等

48-Scala-函数式编程&#xff1a; 函数式编程 1、完全面向对象编程 2、函数式编程&#xff0c;万物皆函数&#xff0c;程序语句的集合&#xff0c;称为函数。类中的函数称之方法。函数无重载重写概念&#xff0c;方法可以。函数可以嵌套 3、函数的定义def test3(s:String):…

电子书资源:分享10个非常好用的免费书籍资源网站

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

Qt扫盲-QCheckBox 理论总结

QCheckBox 理论总结1. 简述2. 分组3. 状态&信号4. 外观&快捷键1. 简述 QCheckBox是一个选项按钮&#xff0c;可以 选中 或 未选中。复选框通常用于表示应用程序中可以启用或禁用的功能&#xff0c;而不会影响其他功能。可以实现不同类型的行为。一般是很多个联用的。 …

Cookie、Session、Token比较

1 Cookie cookie 指的就是浏览器里面能永久存储的一种数据&#xff0c;仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成&#xff0c;发送给浏览器&#xff0c;浏览器把cookie以 key-value 形式保存到某个目录下的文本文件内&#xff0c;下一次请求同一网站时会把该…

基于适应度-距离平衡的人工生态系统优化算法解决瞬态稳定性约束最优潮流问题(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Awaitility同步异步工具介绍与RocketMQ中实战

在编写测试用例的时候遇到有异步或者队列处理的时候经常会用到 Thread.sleep() 等待来进行测试。例如&#xff1a;DLedger 测试选举的过程。当DLedger Leader下线。此时DLedger会重新发起选举&#xff0c;这个选举的过程是需要一定时间。很多时候在测试代码中就会使用 Thread.s…

b站黑马的Vue4小时快速入门案例代码——计数器

目录 目标效果&#xff1a; 重点原理&#xff1a; 1.创建Vue实例的时候&#xff1a; 2.v-on——为元素绑定事件 3.v-text——【解析文本用】设置标签的文本值 v-text【简写】为{{}} 实现步骤&#xff1a; 代码部分&#xff1a; 1.计数器模板.html(全是重点&#xf…

m基于粒子群算法的分布式电源DG的优化配置

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着科技的发展&#xff0c;人民生活水平的不断提高&#xff0c;使得当今社会的发展对能源环保性和供电的可靠性的要求也不断提高。集中式供电系统由于污染大、可靠性差及操作难度大等缺陷越来越…

MySQL数据库基础知识7,查询的执行过程

目录一、拆分查询二、分解关联查询三、查询的执行过程四、优化器的一些优化手段1、重新定义关联表的顺序2、将外连接转化为内连接3、使用增加变换规则4、优化count()、max()、min()5、预估并转化为常量表达式6、覆盖索引扫描7、提前终止查询五、MySQL如何执行关联查询六、查询执…

【HTML期末学生大作业】 制作一个简单HTML宠物网页(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Linux 学习笔记 04 —— 文件管理和磁盘管理相关命(2) 详解 grep 命令

用法 less 参数 文件 常用用法 很实用的搜索功能。 向前搜索 / &#xff1a; 使用一个模式进行搜索&#xff0c;并定位到下一个匹配的文本 n &#xff1a; 向前查找下一个匹配的文本 N &#xff1a; 向后查找前一个匹配的文本 向后搜索 ? &#xff1a; 使用模式进行搜…

【C语言】程序环境和预编译

如若这一生注定磨难&#xff0c;自由与真我千金不换 文章目录一、程序的翻译环境和运行环境1.翻译环境&#xff08;编译&#xff08;预编译、编译、汇编&#xff09;链接&#xff09;2.运行环境&#xff08;程序入口main 到 程序终止&#xff09;二、预处理&#xff08;预编译…

SpringMVC(四)域对象共享数据(干货、超详细)

【环境说明】 SpringMVC项目中使用的是thymeleaf视图解析器 <!-- Spring和thymeleaf的整合--><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version>&l…

网络爬虫数据解析的四种方式之XPath

文章目录前言四种数据解析方式数据解析之XPathXPath介绍在浏览器中安装XPath helper插件XPath使用方法通过浏览器测试插件是否安装成功通过python代码实现用XPath来解析数据前言 快期末了&#xff0c;有个数据挖掘的大作业需要用到python的相关知识&#xff08;这太难为我这个以…

C语言基础—数据类型和规范

基本的数据类型和规范 C语言基础—数据类型和规范&#x1f51c; 首先 C 语言所允许的合法符❗ 数据类型和关键字图示❗❗ string 不是C语言关键字&#x1f914; 关于关键字更多的参考⚛ 常量与变量常量定义和分类指数表示法字符常量的转义字符变量定义❗变量(标识符)的命名规范…

『NLP学习笔记』长序列预测论文LTSF-Linear解读

长序列预测论文LTSF-Linear解读 文章目录一. 引言二. 直接多步(DMS)和迭代多步(IMS)的对比三. 基于变压器的Transformer解决方案3.1. 预处理(preprocessing)3.2. 词向量(embedding)3.3. 编码(encoder)3.4. 解码(encoder)四. 一个简单得令人尴尬的Baseline五. 代码解读5.1. 数据…

MySQL字符串索引创建方案

字符串字段添加索引 MySQL是支持前缀索引的&#xff0c;也就是说&#xff0c;你可以定义字符串的一部分作为索引。默认地&#xff0c;如果你创建索引的语句不指定前端长度&#xff0c;那么索引就会包含整个字符串。 # 包含整个字符串 alter table table_name add index index…

liteos连接器脚本隐藏的指针问题

一,数据拷贝引起的指针问题 大家想一下,一个指针指向的内存地址处的数据,假设拷贝到了另外一个地方,那么这个时候我们的指针还是指向原来的位置,那么就会导致问题。为什么提出这个问题呢?因为我们前面讲到了liteos的data段的拷贝,那么对于data段的访问的指针是不是也要…