陳 磊,王志遠,黃嘉龍,湯浩楠,陳衛(wèi)峰
(揚州大學(xué) 信息工程學(xué)院,江蘇 揚州 225127)
近幾年,隨著科學(xué)技術(shù)的創(chuàng)新,特別是人工智能技術(shù)的發(fā)展,機器人技術(shù)逐漸應(yīng)用到人們的生產(chǎn)、生活的各個角落。機器人技術(shù)[1-3]是一種集合了機械學(xué)、力學(xué)、電子學(xué)、生物學(xué)、控制論、人工智能和系統(tǒng)工程等多種學(xué)科于一體的綜合性高新技術(shù),隨著機器人技術(shù)的快速發(fā)展與成熟,各式各樣的機器人開始融入人們的生活,并且發(fā)揮著舉足輕重的作用。
機器博弈[4-5]是博弈游戲與計算機技術(shù)的結(jié)合,是人工智能領(lǐng)域里一個重要研究領(lǐng)域,在國際上已經(jīng)開展了半個多世紀。中國象棋是從兩軍對陣中抽象出來的一種博弈游戲,下棋的雙方無時不在調(diào)動自己的一切智能,進行演繹、推算。在人工智能領(lǐng)域始終將棋類的機器博弈作為最具挑戰(zhàn)性的研究方向之一[6]。目前,下棋機器人可采用機器人手臂實現(xiàn)運動結(jié)構(gòu),控制較為復(fù)雜,成本高。棋盤上感知棋子位置,可以在棋子中放入射頻芯片,棋盤上放入射頻識別芯片讀卡器[7],或用多個霍爾傳感器實現(xiàn)[8],但應(yīng)用傳感器數(shù)量太多,系統(tǒng)硬件實現(xiàn)困難。
本文旨在設(shè)計一個小型化、智能化的中國象棋機器人硬件實驗平臺,平臺的上位機可以用樹莓派或計算機實現(xiàn),用攝像頭識別棋子位置,機械結(jié)構(gòu)控制方便。系統(tǒng)可以直接與人進行對弈,通過語音進行提示,可以讓使用者有較好的臨場感。同時基于本實驗平臺,可以設(shè)計驗證人工智能中常用的圖像識別、深度搜索和人機博弈等算法。
本系統(tǒng)的實現(xiàn)包括機械結(jié)構(gòu)、上位機控制程序和下位機控制程序的設(shè)計。下位機通過串口與上位機通信,主要負責(zé)棋子取放的運動控制,上位機負責(zé)象棋的走棋算法和對棋子、棋盤的圖像識別處理等復(fù)雜運算功能,對弈過程中的實時信息通過上位機控制音箱進行語音播報。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。

圖1 系統(tǒng)結(jié)構(gòu)框圖
中國象棋是一種對弈游戲,棋盤為長方形,決定了象棋機器人的執(zhí)行結(jié)構(gòu)采用直角坐標控制較為方便[9]。本系統(tǒng)平臺采用直角坐標機器人,運動控制系統(tǒng)共有3個方向的運動,每個運動軸分別對應(yīng)于直角坐標系中的X,Y,Z軸。X,Y軸是水平面內(nèi)相互垂直的運動軸,Z軸是垂直于水平面的上下方向的運動軸。
通過對X,Y軸運動的控制,可以確定取放棋子的位置,所以X,Y軸要保證運動精度。系統(tǒng)采用42型步進電機帶動同步輪,同步輪帶動運動履帶來實現(xiàn)X,Y方向的精確運動控制[10]。同步輪直徑為22.3 mm,步進電機的步進角為1.8°,所以運動精度可以達到每步0.35 mm。Z軸用來控制棋子的拿起和放下,只需要保證拿起棋子時,棋子底面高于其他棋子即可,不需要嚴格的精度,因而系統(tǒng)采用推桿電機連接微型直流吸盤式電磁鐵,實現(xiàn)對棋子的取放功能。
系統(tǒng)由上位機控制固定于棋盤正上方的攝像頭獲取棋子的位置,與電機的運動控制形成一個閉環(huán)運動系統(tǒng),機械結(jié)構(gòu)如圖2所示。

圖2 中國象棋機器人機械結(jié)構(gòu)
中國象棋機器人硬件電路的主要功能是實現(xiàn)機械結(jié)構(gòu)的運動控制,由下位機控制實現(xiàn)。下位機的主控制器采用STM32F103RCT6單片機[11-12]。硬件電路框圖如圖3所示。

