作者 | 果汁分你一半哈哈

来源 | CSDN原力计划获奖作品

都说“纸上得来终觉浅,绝知此事要躬行”,可惜咱没这条件呀,没项目咱也不能干坐着呀,那咱发挥主观能动性,咱不是学机械的么,还好还记得一点CAD的知识,今天小杨说事,咱就“纸上谈兵”,用CAD结合公司的视觉算法平台VisionMaster来说说相机映射和对位贴合的事,如果有错误的地方,还请各位自动化前辈多多指教,毕竟网上的关于这个知识太少了。

实际的生产过程中,我们常常会碰到这样的情况,机械手从工位一吸着对象到工位二进行贴合,但是工位二我们不方便执行标定,通常的做法是在工位一执行一次标定流程,然后使用两点映射或者四点映射把工位二的相机坐标映射到工位一的相机一中。说起来很轻松,咱没实战过呀,但是咱可以模拟呀,说干就干,咱开始动手吧。

如上图所示,咱们为了验证一般性,把机械手坐标系,工位一的相机1坐标系,工位二的相机2坐标系画的夸张一些,但是在CAD图上我们是通过旋转的方式来改变两个相机的坐标系和机械手坐标系的夹角的,事先是知道相机1坐标系X轴和相机2坐标系X轴和机械手坐标系X轴的夹角分别是10°和45°。当然关于单像素精度,这里是采用一比一的方式,因为现实成像比这个更复杂,为了方便描述而已,不影响咱的用户体验。

现实场景中,咱一般碰到的都是机械手末端吸盘和末端中心不共轴的情况,那这边咱就选用最通用的12点标定来求出这个旋转中心,啥,你不知道什么是不共轴,啥是旋转中心,那你out了,赶紧看看这个博主的博客,人家讲的很详细,地址如下:

https://blog.csdn.net/KayChanGEEK/article/details/73878994

看完了那咱继续,吸盘吸着带MARK点的标定板,在相机视野里面平移9次,旋转3次,当然尽量贴近实际对象所在的平面,移动范围尽量覆盖实际对象可能出现的范围。以X方向每次平移640.3044,Y方向每次平移389.3736,角度每次旋转30°,使用海康的算法平台呢,咱一般使用相对坐标系,尽量不使用绝对坐标系。咱一般是以平移的第5点作为基准哈,所以有了下图的12点的关系以及在CAD里面的坐标数据,机械手的绝对坐标是可以从机械手的示教器读出来的,相对坐标呢,都是相对第5点的坐标哈,至于像素坐标,这里咱取的是标定板上的那个圆Mark点的圆心,这个使用一个模板匹配,位置修正,圆查找工具就完事哈。

由于咱是使用的CAD模拟,那只能使用N点标定工具,手动输入啦,对应着输入就行啦,如下图:

可以看到输完执行之后,像素精度确实是1.0,由于点是完全一一对应的,所以标定平移和旋转误差都是0,实际生产中,这里是有标定误差值的。同时,这边也算出了机械手末端中心在图像中的理论像素坐标(891.371,970.815),咱回到CAD图中,把图纸的坐标系从机械手坐标系切换到相机1坐标系,看看第五点时刻,机械手的旋转中心的像素坐标是多少,没错就是下图粗红色圆圈出来的地方,查看坐标发现是一致的。

好啦,相机1标定完成之后,咱紧接着该对两个相机进行相机映射,制作一个映射板,上面做4个Mark点,这里咱采用4个圆来模拟,同样用机械手吸盘吸着映射板,在相机1视野中进行拍摄,记录当前机械手的位置,这个地方其实是以后对象每次在相机1处的拍照位,就是图中的蓝色直线交点处,然后机械手进行平移,咱这里只进行一个X方向平移,到红色直线的交点处,记录当前的机械手位置,这是以为每次对象到相机2处的,可以叫做贴合的基准位置(但是实际上是不用建立基准的,这里可以理解为以后每次在这里对对象进行偏移贴合就行,明白的人一看就明白了哈)。

注意每次采集4个Mark点的圆心坐标,在CAD里面要切换对应的坐标系,圆心点也需要对应哈,采集的坐标如下:

