杜 明,王中寶
(吉林電子信息職業(yè)技術(shù)學(xué)院,吉林 吉林 132021)
弦絲畫(huà)發(fā)源于19世紀(jì)末,被稱為“數(shù)字與藝術(shù)的舞蹈”,其制作方式是在一個(gè)釘滿釘子的木板上,按照?qǐng)D案的明暗交接用繞線的方式組成圖案輪廓,然后用線在釘子之間纏繞,組成幾何圖形或畫(huà),因其上手簡(jiǎn)單又極具藝術(shù)美感,使得弦絲畫(huà)手工藝品越發(fā)流行。2018年,維也納某科研團(tuán)隊(duì)研發(fā)了一種計(jì)算機(jī)算法,利用該算法能夠讓機(jī)器人用繞線的形式重新創(chuàng)造出各種圖案。與國(guó)外相比,國(guó)內(nèi)雖然存在能夠生成繞線順序的軟件,但尚未見(jiàn)到自動(dòng)繞線的機(jī)器?,F(xiàn)有的繪制流程地解算需要付費(fèi)使用,且代碼不開(kāi)源,應(yīng)用受限。另外,采用人工方式進(jìn)行繪制,消耗時(shí)間長(zhǎng),容易出錯(cuò)。綜上所述,本文設(shè)計(jì)了一套能夠自動(dòng)繞線的繪畫(huà)機(jī)器人,具有自動(dòng)識(shí)圖、解算及繪制功能[4]。
弦絲畫(huà)控制系統(tǒng)主要由上位機(jī)與下位機(jī)兩個(gè)部分組成。上位機(jī)負(fù)責(zé)弦絲畫(huà)步驟的解算、繪制步驟的儲(chǔ)存。下位機(jī)則是繪制部分的機(jī)械平臺(tái),由3個(gè)步進(jìn)電機(jī)進(jìn)行驅(qū)動(dòng),分別構(gòu)成X軸、Y軸以及Z軸3個(gè)方向。系統(tǒng)流程與系統(tǒng)結(jié)構(gòu)如圖1和圖2所示。
圖1 系統(tǒng)流程
圖2 系統(tǒng)結(jié)構(gòu)
傳動(dòng)系統(tǒng)主要由下位機(jī)控制實(shí)現(xiàn),通過(guò)STM32F10 3C8T6單片機(jī)接收上位機(jī)發(fā)送的位置信息,控制各步進(jìn)電機(jī)進(jìn)行繞線。各軸步進(jìn)電機(jī)傳動(dòng)控制結(jié)構(gòu)如圖3所示。
圖3 步進(jìn)電機(jī)傳動(dòng)控制結(jié)構(gòu)
首先通過(guò)一張1 000×1 000像素的空白圖片,用來(lái)模擬弦絲畫(huà)的背景板。以點(diǎn)O(X0,Y0)為圓心,以R為半徑,坐標(biāo)如圖4所示。
由圖4可得圓周上某點(diǎn)的極坐標(biāo)方程為:
圖4 圓的極坐標(biāo)
(1)
可見(jiàn),根據(jù)公式(1)可以求出圓上任意一點(diǎn)的位置,推導(dǎo)出公式(2):
(2)
式中:n為弦絲畫(huà)上總的釘子數(shù),ni為從角度位置到時(shí)釘子的排序。
在作圖時(shí),由于像素點(diǎn)的原因不能求出小數(shù),所以,需要對(duì)求得的坐標(biāo)(X,Y)取整最后繪圖得到坐標(biāo)生成效果,如圖5所示。
圖5 坐標(biāo)生成效果
使用OpenCV中cv2.imread()函數(shù)加載圖片,該函數(shù)的形式如式(3)所示:
cv2.imread(Path,Flags)
(3)
式(3)中輸入?yún)?shù)Path是圖片的路徑;Flags是圖片的加載方式。cv2.cvtColor()方法用于將圖像從一種顏色空間轉(zhuǎn)換為另一種顏色空間。該函數(shù)的形式如式(4)所示:
cv2.cvtColor(Stc,Code
[,Dst[,DstCn]])
(4)
式(4)中輸入?yún)?shù)Stc是需要轉(zhuǎn)化空間顏色的圖像;Code是色彩空間轉(zhuǎn)換代碼;Dst是與Src圖像大小和深度相同的輸出圖像;DstCn是目標(biāo)圖像中的頻道數(shù)。
使用公式img = cv2.imread(‘XSH.png’,0)加載圖片,img_gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)將所加載的圖片轉(zhuǎn)化為灰度圖?;叶葓D轉(zhuǎn)化形式如式(5)所示:
gray(x,y)=0.299×r(x,y)+
0.587×g(x,y)+0.114×
b×(x,y)
(5)
使用OpenCV讀取圖片的時(shí)候,默認(rèn)使用的是BGR來(lái)讀取圖片,原始讀取的圖片是3通道的,經(jīng)過(guò)轉(zhuǎn)換之后變成了單通道?;叶葓D對(duì)應(yīng)8位灰度取值,有256種取值,0表示黑色,255表示白色[5-6]。
采用Brezenham算法,Bresenham的輸入為兩個(gè)點(diǎn)A(X1,Y1),B(X2,Y2)。根據(jù)這兩個(gè)點(diǎn)能夠計(jì)算出兩點(diǎn)之間的“距離”。
(6)
根據(jù)y=kx+b
則有
(7)
Δyx-Δxy-C=0
(8)
在上述公式中
(9)
設(shè)直線的斜率為k,當(dāng)|k| <=1時(shí),x方向?yàn)橹鞑竭M(jìn)方向;當(dāng)|k| >1時(shí),y方向?yàn)橹鞑竭M(jìn)方向。
上位機(jī)部分使用python3.8版本的編譯環(huán)境,調(diào)用tkinterUi設(shè)計(jì)模塊,OpenCV-python 4.4.0版本的計(jì)算機(jī)視覺(jué)庫(kù),numpy 1.18.1版本的科學(xué)計(jì)算庫(kù)以及pyserial 3.4版本的通信模塊等。上位機(jī)界面如圖6所示。
圖6 上位機(jī)界面
下位機(jī)采用STM32F103單片機(jī)作為主控模塊,3個(gè)Tb6600步進(jìn)電機(jī)驅(qū)動(dòng)器分別對(duì)應(yīng)X,Y,Z軸的驅(qū)動(dòng)部分,實(shí)現(xiàn)3個(gè)維控制。繪制結(jié)果如圖7所示。
圖7 繪制結(jié)果
針對(duì)弦絲畫(huà)裝置的需求研發(fā)了弦絲畫(huà)機(jī)器人,系統(tǒng)采用上、下位機(jī)結(jié)構(gòu),上位機(jī)負(fù)責(zé)圖像處理、期望位置坐標(biāo)生成,下位機(jī)負(fù)責(zé)位置控制。經(jīng)過(guò)仿真實(shí)驗(yàn)和實(shí)際運(yùn)行,驗(yàn)證了設(shè)備運(yùn)行穩(wěn)定、定位精確、繪制圖案美觀,生產(chǎn)效率高,可滿足弦絲畫(huà)工藝的需求,具有良好的工程應(yīng)用價(jià)值。