蔣 璇,陳奕璇,董 浩,周志峰
(上海工程技術(shù)大學(xué)機(jī)械與汽車工程學(xué)院,上海 201620)
繪圖機(jī)器人作為科學(xué)技術(shù)與藝術(shù)相結(jié)合的產(chǎn)物,提高了手繪人員繪圖的精度和效率,然而市面上繪圖機(jī)所識別的圖紙主要來源于繪圖軟件,因此繪圖機(jī)器人多應(yīng)用在機(jī)械零部件圖紙領(lǐng)域的繪制。本文設(shè)計的繪圖機(jī)器人,能夠?qū)⑾鄼C(jī)照片通過繪圖機(jī)器人的機(jī)械手一筆一畫繪制出來,經(jīng)驗證,可以繪制日常生活中所拍攝的人像、風(fēng)景等。
此繪圖機(jī)器人系統(tǒng)主要由繪圖機(jī)硬件部分、電機(jī)控制算法、圖像轉(zhuǎn)化等3部分構(gòu)成。在研究中,本文對電機(jī)驅(qū)動算法中所用的插補(bǔ)算法進(jìn)行改進(jìn),使繪圖機(jī)運動更加平穩(wěn)。針對傳統(tǒng)繪圖機(jī)應(yīng)用領(lǐng)域窄的問題,在圖像轉(zhuǎn)化部分,本文將MATLAB 圖像提取技術(shù)用于提取照片中的輪廓,然后生成可被繪圖機(jī)器人識別的圖像。
機(jī)器人使用5 個導(dǎo)軌作為骨架,步進(jìn)電機(jī)通過同步帶控制繪圖筆在X和Y軸上的移動。X軸由步進(jìn)電機(jī)驅(qū)動,Y軸由2個具有相反轉(zhuǎn)向和相同轉(zhuǎn)速的步進(jìn)電機(jī)驅(qū)動。繪圖機(jī)器人的Z軸上固定繪圖筆,由舵機(jī)在接收到脈沖信號后向上轉(zhuǎn)動一定的角度,將繪圖筆抬起,然后通過自身的重力下落進(jìn)行繪圖。垂直抬筆設(shè)計有效減少了斜抬筆設(shè)計中落筆時猛戳或打滑的現(xiàn)象。此結(jié)構(gòu)優(yōu)勢在于機(jī)器人的機(jī)械部分可分拆和分裝,牽引電機(jī)的固定方式靈活,可安裝在任意作圖區(qū)域,繪制范圍不受限制[1]。其機(jī)械結(jié)構(gòu)如圖1所示。
圖1 機(jī)械結(jié)構(gòu)
電路設(shè)計選擇了AC 220 V 的電壓,因電機(jī)控制器所需電壓為24 V,所以,整個電路首先要連接到24 ~220 V 的電源,該電源為4個電機(jī)驅(qū)動器供電。將4個電機(jī)驅(qū)動器分別與2個Y軸步進(jìn)電機(jī)、X軸步進(jìn)電機(jī)以及Z軸舵機(jī)連接。將2個Y軸步進(jìn)電機(jī)驅(qū)動器之一的2條接線反接,以確保2個Y軸步進(jìn)電機(jī)以相反的方向旋轉(zhuǎn)并具有相同的速度。然后將1 個24 V轉(zhuǎn)12 V 的可調(diào)電源模塊連接在總控制器與220 V 轉(zhuǎn)24 V 電源之間,最后將總控制器與4個電機(jī)驅(qū)動器連接,用來控制3個步進(jìn)電機(jī)和舵機(jī)的轉(zhuǎn)動,以此達(dá)到控制X、Y軸移動和繪圖筆起落的目的。其電路設(shè)計如圖2所示。
圖2 電路設(shè)計
PC接口的處理控制主窗口包含以下部分:圖像,參數(shù)配置,軌跡跟蹤,命令存儲[2]。通過Processing 加載圖片并選擇圖片的繪制區(qū)域,在將其載入UNO 板前設(shè)置相應(yīng)的參數(shù)。UNO 板通過串行端口與Processing 連接,分析其發(fā)送的參數(shù),然后將數(shù)據(jù)傳輸?shù)讲竭M(jìn)電機(jī)驅(qū)動器上,以控制電機(jī)的轉(zhuǎn)動,最后通過轉(zhuǎn)動電機(jī)帶動X軸、Y軸和Z軸舵機(jī)的運動。
因為在控制CNC 車床的工作時,1 個脈沖當(dāng)量是刀具在坐標(biāo)軸上運動的最小單位,所以通過數(shù)據(jù)點密化可以看出刀具的移動路徑是一些微小的臺階所組成的折線。比如,要通過數(shù)控車床來加工直線或曲線時,刀具分別沿X方向和Y方向移動1個或多個單位,依次交替,抵達(dá)預(yù)定點為止,這就形成了軌跡路線。CNC 系統(tǒng)可在得到的軌跡路線上的已知點間根據(jù)一些函數(shù)通過算法計算中間點(數(shù)據(jù)點密化),這種方法即為插補(bǔ)。插補(bǔ)技術(shù)是CNC 系統(tǒng)可以實現(xiàn)發(fā)展軌跡進(jìn)行控制的基礎(chǔ),插值運算是核心系統(tǒng)軟件模塊CNC運動控制[3]。
該畫圖機(jī)就模仿了CNC 系統(tǒng),運用插補(bǔ)算法來實現(xiàn)畫筆軌跡的控制。由于傳統(tǒng)插補(bǔ)算法中對于復(fù)雜輪廓必須通過軟件將其細(xì)分成若干小段,進(jìn)行編程加工[4]。其過程通常均為直線段,這樣的轉(zhuǎn)換將產(chǎn)生一些不足之處[5]。主要體現(xiàn)在精度與數(shù)據(jù)量的取舍,如果對繪圖精度要求較高,則需要對輪廓進(jìn)一步細(xì)化,會產(chǎn)生大量離散數(shù)據(jù)。若采用大量端點數(shù)據(jù),數(shù)據(jù)傳送與存儲將對繪圖機(jī)提出更高要求[6]。通常,當(dāng)要求精度提高一倍時,相應(yīng)的則會產(chǎn)生數(shù)倍的數(shù)據(jù)。這就表明,如果為了方便傳輸和存儲而使數(shù)據(jù)量變小,就會降低曲線輪廓的精度。所以本文采用了在逐點比較法的基礎(chǔ)上改良了的半步偏差法,顧名思義就是將誤差減小到0.5個脈沖以內(nèi)。
2.2.1 半步偏差法原理
半步偏差法是基于逐點比較法的,逐點比較法的進(jìn)給方向始終是沿平面坐標(biāo)系的4個象限內(nèi)的X軸或Y軸方向。如圖3所示,P為當(dāng)前插補(bǔ)點,假設(shè)下一步是沿Y軸方向進(jìn)給,則到達(dá)E點,此時該點到直線距離的最小值為L3,但是如果這一步同時還沿X軸進(jìn)給一步,則到達(dá)C點,C點到直線距離的最小值為L2,L2<L3,所以在此,如果設(shè)定這種情況下向X軸與Y軸同時進(jìn)給 (簡稱對角線進(jìn)給),會得到小的偏差。圖中BC之間的距離為1 個脈沖,也就是說BD+CD=1,另外BD>L1,CD>L2, 如果 BD=0.5 可知 CD=0.5,由于 CD>L2可得 L2<0.5,也就是說如果從點P到點C進(jìn)行下一步的插補(bǔ),插補(bǔ)點與直線的偏差控制在0.5脈沖范圍內(nèi)。因此,從逐點比較法到一種新的插補(bǔ)算法,由于偏差可以控制在0.5脈沖范圍內(nèi),故稱之為半步偏差法。
圖3 P點插補(bǔ)示例
2.2.2 半步偏差法的優(yōu)勢
(1)因為其插補(bǔ)的最大誤差只有0.5 步,所以插值精度高,比其他常見的插補(bǔ)方法造成的插補(bǔ)誤差小。插補(bǔ)軌跡相對平滑。
(2)計算速度快,采用兩坐標(biāo)方向同步進(jìn)給的行走方式,節(jié)省了機(jī)器時間,有利于提高工作效率。
(3)脈沖沿基軸分布均勻,不只能夠控制速度的穩(wěn)定,而且對于進(jìn)給驅(qū)動系統(tǒng)伺服精度的提高也非常有利。
Processing是一種簡單易用的編程語言和編程環(huán)境,用于開發(fā)面向圖形的應(yīng)用程序,其創(chuàng)建者將其視為代碼寫生本。其尤其擅長學(xué)習(xí)算法進(jìn)行動畫和即時信息交互反饋[7]。因為Processing 的基礎(chǔ)是Java,但又沒有Java 復(fù)雜且已經(jīng)形成了自己的工作系統(tǒng),所以Processing的語法規(guī)則和Java既一致又不同。Processing連接串口后,將CAD圖片載入,調(diào)整圖片的大小、位置以及選擇畫圖區(qū)域,設(shè)置像素比例和對比度,即可通過其內(nèi)部函數(shù)將CAD圖片轉(zhuǎn)化為G代碼。
輪廓是圖像的重要特征之一,圖像輪廓的提取是實現(xiàn)精準(zhǔn)畫圖的關(guān)鍵技術(shù),因此選擇適當(dāng)?shù)膱D像處理方式尤為重要。本文通過MATLAB 圖像處理函數(shù)庫實現(xiàn)圖像的邊緣檢測和輪廓提取。MATLAB是由美國MathWorks公司開發(fā)的具有數(shù)值分析、數(shù)字圖像處理以及數(shù)字信號處理等強(qiáng)大功能的商業(yè)數(shù)學(xué)軟件,該軟件在數(shù)字圖像處理方面應(yīng)用廣泛。繪圖機(jī)器人利用MATLAB 這一特點,將相片處理為數(shù)字圖像。本文采用兩種方法進(jìn)行直接和間接的輪廓提取。
(1)輪廓提取
本文進(jìn)行輪廓提取時使用的函數(shù)是bwperim()。先進(jìn)入MATLAB 工作區(qū)將圖片導(dǎo)入,接著進(jìn)行存放步驟(二維矩陣存),在其轉(zhuǎn)為二值圖像前通過輸入特定的指令看到原圖,最后使用該函數(shù)即可完成輪廓提取。
(2)邊緣檢測
邊緣檢測的重要性使得其在圖像處理中非常有作用。圖像的邊緣是指圖像中像素值發(fā)生突變的位置[8],兩個相鄰區(qū)域由于灰度值不同而有邊緣。由于物體與背景在某些圖像特征上存在差異,這些差異可以是灰度、紋理或顏色特征,因此利用邊緣檢測對它們進(jìn)行分離。將圖像中的對象與背景之間的邊界線使用某種算法提取出來即是邊緣檢測的本質(zhì)。其根本思想是在定義像素的“邊緣強(qiáng)度”之前利用邊緣增強(qiáng)運算符對圖像邊緣進(jìn)行高亮處理,而后設(shè)置臨界值以獲得邊緣點的集合。進(jìn)行邊緣檢測最簡單的方法是使用邊緣檢測算子,利用相鄰區(qū)域的像素值不連續(xù)的特點,采用一階或者二階導(dǎo)數(shù)來檢測邊緣點[9]。因此,還可以選擇roberts、sobel和其他運算符,并使用edge()函數(shù)執(zhí)行邊界檢測。
本文設(shè)計的繪畫機(jī)器人將Arduino UNO作為控制板,利用Processing和MATLAB提取待繪圖像的像素點及圖像坐標(biāo)。利用舵機(jī)控制Z 軸運動、步進(jìn)電機(jī)通過驅(qū)動同步帶的運動來控制X、Y軸的移動,完成圖像的繪制,該繪圖機(jī)器人的優(yōu)點是完整的繪圖,更少的機(jī)器零件和相對簡單的組裝,很好地解決了市面上傳統(tǒng)機(jī)器人結(jié)構(gòu)復(fù)雜,功能拓展有限的問題。本文的繪圖機(jī)器人還有重量輕、移動便捷的優(yōu)點,有著很好的應(yīng)用前景??蓮V泛應(yīng)用于工業(yè)化的廣告標(biāo)語和商標(biāo)圖案的繪制。