然后使用相机映射模块,将四和个圆心坐标对应输入进去,注意对象点和目标点的关系即可,生成相机映射文件,其实就是一个坐标系之间的变换矩阵,如下:

当然咱可以使用工具打开这个文件可以看到矩阵的参数,里面包含了坐标系变换的旋转角度信息和平移量信息:

这里咱尝试改变映射板在相机2中的X和Y的位置,发现自始至终旋转矩阵是不变的,变化的只是平移量,可见咱之前要确定机械手的两个位置的重要性,否则平移量发生变化了,要自己修正旋转矩阵的平移量呀。

那为了进一步加深理解这个映射的关系咱来看看这个映射关系表示的是啥呗,既然是把相机2中的4点映射到相机1,那么我们直接把相机2带着4个点移动到相机1处,然后来手动检验一下,如下图:

打开映射文件,看到映射矩阵如下:

CAD切换坐标系到相机1坐标系,查看平移之后的相机2坐标系的原点在相机1中的坐标如下:

关于旋转矩阵,前面我们知道两个相机坐标系分别是逆时针转10°和顺时针转45°,那么它们之间的夹角就是55°,求解余弦值和正弦值如下,和矩阵是一致的:

至此咱所有的准备工作都结束了,那咱就开始验证贴合呗:

下图是机械手吸着实际对象进行贴合过程模拟,咱用一个矩形方便描述,注意此时机械手的吸盘并没有吸到对象的中心,由于咱刚才记住了两个固定的机械手的拍照位置,那么首先要做的是吸着对象到刚才的相机1拍照位进行图像采集,建立模板,贴合点我们模拟的对象的十字线交叉点。然后在相机2的拍照位处,假设有个目标和对象是一样的,注意此时我们只需要确保对象移动到相机2的拍照点时,目标对象的角度是一样的,我们要建立一个角度基准,然后对目标建模版,也是选择矩形的中心作为贴合点,后面做映射的时候,咱就是把这个点的像素坐标映射到相机1,再加上目标的旋转角度就可以算出机械手贴合需要走到的位置。

那咱先看最简单的情况,目标不发生角度旋转,只有平移的情况:

目标位置相对于原始位置Y方向移动了439.85,然后切换坐标系读出,当前的目标矩形中心贴合点的像素坐标为:

对象还是基准状态,切换到相机1读出对象矩形中心点的像素坐标为:

和之前映射验证一样,咱把此时的目标也映射到相机1中,也就是上图中的蓝色矩形的位置,然后搭建如下图的方案,查看使用相机映射文件进行标定转换之后的像素坐标和实际的CAD测量结果进行对比:

切换到相机1坐标系,读出目标映射过来的贴合点的坐标如下:

可见理论计算和实际结果是一致的,然后咱们使用单点对位模块来计算贴合的偏移量,输入对象和目标对应的贴合点标定转换之后的坐标以及角度偏差,计算出来的贴合偏差如下:

发现和之前的假设的偏移量是一致的,那么此时咱可以在相机1的拍照位进行便宜然后再走之前相机映射的时候的固定偏移量去到相机2处进行贴合,也可以先到相机2的拍照位然后再直接走偏移量也能实现贴合。

以上模拟的是一个简单的情况,目标和对象都有角度旋转以及XY方向偏移,这个就当做作业留给各位看官们自己验证吧,反正咱自己是验证了。当然实际生产过程更加复杂,比如相机安装反了导致坐标系之间旋转了180或者90,机械手左右手坐标系的选择,实际贴合点和拍照得到mark点是不一样的等等问题,有兴趣的可以相互探讨。

https://www.toutiao.com/i6760936050291376648/

