技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > VPLC系列機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)快速入門(mén)(五)

VPLC系列機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)快速入門(mén)(五)

時(shí)間:2021-02-01 14:52:05來(lái)源:正運(yùn)動(dòng)技術(shù)

導(dǎo)語(yǔ):?

  運(yùn)動(dòng)控制

  此前,我們依次講解了軟硬件介紹及計(jì)數(shù)實(shí)例、相機(jī)的基本使用、基于形狀匹配的視覺(jué)定位以及BLOB有無(wú)檢測(cè)等。

  今天,正運(yùn)動(dòng)技術(shù)為大家分享一下VPLC系列機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)快速入門(mén)(五),和大家一起分享機(jī)器視覺(jué)常用的檢測(cè)功能---測(cè)量尺寸。

  機(jī)器視覺(jué)常用的檢測(cè)功能“測(cè)量尺寸”視頻教程:            視頻教程:    VPLC系列機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)快速入門(mén)(五)》

  

  運(yùn)動(dòng)控制

 

  測(cè)量尺寸:在機(jī)器視覺(jué)中常用的測(cè)量尺寸的原理就是使用兩個(gè)直線測(cè)量器,分別檢測(cè)出產(chǎn)品兩條尺寸邊緣的點(diǎn)擬合成直線后取兩條直線的距離。

  尺寸測(cè)量本質(zhì)是基于邊緣檢測(cè)的測(cè)量,它需要先檢測(cè)出亮暗過(guò)渡滿足一定閾值的邊緣點(diǎn),然后再提取邊緣點(diǎn)數(shù)據(jù)進(jìn)行處理計(jì)算后輸出最終的結(jié)果。

               測(cè)量尺寸特點(diǎn)    

  1.準(zhǔn)確度高

  選擇合適的硬件選型方案可以達(dá)到很高的檢測(cè)精度。常用遠(yuǎn)心鏡頭減少畸變,增大景深,減小測(cè)量誤差。

  2.圖像干擾少

  單純的測(cè)量尺寸項(xiàng)目常用背光的打光方式,突出產(chǎn)品邊緣尺寸,過(guò)濾表面干擾因素。

  3.實(shí)現(xiàn)簡(jiǎn)單

  測(cè)量尺寸的算法是基于邊緣檢測(cè)的算法,易于實(shí)現(xiàn)。

  4.需要位置跟隨

  測(cè)量尺寸的測(cè)量器本身不具有定位功能,如果檢測(cè)產(chǎn)品位置不固定將無(wú)法確定測(cè)量器對(duì)應(yīng)的位置,此時(shí)需要依賴匹配等定位功能做位置跟隨。

               標(biāo)定    

  標(biāo)定是指將機(jī)器視覺(jué)處理的像素結(jié)果(單位:像素)轉(zhuǎn)換成現(xiàn)實(shí)中使用到的實(shí)際結(jié)果(單位:毫米),或者是將機(jī)器視覺(jué)中使用的圖像坐標(biāo)轉(zhuǎn)換成世界坐標(biāo)。

  我們?cè)趯?shí)際測(cè)量尺寸時(shí),使用的尺寸單位一般是國(guó)際標(biāo)準(zhǔn)單位如米,厘米,毫米等。因此機(jī)器視覺(jué)測(cè)量尺寸項(xiàng)目中需要將獲取到的像素尺寸轉(zhuǎn)換成實(shí)際尺寸(毫米)輸出到用戶端,供用戶直接使用。

              測(cè)量尺寸標(biāo)定方法    

  1.測(cè)量標(biāo)定

  使用已知尺寸的標(biāo)準(zhǔn)模塊如圓、小方塊、或刻度尺等,在圖像中檢測(cè)到像素尺寸后將已知實(shí)際尺寸值除以像素值即可得出像素比例值(單位:mm/pixel)。測(cè)量尺寸項(xiàng)目中常用測(cè)量標(biāo)定方法。

 

 運(yùn)動(dòng)控制

 

  2.坐標(biāo)標(biāo)定

  輸入幾組圖像坐標(biāo)(至少9組),然后再輸入圖像坐標(biāo)對(duì)應(yīng)的世界坐標(biāo),經(jīng)過(guò)公式計(jì)算得出矩陣變換系數(shù),即可實(shí)現(xiàn)將圖像坐標(biāo)轉(zhuǎn)換到實(shí)際坐標(biāo)。在測(cè)量精度要求比較高的測(cè)量尺寸項(xiàng)目可以考慮使用坐標(biāo)標(biāo)定,具體實(shí)現(xiàn)內(nèi)容我們?cè)谙乱黄谡n程再做詳細(xì)說(shuō)明。

 

 運(yùn)動(dòng)控制

 

  1.打開(kāi)ZDevelop軟件:打開(kāi)項(xiàng)目“基于形狀匹配的視覺(jué)定位”→在global_variable.bas文件中定義測(cè)量尺寸需要用到的全局變量。

  
       '----------------------------分割線-----------------------------------------

  '直線1測(cè)量參數(shù)數(shù)組,依次為中心cx、cy、w、h、angle、interp、sub_num、sub_width、filter_size、thresh、polor、select,都是圖像坐標(biāo)

  GLOBAL DIM d_meas_param1(12) 'd開(kāi)頭表示數(shù)據(jù)結(jié)構(gòu)

  '直線2測(cè)量參數(shù)數(shù)組,依次為中心cx、cy、w、h、angle、interp、sub_num、sub_width、filter_size、thresh、polor、select,都是圖像坐標(biāo)

  GLOBAL DIM d_meas_param2(12) 'd開(kāi)頭表示數(shù)據(jù)結(jié)構(gòu)

  '定義常用顏色變量,用于繪制圖形

  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)

  '創(chuàng)建模板時(shí)保存的直線1基準(zhǔn)區(qū)域位置向量1,x、y、angle

  GLOBAL DIM d_meas_base_v1(3)

  d_meas_base_v1(0) = 0

  d_meas_base_v1(1) = 0

  d_meas_base_v1(2) = 0

  ''創(chuàng)建模板時(shí)保存的直線2基準(zhǔn)區(qū)域位置向量2,x、y、angle

  GLOBAL DIM d_meas_base_v2(3)

  d_meas_base_v2(0) = 0

  d_meas_base_v2(1) = 0

  d_meas_base_v2(2) = 0

  '直線1測(cè)量結(jié)果,依次為結(jié)果點(diǎn)stx、sty、endx、endy

  GLOBAL DIM d_meas_rst1(4)

  '直線2測(cè)量結(jié)果,依次為結(jié)果點(diǎn)stx、sty、endx、endy

  GLOBAL DIM d_meas_rst2(4)

  '定義顯示在界面上的長(zhǎng)度變量

  GLOBAL DIM d_show_rst

  ''創(chuàng)建模板時(shí)保存的模板基準(zhǔn)點(diǎn),score、x、y、angle、scale

  GLOBAL DIM d_match_base_rst(5)

  global dim d_meas_param(12)

  '定義測(cè)量標(biāo)定時(shí)使用到的變量

  GLOBAL PixLength,WorldLength,CalibParam

  2.補(bǔ)充設(shè)計(jì)主界面。

 

 運(yùn)動(dòng)控制

 

  3.新建主界面按下【測(cè)量設(shè)置】按鈕時(shí)彈出的測(cè)量參數(shù)設(shè)置窗口“Set_Select”,并設(shè)計(jì)界面布局。

 

 運(yùn)動(dòng)控制

 

  4.在main.bas文件中添加主界面按下【測(cè)量設(shè)置】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

  '主界面按下測(cè)量設(shè)置按鈕時(shí)響應(yīng)的函數(shù)

  GLOBAL SUB Goto_Meas()

      HMI_SHOWWINDOW(13)

  END SUB

         ↓    

 

 運(yùn)動(dòng)控制

 

  5.在InitLocator.bas文件中初始化測(cè)量參數(shù)。

  '---------------------分割線------------------

  '初始化測(cè)量參數(shù)1

  d_meas_param1(0) = 320.0 'roi中心x

  d_meas_param1(1) = 240.0 'roi中心y

  d_meas_param1(2) = 160 'roi寬

  d_meas_param1(3) = 120.0 'roi高

  d_meas_param1(4) = 0.0 'roi角度

  d_meas_param1(5) = 1 '插值方式

  d_meas_param1(6) = 20 '子區(qū)域的個(gè)數(shù)

  d_meas_param1(7) = 5 '子區(qū)域的尺寸

  d_meas_param1(8) = 3 '濾波尺寸

  d_meas_param1(9) = 50 '閾值

  d_meas_param1(10) = 0 '極性

  d_meas_param1(11) = 0 '選擇邊緣位置

  '初始化測(cè)量參數(shù)2

  d_meas_param2(0) = 320.0 'roi中心x

  d_meas_param2(1) = 240.0 'roi中心y

  d_meas_param2(2) = 160 'roi寬

  d_meas_param2(3) = 120.0 'roi高

  d_meas_param2(4) = 0.0 'roi角度

  d_meas_param2(5) = 1 '插值方式

  d_meas_param2(6) = 20 '子區(qū)域的個(gè)數(shù)

  d_meas_param2(7) = 5 '子區(qū)域的尺寸

  d_meas_param2(8) = 3 '濾波尺寸

  d_meas_param2(9) = 50 '閾值

  d_meas_param2(10) = 0 '極性

  d_meas_param2(11) = 0 '選擇邊緣位置

  '初始化界面上顯示的結(jié)果值

  d_meas_rst1(0) = 0

  d_meas_rst1(1) = 0

  d_meas_rst1(2) = 0

  d_meas_rst1(3) = 0

  d_meas_rst2(0) = 0

  d_meas_rst2(1) = 0

  d_meas_rst2(2) = 0

  d_meas_rst2(3) = 0

  d_show_rst = 0

  '初始化標(biāo)定參數(shù)和像素比例

  CalibParam = 0

  WorldLength = 0

  PixLength = 0

  6.新建在“Set_Select”窗口界面按下【選擇測(cè)量器區(qū)域1】按鈕時(shí)彈出的“Set_Roi1”窗口,用于創(chuàng)建第一條尺寸邊緣的直線測(cè)量器并設(shè)置檢測(cè)直線的參數(shù)。

 

 運(yùn)動(dòng)控制

 

  7.在draw.bas文件中添加在“Set_Select”窗口界面按下【選擇測(cè)量器區(qū)域1】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

  '-----------------分割線-------------------------

  '測(cè)量器繪制

  DIM is_redraw

  is_redraw = 0

  DIM set_roi_open_init

  set_roi_open_init = 0

  DIM sr_mpos_x, sr_mpos_y, hit_pos

  '''''''''''''''''''''''''''''''''''

  '按下選擇測(cè)量器區(qū)域1按鈕時(shí)響應(yīng)的函數(shù)

  GLOBAL SUB btn_sel_roi1()

      ZV_LATCHCLEAR(1) '清除鎖存

      ZV_LATCHSETSIZE(1, HMI_CONTROLSIZEX(14, 1), HMI_CONTROLSIZEY(14,1)) '設(shè)置鎖存的大小

      ZV_LATCH(grabImg, 1) '顯示圖像在鎖存上

      SET_COLOR(RGB(0,255,0))

      '圖像roi轉(zhuǎn)控件roi

      is_redraw = 0

      TABLE(11, d_meas_param1(0), d_meas_param1(1))

      ZV_POSFROMIMG(1, 1, 11, 11) '圖像坐標(biāo)轉(zhuǎn)換到HMI控件坐標(biāo)

      TABLE(13) = ZV_LENFROMIMG(1, d_meas_param1(2))

      TABLE(14) = ZV_LENFROMIMG(1, d_meas_param1(3))

      TABLE(15) = d_meas_param1(4)

      HMI_SHOWWINDOW(14)

  END SUB

                  

 

 運(yùn)動(dòng)控制

 

  8.在draw.bas文件中添加Roi1根據(jù)鼠標(biāo)操作更新ROI位置的函數(shù)以及實(shí)時(shí)繪制Roi1的函數(shù)。

  '根據(jù)鼠標(biāo)操作更新Roi1的位置

  GLOBAL SUB update_roi1()

      if mouse_scan(21) = 1 then '

  掃描按下操作

          hit_pos = ZV_HMIADJRECT2(table(21), table(22), 11, -1) '只有按下時(shí)可以改變擊中位置

          ?TABLE(21),TABLE(22)

          is_redraw = 1

          endif

          if mouse_scan(21) = -1 then '

  掃描松開(kāi)操作

          if TABLE(21)<(table(11)-table(13) or="">(TABLE(11)+TABLE(13)/2) or TABLE(22)<(table(12)-table(14) or="">(TABLE(12)+TABLE(14)/2) then

              hit_pos=-1

          endif

          ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)

          ?*TABLE(11,4)

          is_redraw = 1

          endif

          if (MOUSE_state(21)) then

              ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)

              is_redraw = 1

          endif

          if (1 = is_redraw) then

              is_redraw = 0

              ZV_POSTOIMG(1, 1, 11, 31)

              d_meas_param1(0) = TABLE(31)

              d_meas_param1(1) = TABLE(32)

              d_meas_param1(2) = ZV_LENTOIMG(1, TABLE(13))

              d_meas_param1(3) = ZV_LENTOIMG(1, TABLE(14))

              d_meas_param1(4) = TABLE(15)

              '如果選擇了補(bǔ)正源,就保存roi基準(zhǔn)

              if(TABLE(110) = 1) then

                  set_base_roi()

              endif

              SET_REDRAW

          endif

  END SUB

  '設(shè)置測(cè)量區(qū)域的基準(zhǔn)roi

  GLoBAL SUB set_base_roi()

      d_meas_base_v1(0) = d_meas_param1(0)

      d_meas_base_v1(1) = d_meas_param1(1)

      d_meas_base_v1(2) = d_meas_param1(4)

      d_meas_base_v2(0) = d_meas_param2(0)

      d_meas_base_v2(1) = d_meas_param2(1)

      d_meas_base_v2(2) = d_meas_param2(4)

     END SUB

     '更新Roi1位置后實(shí)時(shí)繪制圖形

     GLOBAL SUB draw_roi1()

      SET_COLOR(C_BLUE)

      TABLE(16, d_meas_param1(6), d_meas_param1(7)) '設(shè)置子區(qū)域個(gè)數(shù)和寬度兩個(gè)參數(shù)

      ZV_HMIRECT2(11, 300)

      DRAWLINE(TABLE(300), TABLE(301), TABLE(302), TABLE(303)) '外矩形

      DRAWLINE(TABLE(302), TABLE(303), TABLE(304), TABLE(305))

      DRAWLINE(TABLE(304), TABLE(305), TABLE(306), TABLE(307))

      DRAWLINE(TABLE(306), TABLE(307), TABLE(300), TABLE(301))

      DRAWLINE(TABLE(308), TABLE(309), TABLE(310), TABLE(311)) '方向箭頭

      DRAWLINE(TABLE(312), TABLE(313), TABLE(310), TABLE(311))

      DRAWLINE(TABLE(314), TABLE(315), TABLE(310), TABLE(311))

      if (0 = TABLE(316)) then return

      SET_COLOR(C_GREEN)

      DIM idx

      for idx = 0 to TABLE(316)-1

          DRAWLINE(TABLE(317+idx*4), TABLE(318+idx*4), TABLE(319+idx*4), TABLE(320+idx*4))

      next

  END SUB

  9.在draw.bas文件中添加在“Set_Roi1”窗口界面按下【確定】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

  '設(shè)置Roi1窗口按下確定按鈕時(shí)響應(yīng)的函數(shù)

  GLOBAL SUB btn_meas_confirm1()

      HMI_CLOSEWINDOW(14)

  END SUB

         ↓    

 

 運(yùn)動(dòng)控制

 

  10.新建在“Set_Select”窗口界面按下【選擇測(cè)量器區(qū)域2】按鈕時(shí)彈出的“Set_Roi2”窗口,用于創(chuàng)建第二條尺寸邊緣的直線測(cè)量器并設(shè)置檢測(cè)直線的參數(shù)。

 

 運(yùn)動(dòng)控制

 

  11.在draw.bas文件中添加在“Set_Select”窗口界面按下【選擇測(cè)量器區(qū)域2】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

  '按下選擇測(cè)量器區(qū)域2按鈕時(shí)響應(yīng)的函數(shù)

  GLOBAL SUB btn_sel_roi2()

      ZV_LATCHCLEAR(1) '清除鎖存

      ZV_LATCHSETSIZE(1, HMI_CONTROLSIZEX(15, 1), HMI_CONTROLSIZEY(15,1)) '設(shè)置鎖存的大小

      ZV_LATCH(grabImg, 1) '顯示圖像在鎖存上

      SET_COLOR(RGB(0,255,0))

      '圖像roi坐標(biāo)轉(zhuǎn)控件roi

      is_redraw = 0

      TABLE(11, d_meas_param2(0), d_meas_param2(1))

      ZV_POSFROMIMG(1, 1, 11, 11) '圖像坐標(biāo)轉(zhuǎn)換到HMI控件坐標(biāo)

      TABLE(13) = ZV_LENFROMIMG(1, d_meas_param2(2))

      TABLE(14) = ZV_LENFROMIMG(1, d_meas_param2(3))

      TABLE(15) = d_meas_param2(4)

      HMI_SHOWWINDOW(15)

  END SUB

         ↓    

 

 運(yùn)動(dòng)控制

 

  12.在draw.bas文件中添加Roi2根據(jù)鼠標(biāo)操作更新ROI位置的函數(shù)以及實(shí)時(shí)繪制Roi1的函數(shù)。

  '根據(jù)鼠標(biāo)操作更新Roi2的位置

  GLOBAL SUB update_roi2()

      if mouse_scan(21) = 1 then '掃描按下操作

          hit_pos = ZV_HMIADJRECT2(table(21), table(22), 11, -1) '只有按下時(shí)可以改變擊中位置

          is_redraw = 1

      endif

      if mouse_scan(21) = -1 then '掃描松開(kāi)操作

          ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)

          is_redraw = 1

      endif

          if (MOUSE_state(21)) then

          ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)

          is_redraw = 1

      endif

      if (1 = is_redraw) then

          is_redraw = 0

          ZV_POSTOIMG(1, 1, 11, 31)

          d_meas_param2(0) = TABLE(31)

          d_meas_param2(1) = TABLE(32)

          d_meas_param2(2) = ZV_LENTOIMG(1, TABLE(13))

          d_meas_param2(3) = ZV_LENTOIMG(1, TABLE(14))

          d_meas_param2(4) = TABLE(15)

          '如果選擇補(bǔ)正源,就保存roi基準(zhǔn)位置

      if(TABLE(110) = 1) then

          set_base_roi()

      endif

          SET_REDRAW

      endif

  END SUB

  '更新Roi2位置后實(shí)時(shí)繪制圖形

  GLOBAL SUB draw_roi2()

      SET_COLOR(C_BLUE)

      TABLE(16, d_meas_param2(6), d_meas_param2(7)) '設(shè)置子區(qū)域個(gè)數(shù)和寬度兩個(gè)參數(shù)

      ZV_HMIRECT2(11, 300) '計(jì)算控件的矩形roi相應(yīng)的頂點(diǎn)和箭頭錨點(diǎn)

      DRAWLINE(TABLE(300), TABLE(301), TABLE(302), TABLE(303)) '外矩形

      DRAWLINE(TABLE(302), TABLE(303), TABLE(304), TABLE(305))

      DRAWLINE(TABLE(304), TABLE(305), TABLE(306), TABLE(307))

      DRAWLINE(TABLE(306), TABLE(307), TABLE(300), TABLE(301))

      DRAWLINE(TABLE(308), TABLE(309), TABLE(310), TABLE(311)) '方向箭頭

      DRAWLINE(TABLE(312), TABLE(313), TABLE(310), TABLE(311))

      DRAWLINE(TABLE(314), TABLE(315), TABLE(310), TABLE(311))

      if (0 = TABLE(316)) then return

      SET_COLOR(C_GREEN)

      DIM idx

      for idx = 0 to TABLE(316)-1

          DRAWLINE(TABLE(317+idx*4), TABLE(318+idx*4), TABLE(319+idx*4), TABLE(320+idx*4))

      next

  END SUB

  13.在draw.bas文件中添加在“Set_Roi2”窗口界面按下【確定】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

  '設(shè)置Roi2窗口按下確定按鈕時(shí)響應(yīng)的函數(shù)

  GLOBAL SUB btn_meas_confirm2()

      HMI_CLOSEWINDOW(15)

  END SUB

         ↓    

 

 運(yùn)動(dòng)控制

 

  14.新建meas.bas文件用于存放計(jì)算兩條直線的距離函數(shù)和標(biāo)定函數(shù)等測(cè)量相關(guān)函數(shù),并在文件中添加實(shí)現(xiàn)函數(shù)。

  '計(jì)算兩條直線的距離寬度

  global sub length1()

      LOCAL dist,dist1,dist2

      local dis_tmp,dst_tmp1

      '計(jì)算直線2的起始點(diǎn)到直線1之間的距離

      dist = ZV_DISTPL(d_meas_rst2(0),d_meas_rst2(1),d_meas_rst1(0),d_meas_rst1(1),d_meas_rst1(2),d_meas_rst1(3))

      '計(jì)算直線2的終點(diǎn)到直線1之間的距離

      dist1 = ZV_DISTPL(d_meas_rst2(2),d_meas_rst2(3),d_meas_rst1(0),d_meas_rst1(1),d_meas_rst1(2),d_meas_rst1(3))

      '計(jì)算直線2的中點(diǎn)位置坐標(biāo)

      dis_tmp=(d_meas_rst2(0)+d_meas_rst2(2))/2

      dst_tmp1=(d_meas_rst2(1)+d_meas_rst2(3))/2

      '計(jì)算直線2的中點(diǎn)到直線1之間的距離

      dist2 = ZV_DISTPL(dis_tmp,dst_tmp1,d_meas_rst1(0),d_meas_rst1(1),d_meas_rst1(2),d_meas_rst1(3))

      TABLE(500)=(dist+dist1+dist2)/3 '兩直線之間的距離

      PixLength=TABLE(500)

      ?TABLE(500)

  end sub

  '計(jì)算實(shí)際尺寸值

  global sub length2()

      '實(shí)際尺寸=像素尺寸*像素比例

      TABLE(501)=TABLE(500)*CalibParam

  end sub

  '計(jì)算像素比例,即實(shí)際值/像素值

  global sub calculation()

      CalibParam=WorldLength/TABLE(500)

  end sub

  15.在main.bas文件中添加“Set_Select”窗口界面按下【測(cè)試】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

  '測(cè)量設(shè)置界面按下測(cè)試按鈕時(shí)響應(yīng)的函數(shù)

  GLOBAL SUB btn_mea_test()

      '選擇補(bǔ)正源時(shí)先執(zhí)行定位檢測(cè)

      if(TABLE(110) = 1) then

          btn_loc_test()

      endif

      ZVOBJECT mr1,mr2,mr3,mr4,rst1,rst2,rst3,rst4,colorImg

      ZVOBJECT contlist, tsContlist, mat_rigid

      LOCAL show_rst

      '測(cè)量區(qū)域roi補(bǔ)正

      if(TABLE(110) = 1 AND d_is_creModel = 1) then '如果使用補(bǔ)正源已經(jīng)開(kāi)啟且模板已經(jīng)創(chuàng)建

          '計(jì)算剛性變換矩陣

          ZV_GETRIGIDVECTOR(mat_rigid, d_match_base_rst(1), d_match_base_rst(2), d_match_base_rst(3), d_match_rst(1), d_match_rst(2), d_match_rst(3))

          '使用變換矩陣mat_rigid對(duì)輸入Roi1基準(zhǔn)向量進(jìn)行補(bǔ)正,補(bǔ)正后的向量存入開(kāi)始索引為0的TABLE中

          ZV_VECTORCORRECT(mat_rigid, d_meas_base_v1(0), d_meas_base_v1(1),d_meas_base_v1(2), 0)

          d_meas_param1(0) = TABLE(0)

          d_meas_param1(1) = TABLE(1)

          d_meas_param1(4) = TABLE(2)

          '使用變換矩陣mat_rigid對(duì)輸入Roi2基準(zhǔn)向量進(jìn)行補(bǔ)正,補(bǔ)正后的向量存入開(kāi)始索引為0的TABLE中

          ZV_VECTORCORRECT(mat_rigid, d_meas_base_v2(0), d_meas_base_v2(1),d_meas_base_v2(2), 0)

          d_meas_param2(0) = TABLE(0)

          d_meas_param2(1) = TABLE(1)

          d_meas_param2(4) = TABLE(2)

  endif

  '測(cè)量區(qū)域1

  '生成直線1測(cè)量的旋轉(zhuǎn)區(qū)域

  ZV_MRGENLINE(mr1, d_meas_param1(0), d_meas_param1(1), d_meas_param1(2), d_meas_param1(3), d_meas_param1(4), 1, d_meas_param1(6), d_meas_param1(7))

  '設(shè)置直線1的檢測(cè)參數(shù),包括濾波器尺寸,閾值,邊緣極性,邊緣位置

  ZV_MRSETADV(mr1, d_meas_param1(8), d_meas_param1(9), d_meas_param1(10), d_meas_param1(11))

  '測(cè)量區(qū)域2

  '生成直線2測(cè)量的旋轉(zhuǎn)區(qū)域

  ZV_MRGENLINE(mr2, d_meas_param2(0), d_meas_param2(1), d_meas_param2(2), d_meas_param2(3), d_meas_param2(4), 1, d_meas_param2(6), d_meas_param2(7))

  '設(shè)置直線2的檢測(cè)參數(shù),包括濾波器尺寸,閾值,邊緣極性,邊緣位置

  ZV_MRSETADV(mr2, d_meas_param2(8), d_meas_param2(9), d_meas_param2(10), d_meas_param2(11))

  '將矩形測(cè)量區(qū)域測(cè)量到的目標(biāo)直線1端點(diǎn)存儲(chǔ)到起始索引為61的TABLE

  ZV_MRLINE(mr1, grabImg, rst1, 61)

  d_meas_rst1(0) = TABLE(61)

  d_meas_rst1(1) = TABLE(62)

  d_meas_rst1(2) = TABLE(63)

  d_meas_rst1(3) = TABLE(64)

  '將矩形測(cè)量區(qū)域測(cè)量到的目標(biāo)直線2端點(diǎn)存儲(chǔ)到起始索引為71的TABLE

  ZV_MRLINE(mr2, grabImg, rst2, 71)

  ZV_MATINFO(rst2, 0) 'table(0)作為臨時(shí)變量

  d_meas_rst2(0) = TABLE(71)

  d_meas_rst2(1) = TABLE(72)

  d_meas_rst2(2) = TABLE(73)

  d_meas_rst2(3) = TABLE(74)

  '計(jì)算兩條直線的距離寬度

  length1()

  d_show_rst=TABLE(500)

  if(CalibParam>0) then

          '計(jì)算實(shí)際長(zhǎng)度

          length2()

      d_show_rst=TABLE(501)

      endif

      '繪制結(jié)果線

      ZV_GRAYTORGB(grabImg, colorImg)

      ZV_LINE(colorImg, TABLE(61), TABLE(62), TABLE(63), TABLE(64), C_GREEN)

      ZV_LINE(colorImg, TABLE(65), TABLE(66), TABLE(67), TABLE(68), C_GREEN)

      ZV_LINE(colorImg, TABLE(71), TABLE(72), TABLE(73), TABLE(74), C_GREEN)

      ZV_LINE(colorImg, TABLE(75), TABLE(76), TABLE(77), TABLE(78), C_GREEN)

      ZV_LATCH(colorImg,0)

  END SUB

         ↓    

 

 運(yùn)動(dòng)控制

 

  在main.bas文件中添加“Set_Select”窗口界面按下【測(cè)試】按鈕時(shí)仿真的效果圖。

 

 運(yùn)動(dòng)控制

 

  測(cè)試按鈕效果圖

  16.設(shè)置“Set_Select”窗口界面【計(jì)算】按鈕關(guān)聯(lián)動(dòng)作函數(shù)名。

 

 運(yùn)動(dòng)控制

 

  在“Set_Select”窗口界面按下【計(jì)算】按鈕時(shí)仿真的效果圖。

 

 運(yùn)動(dòng)控制

 

  計(jì)算按鈕效果圖

  17.在“Set_Select”窗口界面中關(guān)聯(lián)界面控件變量。

 

 運(yùn)動(dòng)控制

 

  18.在main.bas文件中添加“Set_Select”窗口界面按下【返回主界面】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

  '按下返回主界面按鈕時(shí)響應(yīng)的函數(shù)

  GLOBAL SUB Goto_Main()

      HMI_CLOSEWINDOW(13)

  END SUB

         ↓    

 運(yùn)動(dòng)控制

 

  19.在main.bas文件中修改主界面按下【單次執(zhí)行】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

  '主界面按下單次執(zhí)行按鈕時(shí)響應(yīng)的函數(shù)

  GLOBAL SUB btn_test()

      '采集一幀圖像

      btn_grab

      '執(zhí)行測(cè)量測(cè)試部分代碼

          btn_mea_test()

  END SUB

         ↓    

 運(yùn)動(dòng)控制

 

  在主界面按下【單次執(zhí)行】按鈕時(shí)仿真的效果圖。

 

 運(yùn)動(dòng)控制

 

  20.在main.bas文件中修改主界面按下【連續(xù)執(zhí)行】按鈕時(shí)響應(yīng)的函數(shù)中執(zhí)行的任務(wù)函數(shù)內(nèi)容。

  main_task:

      while(1)

          if (0 = run_switch) then

              exit while

          endif

          '以下執(zhí)行相關(guān)定位操作

          btn_grab()

          btn_mea_test()

      wend

  END

  在主界面按下【連續(xù)執(zhí)行】按鈕時(shí)仿真仿真執(zhí)行的效果圖。

 

 運(yùn)動(dòng)控制

 

  連續(xù)運(yùn)行效果圖1

 

 運(yùn)動(dòng)控制

 

  連續(xù)運(yùn)行效果圖2

  在不同位置以不同角度放置時(shí),均能檢測(cè)到對(duì)應(yīng)尺寸。

  本次,正運(yùn)動(dòng)技術(shù)VPLC系列機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)快速入門(mén)(五)——尺寸測(cè)量就分享到這里,更多精彩內(nèi)容請(qǐng)關(guān)注“            正運(yùn)動(dòng)小助手    ”公眾號(hào)。

  本文由            正運(yùn)動(dòng)技術(shù)    原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來(lái)源。

 

 運(yùn)動(dòng)控制

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:工業(yè)物聯(lián)網(wǎng)領(lǐng)域優(yōu)質(zhì)數(shù)據(jù)采集模塊

下一篇:【易能】}變頻器維護(hù)最貼心的...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.wangxinlc.cn)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)