杜 明,王中寶
(吉林電子信息職業技術學院,吉林 吉林 132021)
弦絲畫發源于19世紀末,被稱為“數字與藝術的舞蹈”,其制作方式是在一個釘滿釘子的木板上,按照圖案的明暗交接用繞線的方式組成圖案輪廓,然后用線在釘子之間纏繞,組成幾何圖形或畫,因其上手簡單又極具藝術美感,使得弦絲畫手工藝品越發流行。2018年,維也納某科研團隊研發了一種計算機算法,利用該算法能夠讓機器人用繞線的形式重新創造出各種圖案。與國外相比,國內雖然存在能夠生成繞線順序的軟件,但尚未見到自動繞線的機器。現有的繪制流程地解算需要付費使用,且代碼不開源,應用受限。另外,采用人工方式進行繪制,消耗時間長,容易出錯。綜上所述,本文設計了一套能夠自動繞線的繪畫機器人,具有自動識圖、解算及繪制功能[4]。
弦絲畫控制系統主要由上位機與下位機兩個部分組成。上位機負責弦絲畫步驟的解算、繪制步驟的儲存。下位機則是繪制部分的機械平臺,由3個步進電機進行驅動,分別構成X軸、Y軸以及Z軸3個方向。系統流程與系統結構如圖1和圖2所示。

圖1 系統流程

圖2 系統結構
傳動系統主要由下位機控制實現,通過STM32F10 3C8T6單片機接收上位機發送的位置信息,控制各步進電機進行繞線。各軸步進電機傳動控制結構如圖3所示。

圖3 步進電機傳動控制結構
首先通過一張1 000×1 000像素的空白圖片,用來模擬弦絲畫的背景板。以點O(X0,Y0)為圓心,以R為半徑,坐標如圖4所示。
由圖4可得圓周上某點的極坐標方程為:

圖4 圓的極坐標
(1)
可見,根據公式(1)可以求出圓上任意一點的位置,推導出公式(2):
(2)
式中:n為弦絲畫上總的釘子數,ni為從角度位置到時釘子的排序。
在作圖時,由于像素點的原因不能求出小數,所以,需要對求得的坐標(X,Y)取整最后繪圖得到坐標生成效果,如圖5所示。

圖5 坐標生成效果
使用OpenCV中cv2.imread()函數加載圖片,該函數的形式如式(3)所示:
cv2.imread(Path,Flags)
(3)
式(3)中輸入參數Path是圖片的路徑;Flags是圖片的加載方式。cv2.cvtColor()方法用于將圖像從一種顏色空間轉換為另一種顏色空間。該函數的形式如式(4)所示:
cv2.cvtColor(Stc,Code
[,Dst[,DstCn]])
(4)
式(4)中輸入參數Stc是需要轉化空間顏色的圖像;Code是色彩空間轉換代碼;Dst是與Src圖像大小和深度相同的輸出圖像;DstCn是目標圖像中的頻道數。
使用公式img = cv2.imread(‘XSH.png’,0)加載圖片,img_gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)將所加載的圖片轉化為灰度圖。灰度圖轉化形式如式(5)所示:
gray(x,y)=0.299×r(x,y)+
0.587×g(x,y)+0.114×
b×(x,y)
(5)
使用OpenCV讀取圖片的時候,默認使用的是BGR來讀取圖片,原始讀取的圖片是3通道的,經過轉換之后變成了單通道。灰度圖對應8位灰度取值,有256種取值,0表示黑色,255表示白色[5-6]。
采用Brezenham算法,Bresenham的輸入為兩個點A(X1,Y1),B(X2,Y2)。根據這兩個點能夠計算出兩點之間的“距離”。
(6)
根據y=kx+b
則有
(7)
Δyx-Δxy-C=0
(8)
在上述公式中

(9)
設直線的斜率為k,當|k| <=1時,x方向為主步進方向;當|k| >1時,y方向為主步進方向。
上位機部分使用python3.8版本的編譯環境,調用tkinterUi設計模塊,OpenCV-python 4.4.0版本的計算機視覺庫,numpy 1.18.1版本的科學計算庫以及pyserial 3.4版本的通信模塊等。上位機界面如圖6所示。

圖6 上位機界面
下位機采用STM32F103單片機作為主控模塊,3個Tb6600步進電機驅動器分別對應X,Y,Z軸的驅動部分,實現3個維控制。繪制結果如圖7所示。

圖7 繪制結果
針對弦絲畫裝置的需求研發了弦絲畫機器人,系統采用上、下位機結構,上位機負責圖像處理、期望位置坐標生成,下位機負責位置控制。經過仿真實驗和實際運行,驗證了設備運行穩定、定位精確、繪制圖案美觀,生產效率高,可滿足弦絲畫工藝的需求,具有良好的工程應用價值。