康耐视visionpro-机器视觉定位引导-经验总结-来自视觉人粉丝分享

1、机器人吸取电路板,移动到拍照位置,并在电路板上找一个标记点,并且,通过机器人示教把当前电路板能够准确的放入到目标位置。
2、机器人吸取电路板吸取电路板,在x,y方向进行移动,总共移动4个位置,记录4个位置的机器人的坐标,以及拍摄图像

3、使用vp的CogCalibNpointToNpoint工具,并在蓝框填入标志点的像素坐标,红框填入对应的机器人坐标。
4.点运行完成标定功能。
5、完成标定后,整个流程如下

在模板匹配中把模板中心进行记录。然后,调整标定工具的校正原点

使得模板匹配的模板中心x,y坐标输出为0,0,表示当前吸取的电路板能够准确的放入模板位置
下次,再吸取电路板时,执行模板匹配后,输出的x,y坐标就是机器人应当移动的x,y的偏移量
这样x y 就计算完成了。
但往往,因为还有旋转。所以还要计算角度
机器人不用旋转中心进行标定
旋转中心标定方式的说明
在下面的图例中,红色为相机视野(FOV),黄色为工件,五星为Mark点。




旋转中心方法用于所有机器人与视觉配合场景
方法 :计算工件实际发生的偏移量 和旋转,结合机器人的旋转中心进行二次补偿后 ,把补偿量 发送给机器人 ,然后机器人把补偿量进行抓取或放置即可。
计算 某个点绕另外一旋转定角度后的坐 标,如图 :A(x,y)绕 B(rx0 ,ry0) 旋转a度后的位置为 C(x0,y0 ),则有如 下关系式:
x0= cos (a) * (x -rx0) – sin (a) *(y-ry0) +rx0
y0= cos (a) * (y- ry0) + sin (a) (x-rx0) +ry0

下面的所有计算旋转与偏移量都是基于上面的公式。


{Cx,Cy } 旋转中心坐标; {Mx,My } 工件 Mark坐标。
{MDx,MDy},Mark偏移量。
{RDx,Rdy}, 发送给机器人的补偿量。
工件发生平移时,
在拍照位置进行拍照后 ,与开始训练标准位置时,Mark点成像会产生偏移。
Mark 偏移量 MDx =RDx;MDy =RDy ;
如上图即相机计算出的 Mark 点偏移量 ,可以直接补偿给机器人,然后进行抓取即可。

作为测试 ,可以机器人在拍照位置进行补偿后 ,Z轴不变然后再拍照 ,会获得和拍照位置一样的图像。
工件发生平移与旋转

工件发生平移和旋转时
在拍照位置进行后 ,与开始训练标准位置时 ,Mark 点成像会产生偏移;
Mark 偏移量 MDx #RDx, MDy#RDy ;如左上图即相机计算出的 MarkMark 点偏移量 ,不能直接补偿给机器人 ,需要计算出 RDx 和RDy,和RDr ,MDr 然后补偿给机器人 ,机器人补偿后才能进行抓取。


作为测试 ,可以机器人在拍照位置进行补偿后 ,Z轴不变然后再拍照 ,会获得和拍照位置一样的图像;
计算过程,旋转角度a

计算 CDx =Cx1– Cx0和 CDy =Cy1– Cy0
CDx = cos (a) * (Cx0 -X0) -sin (a) * Cy0-Y0) + X1 – Cx0
CDy = cos (a) * (Cy0 -Y0 ) + sin (a) * Cx0 -X0 ) + Y1– Cy0
从公式中可以看出,补给机器人的偿量由:
旋转中心坐标( Cx0,Cy0 )
标准的工件 (Mark) 坐标点( X0,Y0)
工件移动后新的(Mark)坐标点
工件 (Mark) 旋转角度 a
所以利用旋转中心方法计算给机器人的补偿量时,首先要中心坐标,
但是在很多场景下计算旋转中心坐标时要么出了视野,要么转的角度范围太小等,拟合旋中心都存在误差,
导致补偿精不够
一定要计算旋转中心坐标吗?其实不需要。
CDx,Cdy 计算过程 ,旋转角度 a

