陳塏格,張鳳濤,毛怡琳,李天益,王禹龍
(長(zhǎng)春師范大學(xué) 工程學(xué)院,吉林 長(zhǎng)春 130032)
工業(yè)技術(shù)的不斷升級(jí)使得越來越多的人力被機(jī)器所替代。而機(jī)械制造自動(dòng)化進(jìn)程中,其自動(dòng)化技術(shù)不斷改良,甚至和許多新型工業(yè)技術(shù)融合,衍生出更高端的超越人力所及的機(jī)器操作能力,這其中就包括機(jī)器視覺技術(shù)[1]。機(jī)器視覺技術(shù)是模擬人類的視覺過程、具有感覺環(huán)境的能力和人類視覺功能的技術(shù),它主要通過OpenMV傳感器從客觀事物的圖像中提取信息,進(jìn)行處理得出結(jié)果后,最終應(yīng)用到實(shí)際運(yùn)行中。相較于人眼來說,機(jī)器視覺技術(shù)最大的優(yōu)勢(shì)是速度快、信息量大、功能多。隨著科技的進(jìn)步和我國(guó)經(jīng)濟(jì)的快速提升,機(jī)器人領(lǐng)域的科研也一次次有了新的進(jìn)步,機(jī)器人的分揀技術(shù)一直深受專業(yè)人士的關(guān)注,機(jī)器人和系件特性也在與時(shí)俱進(jìn)[2],人們對(duì)機(jī)器視覺技術(shù)的應(yīng)用越來越廣泛,基于機(jī)器視覺技術(shù)的智能堆碼起重機(jī)器人便是其中之一。本文著重描述智能堆碼起重機(jī)器人中的機(jī)器視覺部分。
智能堆碼起重機(jī)器人主要完成某品牌箱裝牛奶的分類、抓取、起重、搬運(yùn)和碼垛等任務(wù),奶箱上貼有不同形狀和顏色的標(biāo)識(shí),作為分類的重要標(biāo)志,同時(shí)也對(duì)應(yīng)著碼垛的位置信息,如表1所示。在整個(gè)控制系統(tǒng)中,視覺傳感器作為智能堆碼起重機(jī)器人的“眼睛”,安裝在機(jī)器人前進(jìn)的方向并始終俯視地面。它將完成兩個(gè)重要任務(wù):①對(duì)奶箱上標(biāo)識(shí)的顏色和形狀進(jìn)行識(shí)別,用以確定該箱牛奶的類別;②在機(jī)器人搬運(yùn)過程中,對(duì)地面標(biāo)識(shí)線進(jìn)行偏差計(jì)算,并反饋給機(jī)器人,使機(jī)器人完成尋跡功能。
視覺傳感器選擇星瞳科技的OpenMV4模塊,該模塊集成了STM32F7系列的單片機(jī),運(yùn)行速度快,并且使用Python語言進(jìn)行編程,使得機(jī)器視覺算法的編程變得更容易,同時(shí)OpenMV提供了專用的IDE編程環(huán)境,具有自動(dòng)提示、代碼高亮、圖像跟蹤、debug終端等工具,使得編程更加便利。在OpenMV上可以完成各種圖像的識(shí)別算法,并且可通過編程實(shí)現(xiàn)串口輸出結(jié)果。機(jī)器人控制系統(tǒng)由Arduino MEGA2560作為控制核心,使用串口與OpenMV進(jìn)行通信即可獲得視覺傳感器反饋的信息。OpenMV4作為從機(jī)接收主機(jī)發(fā)出的兩種指令:形狀顏色識(shí)別(用數(shù)字1表示)和位置偏差指令(用數(shù)字2表示),其工作流程如圖1所示。
表1 不同標(biāo)識(shí)顏色、形狀、牛奶分類與碼垛位置的對(duì)應(yīng)關(guān)系
Arduino MEGA2560作為主機(jī)向OpenMV發(fā)出兩種指令:形狀顏色識(shí)別和位置偏差指令。OpenMV接收到不同的指令,按照要求進(jìn)行圖像識(shí)別并反饋對(duì)應(yīng)的信息。
OpenMV作為從機(jī),接收指令時(shí)對(duì)應(yīng)的Python代碼如下:
uart = UART(3, 115200)
a=0
b=0
while(True):
clock.tick()
if uart.any():
a=uart.readline().decode().strip()
b=int(a)
if b==1:……#此處完成顏色和形狀識(shí)別
if b==2:……#此處完成距離偏差和角度偏差計(jì)算
圖1 視覺傳感器的工作流程
在識(shí)別過程中先通過圓形和方形識(shí)別標(biāo)識(shí)的形狀,再確定標(biāo)識(shí)的顏色。其中圓形和方形可直接調(diào)用系統(tǒng)函數(shù)find_circles()和find_rects()。
根據(jù)像素統(tǒng)計(jì)函數(shù)get_statistics()的結(jié)果中的l_mode()、a_mode()、b_mode()的范圍可確定顏色。注意,該范圍不是固定的,與環(huán)境光線、色塊亮度都有關(guān)系,需要經(jīng)過實(shí)驗(yàn)獲得。
以下為識(shí)別圓形的Python代碼,方形的識(shí)別與其類似,不再給出。
sensor.set_framesize(sensor.QQVGA)
img = sensor.snapshot().lens_corr(1.8)
for c in img.find_circles(threshold = 3500, x_margin = 10, y_margin = 10, r_margin = 10, r_min = 2, r_max = 100, r_step = 2):
area = (c.x()-c.r(), c.y()-c.r(), 2*c.r(), 2*c.r())
statistics = img.get_statistics(roi=area)
if 0 img.draw_circle(c.x(), c.y(), c.r(), color = (0, 255, 0)) print(“紅色圓形”) else: if 0 img.draw_circle(c.x(), c.y(), c.r(), color = (0, 255, 0)) print(“藍(lán)色圓形”) 三角形先識(shí)別標(biāo)識(shí)的顏色,再確定標(biāo)識(shí)的形狀,調(diào)用的是系統(tǒng)函數(shù)find_blobs(),找到的色塊面積與其外接矩形面積的比值為1/2,即可確定其為三角形。實(shí)際使用過程中是圍繞1/2的一個(gè)數(shù)字范圍。以下為識(shí)別三角形的Python代碼: for blob in img.find_blobs(R_thresholds,pixels_threshold=200,roi = (0,0,320,240),area_threshold=200): if blob.density()>0.25 and blob.density()<0.6: print("紅色三角型") else: #占空比太小的都是干擾可忽略。 print("no dectedtion") for blob in img.find_blobs(B_thresholds,pixels_threshold=200,roi = (0,0,320,240),area_threshold=200): if blob.density()>0.25 and blob.density()<0.6: print("藍(lán)色三角型 ") else: #占空比太小的都是干擾可忽略。 print("no dectedtion") OpenMV作為尋跡傳感器,需要先識(shí)別出行走路徑上的引導(dǎo)線,然后再調(diào)用rho()函數(shù),通過abs(line.rho())-imgTrack.width()/2計(jì)算距離偏差。調(diào)用theta()函數(shù)可直接獲得引導(dǎo)線的偏差角,但theta()函數(shù)獲得的角度范圍為0~180°,需減掉90°,映射到-90°~90°之間。以下為偏差計(jì)算的Python代碼: sensor.set_framesize(sensor.HQQVGA) CheckForm = 0 imgTrack = sensor.snapshot().binary([THRESHOLD]) line = imgTrack.get_regression([(100,100)], robust = True) if (line): rho_err = abs(line.rho())-imgTrack.width()/2 if line.theta()>90: theta_err = line.theta()-180 else: theta_err = line.theta() imgTrack.draw_line(line.line(), color = 127) if line.magnitude()>8: print(rho_err,theta_err) 本文中每個(gè)機(jī)器人的視覺傳感器是相互獨(dú)立的。從生產(chǎn)車間的實(shí)際情況出發(fā),當(dāng)生產(chǎn)線的數(shù)量過多或生產(chǎn)速度提高時(shí),一臺(tái)機(jī)器人搬運(yùn)貨物會(huì)顯得力不從心[3],這時(shí)需要增加機(jī)器人的數(shù)量來解決問題。為每個(gè)機(jī)器人分配一條引導(dǎo)線,可有效規(guī)避與其他機(jī)器人發(fā)生碰撞。同時(shí),對(duì)于不同種類的箱裝牛奶,機(jī)器人可完成自動(dòng)掃描,并準(zhǔn)確地將其投遞至相應(yīng)位置,從而解放勞動(dòng)力,提高貨物分揀效率[4]。隨著科技的進(jìn)步,視覺技術(shù)機(jī)器人因其防錯(cuò)性、安全性、低成本、高效率等優(yōu)勢(shì)將被廣泛應(yīng)用。本文將為其他以O(shè)penMV作為視覺傳感器應(yīng)用的設(shè)計(jì)方案提供一定的參考。5 尋跡算法
6 結(jié)束語