圖3 硬件電路框圖
下位機分別連接3路A4988步進電機驅(qū)動模塊,驅(qū)動X,Y軸步進電機和Z軸推桿電機。X,Y軸步進電機配合攝像頭的圖像識別進行運動定位,推桿電機用于抓取、移動棋子。推桿電機的行程為10 mm,符合抓取棋子的高度要求。電磁鐵連接在推桿電機頂端,通電后產(chǎn)生足夠吸力,抓取象棋棋子。
系統(tǒng)軟件主要包括3部分:①下位機控制機械結(jié)構(gòu)運動的控制程序;② 上位機對被移動棋子位置的圖像識別程序;③ 象棋算法程序。
下位機控制機械結(jié)構(gòu)運動的程序通過STM32單片機用C語言編程實現(xiàn),主程序流程如圖4所示。具體的運動方向和運動距離由上位機通過串口發(fā)送來的控制數(shù)據(jù)實現(xiàn)。

圖4 下位機主程序流程
識別棋子運動位置的算法[13-14],是上位機通過控制攝像頭捕獲棋盤畫面,用Python運行OpenCV函數(shù)庫編程實現(xiàn)。已實現(xiàn)的系統(tǒng)中運用了霍夫圓心檢測、HSV顏色提取和歸一化數(shù)組相結(jié)合的算法[15-16],如圖5所示。該算法成功的前提是棋盤初始化時棋子要放在正確位置,在對弈過程中,通過檢測棋子的圓心,根據(jù)棋盤變化來判定對手的棋子如何移動。

圖5 進行顏色分割后的棋盤及棋子
象棋的算法是在上位機中通過調(diào)用C++編程的中國象棋引擎實現(xiàn),主要包括局面表示、走法表示及生成、局面評估和搜索算法四大部分。中國象棋引擎棋力的高低主要由搜索算法的搜索深度決定。搜索深度越深,程序的棋力越強。系統(tǒng)中設(shè)定的初級、中級和高級不同難度,就是通過改變搜索深度來決定象棋機器人的棋力水平。搜索深度的優(yōu)先遍歷可用遞歸算法實現(xiàn),其中搜索深度與棋局結(jié)束條件作為遞歸終點。為了加快搜索速度,本系統(tǒng)使用Alpha-Beta剪枝算法[17]對搜索樹進行剪枝。經(jīng)測算,當搜索6層時,Alpha-Beta搜索算法的效率是普通搜索算法的50~60倍。
系統(tǒng)調(diào)試時,幾個電機的參數(shù)設(shè)置對運動定位的精確性非常重要。系統(tǒng)X,Y軸電機是采用42型步進電機,步進角是1.8°,通過對機械結(jié)構(gòu)的設(shè)計和反復(fù)測試,得到對應(yīng)步進距離為每步0.35 mm。根據(jù)象棋棋盤每格的尺寸,以及步進電機每個步進字對應(yīng)的行進距離,上位機可以推算出將棋子放置于不同位置需要的步進脈沖數(shù),數(shù)據(jù)通過串口發(fā)送至下位機中進行控制。
上電后系統(tǒng)初始化,電機歸位到棋盤一角,以此為基準點,進行后面取放棋子的操作。每次取放結(jié)束后,Z軸的推桿電機都由X,Y軸的步進電機歸位到棋盤上的基準點位置,保證各步操作不會產(chǎn)生累積誤差,從而每次都能正確地取放棋子。對弈過程中,被象棋機器人吃掉的對方棋子,會被放置在棋盤下面的方格區(qū)域,以防止對后面的行棋產(chǎn)生影響。
本系統(tǒng)在直角坐標運動系統(tǒng)的基礎(chǔ)上,通過攝像頭采集圖像進行圖像識別,得到棋盤中棋子的變化。結(jié)合中國象棋引擎實現(xiàn)一個可以與人進行對弈的中國象棋機器人。運動系統(tǒng)采用步進電機實現(xiàn),保證系統(tǒng)執(zhí)行中的運動精度。上位機的功能,可以根據(jù)需要,采用計算機或樹莓派實現(xiàn)。目前系統(tǒng)已實現(xiàn)搜索深度為6步的象棋功能,從而可以控制不同難度等級的對弈機器人模式。系統(tǒng)可以作為人工智能算法的訓(xùn)練實驗平臺,可以在中國象棋的決策系統(tǒng)、圖像識別和視覺技術(shù)中進行相應(yīng)的算法驗證。此外,還可以增加語音控制功能,用以設(shè)計、驗證語音控制算法,實現(xiàn)語音控制對弈象棋的功能。