蔣 璇,陳奕璇,董 浩,周志峰
(上海工程技術大學機械與汽車工程學院,上海 201620)
繪圖機器人作為科學技術與藝術相結合的產物,提高了手繪人員繪圖的精度和效率,然而市面上繪圖機所識別的圖紙主要來源于繪圖軟件,因此繪圖機器人多應用在機械零部件圖紙領域的繪制。本文設計的繪圖機器人,能夠將相機照片通過繪圖機器人的機械手一筆一畫繪制出來,經驗證,可以繪制日常生活中所拍攝的人像、風景等。
此繪圖機器人系統主要由繪圖機硬件部分、電機控制算法、圖像轉化等3部分構成。在研究中,本文對電機驅動算法中所用的插補算法進行改進,使繪圖機運動更加平穩。針對傳統繪圖機應用領域窄的問題,在圖像轉化部分,本文將MATLAB 圖像提取技術用于提取照片中的輪廓,然后生成可被繪圖機器人識別的圖像。
機器人使用5 個導軌作為骨架,步進電機通過同步帶控制繪圖筆在X和Y軸上的移動。X軸由步進電機驅動,Y軸由2個具有相反轉向和相同轉速的步進電機驅動。繪圖機器人的Z軸上固定繪圖筆,由舵機在接收到脈沖信號后向上轉動一定的角度,將繪圖筆抬起,然后通過自身的重力下落進行繪圖。垂直抬筆設計有效減少了斜抬筆設計中落筆時猛戳或打滑的現象。此結構優勢在于機器人的機械部分可分拆和分裝,牽引電機的固定方式靈活,可安裝在任意作圖區域,繪制范圍不受限制[1]。其機械結構如圖1所示。

圖1 機械結構
電路設計選擇了AC 220 V 的電壓,因電機控制器所需電壓為24 V,所以,整個電路首先要連接到24 ~220 V 的電源,該電源為4個電機驅動器供電。將4個電機驅動器分別與2個Y軸步進電機、X軸步進電機以及Z軸舵機連接。將2個Y軸步進電機驅動器之一的2條接線反接,以確保2個Y軸步進電機以相反的方向旋轉并具有相同的速度。然后將1 個24 V轉12 V 的可調電源模塊連接在總控制器與220 V 轉24 V 電源之間,最后將總控制器與4個電機驅動器連接,用來控制3個步進電機和舵機的轉動,以此達到控制X、Y軸移動和繪圖筆起落的目的。其電路設計如圖2所示。

圖2 電路設計
PC接口的處理控制主窗口包含以下部分:圖像,參數配置,軌跡跟蹤,命令存儲[2]。通過Processing 加載圖片并選擇圖片的繪制區域,在將其載入UNO 板前設置相應的參數。UNO 板通過串行端口與Processing 連接,分析其發送的參數,然后將數據傳輸到步進電機驅動器上,以控制電機的轉動,最后通過轉動電機帶動X軸、Y軸和Z軸舵機的運動。
因為在控制CNC 車床的工作時,1 個脈沖當量是刀具在坐標軸上運動的最小單位,所以通過數據點密化可以看出刀具的移動路徑是一些微小的臺階所組成的折線。比如,要通過數控車床來加工直線或曲線時,刀具分別沿X方向和Y方向移動1個或多個單位,依次交替,抵達預定點為止,這就形成了軌跡路線。CNC 系統可在得到的軌跡路線上的已知點間根據一些函數通過算法計算中間點(數據點密化),這種方法即為插補。插補技術是CNC 系統可以實現發展軌跡進行控制的基礎,插值運算是核心系統軟件模塊CNC運動控制[3]。
該畫圖機就模仿了CNC 系統,運用插補算法來實現畫筆軌跡的控制。由于傳統插補算法中對于復雜輪廓必須通過軟件將其細分成若干小段,進行編程加工[4]。其過程通常均為直線段,這樣的轉換將產生一些不足之處[5]。主要體現在精度與數據量的取舍,如果對繪圖精度要求較高,則需要對輪廓進一步細化,會產生大量離散數據。若采用大量端點數據,數據傳送與存儲將對繪圖機提出更高要求[6]。通常,當要求精度提高一倍時,相應的則會產生數倍的數據。這就表明,如果為了方便傳輸和存儲而使數據量變小,就會降低曲線輪廓的精度。所以本文采用了在逐點比較法的基礎上改良了的半步偏差法,顧名思義就是將誤差減小到0.5個脈沖以內。
2.2.1 半步偏差法原理
半步偏差法是基于逐點比較法的,逐點比較法的進給方向始終是沿平面坐標系的4個象限內的X軸或Y軸方向。如圖3所示,P為當前插補點,假設下一步是沿Y軸方向進給,則到達E點,此時該點到直線距離的最小值為L3,但是如果這一步同時還沿X軸進給一步,則到達C點,C點到直線距離的最小值為L2,L2<L3,所以在此,如果設定這種情況下向X軸與Y軸同時進給 (簡稱對角線進給),會得到小的偏差。圖中BC之間的距離為1 個脈沖,也就是說BD+CD=1,另外BD>L1,CD>L2, 如果 BD=0.5 可知 CD=0.5,由于 CD>L2可得 L2<0.5,也就是說如果從點P到點C進行下一步的插補,插補點與直線的偏差控制在0.5脈沖范圍內。因此,從逐點比較法到一種新的插補算法,由于偏差可以控制在0.5脈沖范圍內,故稱之為半步偏差法。