CDx = cos (a) * (Cx0 -X0) -sin (a) * (Cy0 -Y0) + X1 – Cx0
= ( cos (a) -1) * (Cx0-X0)-Sin(a)(Cy0 -Y0) + MDx
= (cos(a) -1) * StDx -sin (a) * StDy + MDx
CDy = cos ( a) * (Cy0 -Y0 ) + sin (a) * (Cx0 -X0 ) +y1 – Cy0
= ( cos (a) -1) * (Cy0 -Y0 ) + sin (a) * (Cx0 -X0 ) + Mdy
= (cos(a) -1) * StDy + sin (a) * StDx + Mdy
从公式中可以看出 StDx= Cx0-X0, StDy = Cy0 -Y0 是个常量, MDx 和Mdy是每次拍照是工件 (Mark )的坐标与准位置工件( Mark)的差值;
StDx 与StDy 怎么计算呢?蓝色的为一个二元次方程,我们需要旋转角度即可计算出;
如果 计算出 StDx 和StDy 则在运行时,直接带入上述公式,可以很快计算出 CDx,Cdy 这样给出Robot 的偏移量了,而不需要计算旋转中心确切坐标了
下面介绍如何求解 StDx和StDy
实际操作的时候,感觉上面的文章有点难理解,就还是老老实实去算了圆心,例如让机器人旋转正15度,和负15度,得到两个新的坐标。3点求圆心坐标。
点求圆心:
struct POINT
{ public double X;public double Y; } POINT RotateCenterCal(POINT p1, POINT p2, POINT p3, POINT ptCenter){//将三点代入圆的方程double a = 2 * (p2.X - p1.X);double b = 2 * (p2.Y - p1.Y);double c = p2.X * p2.X + p2.Y * p2.Y - p1.X * p1.X - p1.Y * p1.Y;double d = 2 * (p3.X - p2.X);double e = 2 * (p3.Y - p2.Y);double f = p3.X * p3.X + p3.Y * p3.Y - p2.X * p2.X - p2.Y * p2.Y;ptCenter.X = (b * f - e * c) / (b * d - e * a);ptCenter.Y = (d * c - a * f) / (b * d - e * a);return ptCenter;}
之后可以根据圆心 以及当前取得到的坐标以及旋转量,倒推得到要旋转多少角度和移动多少坐标才能回正。

CDx = cos (a) * (Cx0 -X0) -sin (a) * Cy0-Y0) + X1 – Cx0
CDy = cos (a) * (Cy0 -Y0 ) + sin (a) * Cx0 -X0 ) + Y1– Cy0
从公式中可以看出,补给机器人的偿量由:
旋转中心坐标( Cx0,Cy0 )
标准的工件 (Mark) 坐标点( X0,Y0)
工件移动后新的(Mark)坐标点
工件 (Mark) 旋转角度 a
代码: private void button3_Click(object sender, EventArgs e)
{ //根据圆心坐标 与角度, 以及原先的X,Y, 求旋转角度后的新坐标
POINT p1 = new POINT();
POINT p2 = new POINT();
POINT presult = new POINT();
p1.X = double.Parse(lastX.Text);p1.Y = double.Parse(lastY.Text);double jiaodu = double.Parse(lastjiaodu.Text);jiaodu = -jiaodu;// jiaodu = jiaodu * 180 / Math.PI; 无需转换成度数p2.X = double.Parse(centerX.Text);p2.Y = double.Parse(centerY.Text);presult = FindNEWXandY(p1, p2, presult, jiaodu);resultX.Text = presult.X.ToString();resultY.Text = presult.Y.ToString();}POINT FindNEWXandY(POINT p1, POINT p2,POINT presult,double jiaodu){//根据圆心坐标 与 原先的X,Y, 求旋转角度后的新坐标//jiaodu = (Math.PI *jiaodu/180);double mc = Math.Cos(jiaodu);double ma = Math.Sin(jiaodu);double a1 = (p1.X - p2.X) * mc;double b1 = (p1.Y - p2.Y) * ma;presult.X =Math.Round(a1 - b1 + p2.X,3);double a2= (p1.Y - p2.Y) * mc;double b2 = (p1.X - p2.X) * ma;presult.Y = Math.Round(a2 + b2 + p2.Y,3);return presult;}



因为当时使用的机器人精度较查,误差还是挺大的。如果项目成型,则会有最终解决方案,目前只是配合测试。先到此结束
相关文章:
康耐视visionpro-机器视觉定位引导-经验总结-来自视觉人粉丝分享
1、机器人吸取电路板,移动到拍照位置,并在电路板上找一个标记点,并且,通过机器人示教把当前电路板能够准确的放入到目标位置。 2、机器人吸取电路板吸取电路板,在x,y方向进行移动,总共移动4个位置ÿ…...
包管理工具npm
一:package.json 在某个文件路径下,执行 npm init。就会生成package.json文件。大致如下: {"name": "test","version": "1.0.0","description": "测试","main": &q…...
ChatGPT正进军各行各业,抓住机遇,拥有无限的可能性。
每一个新技术的出现都会对各行各业产生冲击,但关键在于如何抓住这个机遇。ChatGPT是一项非常具有前途的技术,它可以在许多领域为人们提供更好的服务和体验。这项技术的优势之一是它可以快速而准确地理解和解释自然语言,从而使人们可以更轻松地…...
Maven 多模块管理
多模块管理简单地理解就是一个 Java 工程项目中不止有一个 pom.xml 文件,会在不同的目录中有多个这样的文件,进而实现 Maven 的多模块管理 在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能…...
crash 内核调试工具 ps 指令 显示的进程状态 RU, IN, UN, ZO, ST, TR, DE, SW, WA, PA 什么意思
crash> help ps | grep "the task state" 5. the task state (RU, IN, UN, ZO ,ST, TR, DE, SW, WA, PA, ID, NE) 参考linux-4.19.113内核源码(include/linux/sched.h),有如下定义 /** Task state bitmask. NOTE! These bits…...
Spring《二》bean的实例化与生命周期
🍎道阻且长,行则将至。🍓 上一篇:Spring《一》快速入门 下一篇:Spring《三》DI依赖注入 目录一、bean实例化🍍1.构造方法 ***2.静态工厂 *使用工厂创建对象实例化bean3.实例工厂 ***使用示例工厂创建对象实…...
java与kotlin 写法区别
原文链接:https://gitcode.net/mirrors/mindorksopensource/from-java-to-kotlin?utm_sourcecsdn_github_accelerator#assigning-the-null-value Print to Console 打印到控制台 Java System.out.print("Amit Shekhar"); System.out.println("Amit…...
服务器运行深度学习代码使用指南
该内容配置均在九天毕昇下配置。 当前系统使用的linux版本为:Ubuntu 18.04 LTS。 当前版本安装的是:cuda10.1。 九天毕昇平台:https://jiutian.10086.cn/edu/#/home 一、linux下运行python的操作 ls 为列出当前目录中的文件 cd 文件名 进入…...
计算机组成原理 - 2. 数据的表示和运算
整理自天勤高分笔记,购书链接: 24 天勤高分笔记 要记住的几个数字 📓: 215327682^{15} 3276821532768 216655362^{16} 6553621665536 23121474836482^{31} 21474836482312147483648 23242949672962^{32} 4294967296232429496…...
【js】基础知识点--语句,break和continue,switch,with,for..in,do-while,while
一、break和continue语句,常用 break 语句会立即退出循环,强制继续执行循环后面的语句。而 continue 语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行 var num 0; for (var i1; i < 10; i) {if (i % 5 0) {break;}num; …...
【C++】迭代器
内容来自《C Primer(第5版)》9.2.1 迭代器、9.2.3 begin和end成员、9.3.6 容器操作可能使迭代器失效、10.4.3 反向迭代器 目录 1. 迭代器 1.1 迭代器范围 1.2 使用左闭合范围蕴含的编程假定 2. begin和end成员 3. 容器操作可能使迭代器失效 3.1 编…...
数据可视化在前端中的应用
前端开发中,数据可视化是一种非常重要的技术。它可以将复杂的数据以图形化的方式展示出来,让用户更容易理解和分析数据。在前端中,VUE是一种非常流行的JavaScript框架,可以用来实现各种数据可视化效果。 首先,让我们来看看一些常见的数据可视化方式: 表格:表格是数据可…...
FFmpeg 合并视频文件没声音,不同步原因
查了不少帖子也没搞明白,可能懂的人不会遇到吧。 1 没声音是因为我几个视频文件中,有的没音轨,就是用文字生成了个视频,需要先给它加个dummy的音轨才行。 2 视频不同步是因为各个视频格式不一样,参数挺多我也不知道具…...
绕不开的“定位”
绕开“定位”这个词谈企业战略和品牌 相当于揪住头发离开地球 定位这个词,已经进入商业界的心智中去了 发明这个词的特劳特和里斯的思想有啥差异? 《定位屋》刨析的很到位 趣讲大白话:把握概念的源头,就理解对了大部分 【趣讲信息…...
《Effective Objective-C 2.0 》 阅读笔记 item12
第12条:理解消息转发机制 1. 消息转发机制 当对象接收到无法解读的消息后,就会启动“消息转发”机制,开发者可经由此过程告诉对象应该如何处理未知消息。 消息转发分为两大阶段 第一阶段:先征询接收者所属的类,看其…...
云原生计算能消除技术债务吗?
云原生计算可以将行业领域驱动的设计、GitOps和其他现代软件最佳实践汇总起来,如果企业实施得当,可以减少技术债务。 云原生计算是企业IT的一种新范式,它涉及现代技术的方方面面,从应用程序开发到软件架构,再到保持一…...
9. 回文数
题目 给你一个整数 xxx ,如果 xxx 是一个回文整数,返回 truetruetrue ;否则,返回 falsefalsefalse 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例子 输入&am…...
[SV]SystemVerilog线程之fork...join专题
SystemVerilog线程之fork...join专题 Q:fork-join_none开辟的线程在外部任务退出后也会结束吗? A:后台线程不会结束,任何由fork开辟的线程(join、join_any、join_none),无论其外部任务ÿ…...
你看这个spring的aop它又大又宽
aop🚓AOP 分类AspectJ | 高级但是难用Spring AOP | 易用但仅支持方法aop 原理明月几时有,把酒问青天。——唐代李白《将进酒》 AOP 分类 在 Spring Boot 中,AOP 的实现主要有以下几种: 基于 AspectJ 的 AOP:这是一种基…...
设计模式-创建-单例模式
4.1.1 模式介绍 定义 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,此模式保证某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。 作用 保证一个类只有一个实例为该实例提供一个全…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
