小杨说事-基于海康机器视觉算法平台的对位贴合项目我的理解

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

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

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

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

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

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

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

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

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

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

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

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

这里咱尝试改变映射板在相机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点是不同的等等问题,有兴趣想探讨或者以为咱说的不对的,能够相互探讨。

好了,今天的小杨说事就到这里,第一次写博客,主要是为了攒积分呀,各位看官记得打赏奥,写的很差请见谅。