李國洪 喬 澤
(天津理工大學(xué)電氣工程與自動化學(xué)院,天津 300382)
隨著工業(yè)自動化程度的不斷提高,在焊接過程中盡量以機(jī)器代替人的工作可以大大地提高焊接生產(chǎn)效率,而且產(chǎn)品精度與合格率也可以得到一定的保障。文獻(xiàn)[1]提到在實(shí)現(xiàn)整個焊接自動化的過程中,主要分為焊縫識別、焊縫圖像提取、焊縫圖像處理以及焊縫跟蹤幾個部分,其中焊縫識別與焊縫圖像提取作為焊接自動化要解決的第一個步驟,同時(shí)也是實(shí)現(xiàn)自動化焊接最關(guān)鍵的技術(shù)之一。傳統(tǒng)的焊縫測量方式主要有超聲波測距、激光測距和雷達(dá)測距等等,但這些測量方式往往存在設(shè)備成本高、操作程序復(fù)雜等缺點(diǎn),更不適于被移植到低功耗、低成本的嵌入式設(shè)備中。而隨著近年來圖像處理技術(shù)與計(jì)算機(jī)視覺技術(shù)的蓬勃發(fā)展,視覺測距技術(shù)在各行各業(yè)取得了優(yōu)異的成績和表現(xiàn),比如常見的單目視覺測距系統(tǒng)在硬件上僅僅需要增加1個圖像傳感器就能代替完成以往復(fù)雜系統(tǒng)才能完成的測量工作。如在文獻(xiàn)[2]提出了基于圖像處理的車輛焊縫間隙檢測系統(tǒng),可實(shí)現(xiàn)對車輛焊縫間隙的精準(zhǔn)檢測。
本文考慮到在一些環(huán)境較為惡劣,不適于人參與的焊接環(huán)境中,可以利用嵌入式微控制器進(jìn)行圖像采集與處理,實(shí)現(xiàn)焊縫寬度的非接觸式測量,從而進(jìn)一步控制焊接過程中電機(jī)的啟?;驁?zhí)行下一步的焊接動作。另外,因?yàn)镾TM32微控制器以其低成本,低功耗與高性能等優(yōu)點(diǎn)[3-5],近年來被用在了人工智能、物聯(lián)網(wǎng)、自動駕駛和工業(yè)自動化等各個行業(yè),同時(shí)因?yàn)槠漭^快的時(shí)鐘頻率,可實(shí)現(xiàn)較為復(fù)雜的圖像處理算法,所以也多被應(yīng)用于嵌入式圖像處理設(shè)備中。故本文利用STM32設(shè)計(jì)了一種焊縫寬度測量系統(tǒng),具有低功耗、低成本以及可輕松移植安裝到其他焊接設(shè)備中等優(yōu)點(diǎn)。
采用意法半導(dǎo)體公司的STM32F407ZGT6芯片作為系統(tǒng)的主MCU。外部連接OV2640攝像頭負(fù)責(zé)采集焊縫圖像,擴(kuò)展SRAM負(fù)責(zé)存儲圖像數(shù)據(jù),LCD液晶顯示負(fù)責(zé)圖像的輸出,按鍵可控制顯示屏輸出原始RGB彩色圖或圖像處理后的二值圖。串口模塊負(fù)責(zé)圖像幀率,焊縫中像素點(diǎn)及計(jì)算以后焊縫實(shí)際寬度等數(shù)據(jù)的輸出。系統(tǒng)整體框圖如圖1所示。
圖 1 系統(tǒng)整體框圖
MCU是整個系統(tǒng)運(yùn)行的核心,MCU一方面要與數(shù)字?jǐn)z像頭OV2640、液晶屏和串口等外圍模塊進(jìn)行通信,完成對其內(nèi)部寄存器的讀寫與配置,使其能夠正常工作。另一方面還要運(yùn)行之后的圖像處理子程序?qū)z像頭采集到的原始圖片進(jìn)行處理。所以在選擇MCU時(shí),在考慮較低的價(jià)格和滿足低功耗要求之外,還要確保其運(yùn)行速度要足夠快。本設(shè)計(jì)采用的STM32F407ZGT6是基于ARMCortex-M4內(nèi)核的32位高性能處理器[6],該芯片包括USART、SPI、IIC、CAN和DCMI等豐富的通信接口。并且?guī)缀趺糠N通信接口都有獨(dú)立的硬件資源與之對應(yīng),可以通過庫函數(shù)輕松配置實(shí)現(xiàn)MCU與各種從器件之間的通信,十分簡單方便。另外作為一種多用途的單片機(jī),STM32F407ZGT6主頻可以達(dá)到168 MHz,足可以運(yùn)行圖像處理程序與簡單的圖形界面,很好地實(shí)現(xiàn)人機(jī)交互。
OV2640 是一款CMOS 類型的數(shù)字圖像傳感器,由豪威科技(OmniVision)公司生產(chǎn)。該傳感器具有體積小、工作電壓低的特點(diǎn),最大可輸出200萬像素的圖像。并且還支持輸出 RGB565 和JPEG 等格式的圖像數(shù)據(jù),可以通過伽瑪曲線、白平衡、飽和度和色度等方式來修改捕獲的圖像,進(jìn)行一些簡單的補(bǔ)償處理,所以該攝像頭多被應(yīng)用于低功耗嵌入式設(shè)備中同步時(shí)鐘信號等,主要通過與STM32的DCMI外設(shè)連接,通過VGA時(shí)序獲取圖像數(shù)據(jù)流。
為了能實(shí)時(shí)觀察焊接過程中兩焊接件的位置情況,進(jìn)一步提高系統(tǒng)的可靠性,所以選擇將攝像頭采集到的圖像通過LCD液晶顯示屏實(shí)時(shí)展現(xiàn)出來。液晶顯示采用1塊2.8寸大小且分辨率為320×240的TFT液晶屏,因?yàn)镾TM32F407ZGT6內(nèi)部沒有內(nèi)置LCD控制器,所以該液晶屏自帶了驅(qū)動芯片,最終通過STM32的FSMC接口模擬出8 080時(shí)序進(jìn)行驅(qū)動。
STM32F407ZGT6內(nèi)部有192 K字節(jié)的SRAM,但是對于系統(tǒng)要存儲圖像并且運(yùn)行一系列的圖像處理程序是遠(yuǎn)遠(yuǎn)不夠的,所以使用FSMC接口擴(kuò)展了1個16位寬512 K容量(即1 M字節(jié))的CMOS靜態(tài)內(nèi)存芯片 IS62WV51216。使用 FSMC 的 BANK1區(qū)域 3 來控制 IS62WV51216,根據(jù) Cortex-M4 內(nèi)核的存儲空間分布以及FSMC的地址映射關(guān)系,可知IS62WV51216的內(nèi)存首地址被分配在了0x68000000處。在之后的軟件設(shè)計(jì)時(shí),可以利用C語言中指針的方式將圖片存儲在外部SRAM中。外部擴(kuò)展SRAM電路如圖3所示
圖 3 外部 SRAM 電路
系統(tǒng)采用STM32作為主要的控制芯片,keil5作為程序的編譯環(huán)境,編程語言采用C語言,使程序具有較高的可移植性與運(yùn)行效率。系統(tǒng)初始化主要包括OV2640的初始化程序設(shè)計(jì),擴(kuò)展外部SRAM的程序設(shè)計(jì),按鍵與LCD顯示屏的驅(qū)動設(shè)計(jì)。另外在之后的圖像處理程序中定義了大量的局部變量,所以需要程序設(shè)計(jì)之前在STM32 官方提供的標(biāo)準(zhǔn)固件庫中找到啟動文件startup_stm32f40_41xxx.s,并在啟動文件中將整個程序的棧空間放大到至少20 K,否則會導(dǎo)致程序運(yùn)行不正常或程序跑飛。系統(tǒng)軟件設(shè)計(jì)的整體流程如圖4。
圖 4 系統(tǒng)軟件設(shè)計(jì)流程圖
STM32F4系列的單片機(jī)為驅(qū)動數(shù)字?jǐn)z像頭設(shè)計(jì)的外設(shè)接口即 DCMI(digital camera interface),是1個同步并行接口。設(shè)計(jì)輸出圖像格式為RGB565,圖像分辨率為320×240,而且數(shù)據(jù)寬度為8位。所以1個像素點(diǎn)數(shù)據(jù)所占的內(nèi)存空間大小為2個字節(jié),儲存這樣1幀完整的圖像需要的內(nèi)存空間大小為320×240×2=153 600(字節(jié)),而 STM32F407ZGT6內(nèi)部只有192 K字節(jié)的SRAM,加之程序中還要定義一些全局變量,所以將圖像直接存儲在內(nèi)部SRAM是不現(xiàn)實(shí)的。但若直接將圖片的緩沖數(shù)組定義在擴(kuò)展的外部SRAM中,經(jīng)測試,由于主控芯片對外部SRAM的訪問速度遠(yuǎn)小于DCMI采用DMA傳輸方式時(shí)的讀寫速度,所以會導(dǎo)致圖像數(shù)據(jù)的丟失與LCD液晶顯示畫面的失真。所以最終采用DMA(直接存儲區(qū)訪問)的雙緩沖機(jī)制,在內(nèi)部SRAM中定義2個大小適中的接收數(shù)組,交替接收DCMI接收到的圖像數(shù)據(jù),之后再依次存儲到外部SRAM中。
若將1幀分辨率為XSIZE*YSIZE圖片的左上角作為坐標(biāo)原點(diǎn),設(shè)其圖像數(shù)據(jù)為image_in,那么距離圖像原點(diǎn)在水平方向上為i,垂直方向上為j(即(i,j)處)位置的像素值,可以用數(shù)組image_in[j][i]或指針*(image_in+j*XSIZE+i)來表示[7]。考慮到數(shù)據(jù)指針具有動態(tài)分配內(nèi)存的優(yōu)點(diǎn),所以使用第二種方式來表示圖像,充分利用內(nèi)存空間。將彩色圖進(jìn)行灰度化處理采用移位算法[8-9],具體公式為
式中:Gray為灰度值;“R”“G”“B”分別為RGB565圖像數(shù)據(jù)中紅、綠、藍(lán)顏色的分量。
圖像二值化的過程即選取合適的閾值,將灰度圖的像素值僅劃分為0或255,所以過程中最重要的就是閾值的選取[10]。在數(shù)字圖像處理時(shí)針對閾值選取的常見方法有雙峰法,Otsu法(大津法),迭代法等,例如文獻(xiàn)[11]中提出利用改進(jìn)的大津算法對地鐵隧道裂縫圖像進(jìn)行二值化。文獻(xiàn)[12]則在焊縫圖像分割中通過重復(fù)使用迭代法來獲得較為理想的圖像分割效果。本文考慮到迭代法原理簡單,代碼容易實(shí)現(xiàn),且在焊縫圖像中可以取得良好的分割效果,所以最終采取迭代法獲取圖像二值化的最佳閾值,使用迭代法自動選取圖像二值化閾值的流程如圖5。
圖 5 迭代法自動選取閾值流程圖
由于大多數(shù)情況下,焊接現(xiàn)場的環(huán)境都十分惡劣與復(fù)雜,充滿了大量的噪聲污染,給圖像的采集與后續(xù)的處理造成了很大的困難與干擾。不但影響焊縫的目標(biāo)提取,而且會干擾焊縫間像素點(diǎn)的統(tǒng)計(jì)結(jié)果從而使最終的焊縫寬度測量不準(zhǔn)確。所以在圖像處理過程中加入圖像降噪以及濾波算法一方面可以使圖像分割更加細(xì)節(jié)化;另一方面可以提高系統(tǒng)的精度與可靠性,減少或消除噪聲形成的系統(tǒng)誤差。文獻(xiàn)[13]提出了幾種常見的濾波方法對圖像進(jìn)行去噪處理,如高斯濾波、均值濾波、中值濾波和形態(tài)學(xué)濾波器濾波等。文獻(xiàn)[14]提出了一種自適應(yīng)尺寸的中值濾波算法。經(jīng)測試,與傳統(tǒng)中值濾波算法相比較,采用該算法不僅能夠很好地去除圖像噪聲,而且能使焊接件與焊縫邊界更加清晰順滑。
假設(shè)實(shí)際焊接場景為:焊接過程中鋼板1位置固定不動,由鋼板2緩慢靠近鋼板1。則為了方便實(shí)時(shí)統(tǒng)計(jì)兩鋼板間的像素點(diǎn)個數(shù),需要對鋼板1進(jìn)行區(qū)域標(biāo)記。利用文獻(xiàn)[15]中提到的區(qū)域生長算法對鋼板1進(jìn)行區(qū)域標(biāo)記的具體步驟為:
(1)手動選取鋼板1中任意1個或多個像素點(diǎn)作為種子點(diǎn)。
(2)設(shè)計(jì)生長準(zhǔn)則為:像素值等于255。
(3)將種子點(diǎn)作為初始生長點(diǎn),同時(shí)標(biāo)記種子點(diǎn)屬于目標(biāo)區(qū)域Q。
(4)搜索所有生長點(diǎn)八鄰域內(nèi)的像素點(diǎn),去除其中已經(jīng)屬于區(qū)域Q的像素點(diǎn),同時(shí)去除其中超過圖片邊界的像素點(diǎn)。
(5)將剩余的像素點(diǎn)與其對應(yīng)的生長點(diǎn)進(jìn)行對比,判斷是否滿足生長準(zhǔn)則,將其中滿足生長準(zhǔn)則的像素點(diǎn)與種子點(diǎn)合并,歸屬于區(qū)域Q,同時(shí)將其標(biāo)記為新的生長點(diǎn)。
(6)判斷新的生長點(diǎn)個數(shù)是否為零,若不為零則返回步驟4;若為零則結(jié)束算法,同時(shí)輸出最終合并區(qū)域Q,即目標(biāo)區(qū)域。并將目標(biāo)區(qū)域像素值改為27(可取其他數(shù)值)。
圖像經(jīng)二值化和區(qū)域標(biāo)記后各區(qū)域像素的灰度值如圖6和圖7。
圖 6 二值化后各區(qū)域像素的灰度值
圖 7 區(qū)域標(biāo)記后各區(qū)域像素的灰度值
可見經(jīng)圖像濾波和區(qū)域標(biāo)記后,兩鋼板、焊縫和背景區(qū)域的像素值被很好地分割開來。所以焊縫間的像素點(diǎn)個數(shù)可以通過不同區(qū)域邊界上像素值發(fā)生跳變這一特點(diǎn)被方便地統(tǒng)計(jì)出來,最后再根據(jù)固定焦距下測得的單個像素點(diǎn)的實(shí)際尺寸K便可以求得實(shí)際的焊縫寬度,參見文獻(xiàn)[16]中對混凝土表面裂縫寬度的計(jì)算。
本文具體做法為:在程序中定義2個初始值為0的變量U、V。在遍歷1幀圖像所有像素點(diǎn)的過程中,選定任意的一行,若圖像的數(shù)據(jù)指針*(image_in+j*XSIZE+i)發(fā)生圖7所示跳變,即記錄當(dāng)時(shí)的橫坐標(biāo)分別作為焊縫的左右邊緣點(diǎn)并對應(yīng)賦值給U和V。當(dāng)V的值不等于0時(shí),焊縫間的像素點(diǎn)個數(shù)W=V-U。多次統(tǒng)計(jì)不同位置焊縫間像素點(diǎn)個數(shù)W1,W2,··,Wn,然后進(jìn)行排序找到焊縫間的最大寬度Wmax[17]。然后再根據(jù)固定焦距下測得的單個像素點(diǎn)的實(shí)際尺寸K,從而計(jì)算出兩塊鋼板之間的實(shí)際最大焊縫寬度L=KWmax。
當(dāng)V的值等于0時(shí),鋼板1與鋼板2都被區(qū)域標(biāo)記算法標(biāo)記為“27”,此時(shí)兩鋼板之間無縫隙,此時(shí)可在程序中發(fā)出后續(xù)的焊接指令。
將兩塊鋼板放置在攝像頭的視野內(nèi),固定其中一塊的位置不動,緩慢移動另一塊使二者靠近。實(shí)時(shí)觀察LCD顯示屏中二值化圖像的動態(tài)效果如圖8。統(tǒng)計(jì)串口模塊發(fā)出的焊縫間像素點(diǎn)及其對應(yīng)的焊縫最大寬度如表1。
表1 系統(tǒng)測試結(jié)果
本文以STM32F407ZGT6單片機(jī)和OV2640圖像傳感器為核心,對其內(nèi)存與其圖像的采集和存儲機(jī)制進(jìn)行了充分的考慮與測試。在此基礎(chǔ)上實(shí)現(xiàn)了焊縫圖像采集與寬度測量系統(tǒng)的設(shè)計(jì),具有成本低、功耗低及集成度高等優(yōu)點(diǎn)。能夠減少焊接過程中的人為參與,能夠滿足較高精度要求的焊接應(yīng)用場景。
圖 8 LCD 顯示