圖3 P點插補示例
2.2.2 半步偏差法的優勢
(1)因為其插補的最大誤差只有0.5 步,所以插值精度高,比其他常見的插補方法造成的插補誤差小。插補軌跡相對平滑。
(2)計算速度快,采用兩坐標方向同步進給的行走方式,節省了機器時間,有利于提高工作效率。
(3)脈沖沿基軸分布均勻,不只能夠控制速度的穩定,而且對于進給驅動系統伺服精度的提高也非常有利。
Processing是一種簡單易用的編程語言和編程環境,用于開發面向圖形的應用程序,其創建者將其視為代碼寫生本。其尤其擅長學習算法進行動畫和即時信息交互反饋[7]。因為Processing 的基礎是Java,但又沒有Java 復雜且已經形成了自己的工作系統,所以Processing的語法規則和Java既一致又不同。Processing連接串口后,將CAD圖片載入,調整圖片的大小、位置以及選擇畫圖區域,設置像素比例和對比度,即可通過其內部函數將CAD圖片轉化為G代碼。
輪廓是圖像的重要特征之一,圖像輪廓的提取是實現精準畫圖的關鍵技術,因此選擇適當的圖像處理方式尤為重要。本文通過MATLAB 圖像處理函數庫實現圖像的邊緣檢測和輪廓提取。MATLAB是由美國MathWorks公司開發的具有數值分析、數字圖像處理以及數字信號處理等強大功能的商業數學軟件,該軟件在數字圖像處理方面應用廣泛。繪圖機器人利用MATLAB 這一特點,將相片處理為數字圖像。本文采用兩種方法進行直接和間接的輪廓提取。
(1)輪廓提取
本文進行輪廓提取時使用的函數是bwperim()。先進入MATLAB 工作區將圖片導入,接著進行存放步驟(二維矩陣存),在其轉為二值圖像前通過輸入特定的指令看到原圖,最后使用該函數即可完成輪廓提取。
(2)邊緣檢測
邊緣檢測的重要性使得其在圖像處理中非常有作用。圖像的邊緣是指圖像中像素值發生突變的位置[8],兩個相鄰區域由于灰度值不同而有邊緣。由于物體與背景在某些圖像特征上存在差異,這些差異可以是灰度、紋理或顏色特征,因此利用邊緣檢測對它們進行分離。將圖像中的對象與背景之間的邊界線使用某種算法提取出來即是邊緣檢測的本質。其根本思想是在定義像素的“邊緣強度”之前利用邊緣增強運算符對圖像邊緣進行高亮處理,而后設置臨界值以獲得邊緣點的集合。進行邊緣檢測最簡單的方法是使用邊緣檢測算子,利用相鄰區域的像素值不連續的特點,采用一階或者二階導數來檢測邊緣點[9]。因此,還可以選擇roberts、sobel和其他運算符,并使用edge()函數執行邊界檢測。
本文設計的繪畫機器人將Arduino UNO作為控制板,利用Processing和MATLAB提取待繪圖像的像素點及圖像坐標。利用舵機控制Z 軸運動、步進電機通過驅動同步帶的運動來控制X、Y軸的移動,完成圖像的繪制,該繪圖機器人的優點是完整的繪圖,更少的機器零件和相對簡單的組裝,很好地解決了市面上傳統機器人結構復雜,功能拓展有限的問題。本文的繪圖機器人還有重量輕、移動便捷的優點,有著很好的應用前景。可廣泛應用于工業化的廣告標語和商標圖案的繪制。