基于海康机器视觉算法平台的对位贴合项目个人理解相关推荐

  1. 基于海康机器视觉算法平台的对位贴合项目个人理解 | CSDN原力计划

    扫码参与CSDN"原力计划" 作者 | 果汁分你一半哈哈 来源 | CSDN原力计划获奖作品 都说"纸上得来终觉浅,绝知此事要躬行",可惜咱没这条件呀,没项目咱 ...

  2. 如何在LabVIEW中进行海康机器视觉算法平台VisionMaster二次开发

    目录 1.导言 庞大的NI LabVIEW软件平台 LabVIEW 平台的特点 海康机器人的视觉算法平台VisionMaster特点 如何在LabVIEW中进行海康视觉算法平台二次开发 2.方法与步骤 ...

  3. 基于海康综合管理平台web插件开发的问题

    > ## 概述 我们做视频监控开发一般就是基于后台开发语言的SDK开发,以CS形式展现,但是现在越来越多的系统都是要在web端展示视频接口,实现方式基本上分为web插件开发.API接口地接(通过 ...

  4. 基于海康SDK开发文档分析+云台控制实现+经典案例

    基于海康SDK开发文档分析+云台控制实现+经典案例 上一篇:海康威视java开发+demo运行+调用dll动态库坑 一.准备 海康的SDK下载 https://www.hikvision.com/cn ...

  5. 基于海康EhomeDemo工具排查公网部署出现的视频播放异常问题

    针对用户现场的各种异常问题,我们的技术人员在协助排查时,都会用到一些测试工具来测试和验证一些问题,比如海康的EhomeDemo工具.我们在此前的文章中也介绍过关于海康EhomeDemo工具的使用方法, ...

  6. 基于海康SDK的web系统开发

    在网上搜索了大量资料,都没有找到适合自己的.网上大部分都是对海康SDK的讲解,或者是图形化界面的运行.涉及到web开发时,也是通过WebComponents.exe进行开发,与我所需的功能均不一致,所 ...

  7. 海康监控系统行为识别服务器,基于海康视频监控系统的目标检测和跟踪

    摘要: 随着人民生活质量的迅速提高,工业生产.家居生活服务.公共场所等各个领域的正常工作都要求智能视频监控系统的协助,并且对于智能监控系统的性能要求也越来越高.所谓智能视频监控系统就是指在不需要人为帮 ...

  8. python基于海康设备SDK二次开发(一)

    最近做了个小项目,帮助一家企业做LED屏实时显示车间人员考勤信息和显示工作人数,前后选型了好几款最近后选择海康威视的门禁机DS-K1T673M,由于该款设备只是作为人员认证通过用的,没有内置人员考勤组 ...

  9. 西门子连接id_基于海创-IIoT可视化平台的西门子PLC数据采集

    海创IOT是基于图形节点和流程的快速开发平台,采用可视化编程方法,将预定义的代码块(称为"节点",Node)连接起来执行任务.连接的节点,通常是输入节点.处理节点和输出节点的组合, ...

最新文章

  1. 计算机程序的思维逻辑 (43) - 剖析TreeMap
  2. OJ在线编程----常见输入输出练习场
  3. python批量下载网页文件-Python批量下载网页图片详细教程
  4. 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )
  5. MyBatis(二)MyBatis基本流程源码分析
  6. java 面向对象个人理解
  7. VOIP,PSTN,ISDN
  8. QQ空间及邮箱验证码登录的校验方式及自动登录的解决方案
  9. 属性子集选择的基本启发方法_Java机器学习库(Java ML)(三、特征选择)
  10. 货币化物联网:实现收益
  11. 设计模式学习之---Facade(外观)模式
  12. 国内首家,携程试点每周两天居家办公反响热烈,76%的员工主动报名
  13. Linux下几种另类创建文件之方法
  14. TCP与UDP的区别
  15. 电脑的dwg文件怎么打开
  16. 客户端修改服务器的cookie,客户端与服务器cookie
  17. 【转载】钽电容封装详述
  18. flink stream 终于上local 集群 运行起来
  19. 英语魔法师之语法俱乐部 | 笔记4 | 初级句型—简单句 | Chapter3—动词时态
  20. 零售商商品管理系统——需求分析

热门文章

  1. du -sh 目录名称查看文件夹大小
  2. No compiler is provided in this environment. Perhaps you are running on a JRE rather than a jdk
  3. AI的使用场景破冰开拓商业服务
  4. 华为报告称2013年大数据将引发IT系统大变革
  5. 系统变量与环境变量的关系
  6. java将一个数字转换为数组_Java 数组
  7. spring cloud 断路器仪表盘详解
  8. 政、企、学三方视角下的智慧城市发展 | 2020中关村论坛“人工智能与城市可持续发展论坛”成功举办...
  9. python opencv 实现Reinhard颜色迁移算法
  10. 人脸识别经典算法一:特征脸方法(Eigenface)