|   此前,我们依次讲解了软硬件介绍及计数实例、相机的基本使用、基于形状匹配的视觉定位、BLOB有无检测以及测量尺寸。   本期课程,正运动技术和大家一起分享和标定有关的详细知识内容。   视频教程:《VPLC系列机器视觉运动控制一体机快速入门(六)》         机器视觉检测结果   将机器视觉处理的像素结果(单位:像素)转换成现实中使用到的实际结果(单位:毫米),或者是将机器视觉中使用的图像坐标转换成世界坐标的过程。      测量标定是使用已知尺寸的标准模块,如已知半径的小圆块、已知宽度的小方块、刻度尺等物品,在使用机器视觉检测出对应尺寸的像素值后,求出实际尺寸值和像素值的比例即像素比例,之后再将检测的像素结果乘以像素比例即可得出实际值结果。      坐标标定是指使用机器视觉获取几组图像坐标数据(至少9组),然后输入对应的几组世界坐标数据,根据公式计算出矩阵坐标转换系数,然后将检测的图像坐标结果按照这个标定系数转换成世界坐标结果。         1.测量标定   测量标定的实施方法比较简单,只需要将已知尺寸的标准块放到检测平台中,然后使用视觉输出的像素结果和已知尺寸计算得到像素比例即可。   2.坐标标定--使用标定板   标定板的特点是特征点的距离是固定且已知的。我们就可以在标定板上选择几组矩阵坐标数据,把某个点设置成坐标原点,再根据实际圆点(或棋盘格)的距离定义对应点的实际坐标,最后再使用视觉检测出对应特征点的图像坐标即可。得到图像坐标数据和世界坐标数据后就可以求出标定系数。      3.坐标标定--不使用标定板   在没有准备标定板的条件下做坐标标定需要运动机构如机械手配合。   机械手抓取产品按照指定的位置坐标(机械手坐标)走9个点位(这9个点位需要保证在相机拍照的视野范围内),每走到一个点位就使用相机获取产品特征在当前位置的图像坐标并记录图像坐标数据,依次走完9个点位即可。然后再根据获取的图像坐标数据和记录的机械手坐标进行坐标系转换,得出标定系数。   注意:在相机结构和检测平台的相对位置发生变化时需要重新标定!    
   坐标标定流程图      演示实例说明:本课程实例在《VPLC系列机器视觉运动控制一体机快速入门(三)--形状匹配》实例的基础上增加使用标定板进行坐标标定的功能,并输出标定后的产品位置。   1.打开ZDevelop软件:点击[文件]→[打开项目]→选择“基于形状匹配的视觉定位”项目。   2.修改设计主界面。      3.在global_variable.bas文件中增加定义坐标标定使用到的全局变量。
   '***********定义坐标标定相关变量*********************   '定义是否使用标定功能标志,0-不使用标定功能,1-使用标定功能   GLOBAL DIM d_use_calib   d_use_calib = 0
   '定义标定成功标志,0-标定未成功,1-标定成功   GLOBAL DIM d_calib_success   d_calib_success = 0
   '标定参数   GLOBAL ZVOBJECT ca_param
   '标定参数数组,依次为:标定类型、对比度、极性、最小面积、最大面积、世界坐标点间距   GLOBAL DIM d_ca_param(6) 'd开头表示数据结构
   '标定误差,最小误差、最大误差、平均误差   GLOBAL DIM ca_min_err,ca_max_err,ca_avg_err   ca_min_err = 0   ca_max_err = 0   ca_avg_err = 0
   '常用颜色变量   GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOW   C_RED = RGB(255, 0, 0)   C_GREEN = RGB( 0,255, 0)   C_BLUE = RGB( 0, 0,255)   C_YELLOW= RGB(255,255, 0)
   '标定矩阵   GLOBAL ZVOBJECT ca_mat   '***********结束定义坐标标定相关变量******************
   4.在InitLocator.bas文件中初始化坐标标定相关的测量参数。   '初始化坐标标定相关的变量   d_ca_param(0) = 0 '标定类型   d_ca_param(1) = 120 '对比度   d_ca_param(2) = 0 '极性   d_ca_param(3) = 80 '最小面积   d_ca_param(4) = 20000 '最大面积   d_ca_param(5) = 9 '世界坐标点间距   ca_min_err = 0 '最小误差   ca_max_err = 0 '最大误差   ca_avg_err = 0 '平均误差
   5.新建主界面按下【坐标标定】按钮时弹出的窗口界面calib,并设计界面布局。         6.在calib窗口界面中关联元件变量。         7.添加在主界面按下【坐标标定】按钮时响应的函数,并关联动作函数名。   '点击主界面坐标标定按钮时响应的函数   GLOBAL SUB btn_calib()   ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(13, 91), HMI_CONTROLSIZEY(13, 91)) '设置坐标标定窗口锁存通道0的锁存大小   ZV_LATCHCLEAR(0) '将锁存通道0清空   ZV_LATCH(grabImg, 0) '显示采集图像显示到锁存通道0中   HMI_SHOWWINDOW(13)   END SUB         8.添加在calib界面按下【提取mark点】按钮时响应的函数,并关联动作函数名。   '坐标标定界面按下提取mark点按钮时响应的函数   GLOBAL SUB btn_ca_extract()       ZVOBJECT inppts, ppts, wpts
      '提取像素坐标      ZV_CALGETSCAPTS(grabImg, inppts, d_ca_param(1), d_ca_param(2), d_ca_param(3), d_ca_param(4))      ZV_MATINFO (inppts, 400)
      DIM row,col      row = TABLE(400)      col = TABLE(401)      if(row * col = 18) then          TABLE(150) = 1 '提取mark点成功      else          TABLE(150) = 0 '提取mark点失败          return      endif
      '根据mrak点间距和像素坐标计算世界坐标      ZV_CALGETPTSMAP(inppts,ppts,wpts,d_ca_param(5))      ZV_MATINFO (ppts, 400)
      row = TABLE(400)      col = TABLE(401)      if(row * col = 18) then          TABLE(150) = 1 '提取mark点成功      else          TABLE(150) = 0 '提取mark点失败          return      endif
      '像素坐标和世界坐标放入table中      DIM i      FOR i=0 TO row-1          ZV_MATGETROW (ppts, i, col, 81 + i*col)          ZV_MATGETROW (wpts, i, col, 131 + i*col)      NEXT
      '设置用于绘制mark点的图像      ZVOBJECT color      ZV_GRAYTORGB(grabImg, color)
      '和绘制mark点的十字架      DIM j, pixNum '像素个数      pixNum = 0      FOR i=0 TO 2          FOR j=0 TO 2              ZV_MARKER(color, TABLE(81 + 2 * pixNum), TABLE(81 + 2 * pixNum + 1), 0, 40, C_GREEN)              pixNum = pixNum + 1          NEXT      NEXT
      '用文本绘制mark点的序号      FOR i=0 TO 8          ZV_TEXT (color, TOSTR(i,1,0), TABLE(81+2*i)-20, TABLE(81+2*i +1)-40, 20, C_BLUE)      NEXT
       ZV_LATCH(color, 0)   end sub
   在calib界面按下【提取mark点】按钮时仿真效果图。         9.添加在calib界面按下【标定】按钮时响应的函数,并关联动作函数名。   '坐标标定界面按下标定按钮时响应的函数   global sub btn_ca_calib()
      ZV_IMGINFO(grabImg,0)      ZV_CALCAM(ppts,wpts,ca_param,TABLE(0),TABLE(1),d_ca_param(0))      is_ca_success=1      '计算标定误差      ZV_CALERROR(ca_param, ppts, wpts, 0)      ca_min_err = TABLE(1)      ca_max_err = TABLE(2)      ca_avg_err = TABLE(0)
   end sub      在calib界面按下【标定】按钮时仿真效果图
   10.添加在calib界面按下【返回】按钮时响应的函数,并关联动作函数名。   '坐标标定界面按下返回按钮时响应的函数   global sub btn_ca_param_rtn()       HMI_CLOSEWINDOW(13)   end sub         11.修改匹配测试子函数中匹配结果输出部分的指令代码。   if(is_ca_success = 1 AND TABLE(300)) then                      ZV_GETRIGIDVECTOR(mat_rigid1, 0, 0, 0, TABLE(4), TABLE(5), TABLE(6))'计算刚性变换矩阵                      ZV_CONTAFFINE(contlist1, mat_rigid1, tsContlist1)'对轮廓或轮廓序列进行仿射变换                      ZV_CONTLIST(colorImg, tsContlist1, ZV_COLOR(0, 255, 0), 0)'在colorSubImg图像上绘制绿色的轮廓序列                      ZV_CALTRANSW(ca_param, TABLE(4),TABLE(5),4)                      d_match_rst(0) = TABLE(3)                      d_match_rst(1) = TABLE(4)                      d_match_rst(2) = TABLE(5)                      d_match_rst(3) = TABLE(6)                      d_match_rst(4) = TABLE(7)                  else                      d_match_rst(0) = TABLE(3)                      d_match_rst(1) = TABLE(4)                      d_match_rst(2) = TABLE(5)                      d_match_rst(3) = TABLE(6)                      d_match_rst(4) = TABLE(7)                      ZV_GETRIGIDVECTOR(mat_rigid1, 0, 0, 0, TABLE(4), TABLE(5), TABLE(6))'计算刚性变换矩阵                      ZV_CONTAFFINE(contlist1, mat_rigid1, tsContlist1)'对轮廓或轮廓序列进行仿射变换                      ZV_CONTLIST(colorImg, tsContlist1, ZV_COLOR(0, 255, 0), 0)'在colorSubImg图像上绘制绿色的轮廓序列                  endif         【单次执行】按钮按下时的仿真效果图         使用标定功能的检测效果图         不使用标定功能的检测效果图   本次,正运动技术VPLC系列机器视觉运动控制一体机快速入门(六)——标定功能就分享到这里,更多精彩内容请关注“正运动小助手”公众号。   本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。   正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。 
 |