陳睿祺,郁佳佳,諸程杰,劉云卿,徐葉菡
(東南大學(xué)成賢學(xué)院電子與計(jì)算機(jī)工程學(xué)院,南京 210088)
基于R16的五子棋虛擬現(xiàn)實(shí)對弈系統(tǒng)設(shè)計(jì)
陳睿祺,郁佳佳*,諸程杰,劉云卿,徐葉菡
(東南大學(xué)成賢學(xué)院電子與計(jì)算機(jī)工程學(xué)院,南京 210088)
基于R16芯片和IOIO模塊開發(fā)了一套五子棋虛擬現(xiàn)實(shí)對弈平臺。平臺基于IOIO模塊連接圖像識別模塊、落子系統(tǒng)模塊、遠(yuǎn)程通信模塊,開發(fā)了針對五子棋棋盤的圖像識別軟件系統(tǒng)和機(jī)械落子系統(tǒng),實(shí)現(xiàn)了虛擬現(xiàn)實(shí)對弈功能,包括人機(jī)對弈和遠(yuǎn)程對弈兩方面子功能。人機(jī)對弈功能通過圖像識別分析棋盤信息并作出決策,之后控制機(jī)械結(jié)構(gòu)落子。遠(yuǎn)程對弈功能根據(jù)遠(yuǎn)程棋手決策指導(dǎo)機(jī)械機(jī)構(gòu)完成落子,并再次采集棋盤信息反饋給遠(yuǎn)程棋手。
R16;IOIO;嵌入式系統(tǒng);圖像識別
2016年3月15日Alpha Go以總比分4:1戰(zhàn)勝韓國棋手李世石,人機(jī)對弈又一次走進(jìn)普通民眾視野并成為人工智能的代表應(yīng)用形式。
隨時計(jì)算機(jī)軟件技術(shù)的普及,人機(jī)對弈、虛擬現(xiàn)實(shí)對戰(zhàn)等應(yīng)用軟件層出不窮,加之物聯(lián)網(wǎng)、嵌入式系統(tǒng)的軟硬件技術(shù)不斷發(fā)展,相應(yīng)系統(tǒng)及軟件的設(shè)計(jì)思維向集成化、小型化、開源化等方面轉(zhuǎn)變,由此,虛擬現(xiàn)實(shí)對弈在人機(jī)交互方式和真實(shí)用戶體驗(yàn)有著更高的要求。本文基于R16輔以IOIO制作了一個即時交互的五子棋虛擬現(xiàn)實(shí)對弈系統(tǒng),可實(shí)現(xiàn)五子棋人機(jī)對弈或遠(yuǎn)程對弈。
1.1 R16簡介
面對當(dāng)下對嵌入式系統(tǒng)設(shè)計(jì)思維向集成化、小型化和高性能的需求,珠海全志科技股份有限公司設(shè)計(jì)了R16嵌入式系統(tǒng)芯片。
硬件設(shè)計(jì)上,R16基于ARMCortex-A7架構(gòu),主頻最高可達(dá)1.6 GHz,主存512 MHz,擁有多種儲存接口及外設(shè)接口;采用Mali400作為圖形處理器;支持主流視屏格式的1 080 pixel的解碼與回放,支持Hi-Fi音頻解碼;最高支持5 Mpixel攝像頭;同時支持USB Host及USB OTG。R16結(jié)構(gòu)功能框圖如圖1所示。
圖1 R16結(jié)構(gòu)功能框圖
軟件平臺上,R16可直接運(yùn)行Android 4.4操作系統(tǒng),通過Android系統(tǒng)的應(yīng)用程序?qū)舆M(jìn)行JAVA編程操作即可實(shí)現(xiàn)應(yīng)用功能。
1.2 IOIO簡介
IOIO是SparkFun公司以PIC24F為核心控制器針對Android 1.5版本以上操作系統(tǒng)設(shè)計(jì)的通用性開源控制模塊。IOIO硬件電路上集成了模擬輸入、I2C總線、SPI、UART、GPIO、PWM等多個功能[1]。
IOIO通過USB或者藍(lán)牙可以直接與Android操作系統(tǒng)設(shè)備相連接,只需通過其提供的Java API接口進(jìn)行Android編程即可直接對外部硬件I/O端口進(jìn)行控制。目前,市面上主流兼容USB OTG的Android操作系統(tǒng)設(shè)備都兼容支持IOIO模塊。
2.1 總體結(jié)構(gòu)
對弈系統(tǒng)主要由圖像識別模塊、落子系統(tǒng)模塊、遠(yuǎn)程通信模塊3部分組成。通過圖像識別后將信息處理后通過落子系統(tǒng)模塊進(jìn)行落子或通過遠(yuǎn)程通信模塊與異地相同系統(tǒng)進(jìn)行通信后通過落子系統(tǒng)模塊進(jìn)行落子。系統(tǒng)模型圖如圖2所示
圖2 系統(tǒng)模型圖
2.2 硬件設(shè)計(jì)
根據(jù)總體方案,若為人機(jī)對弈,首先通過OV2640攝像頭拍攝棋盤信息后發(fā)送至R16進(jìn)行圖像識別處理,經(jīng)過決策系統(tǒng)完成處理后通過USB OTG連接IOIO并對其IO口進(jìn)行控制,進(jìn)而控制步進(jìn)電機(jī)的轉(zhuǎn)動圈數(shù)來控制絲杠、滑軌組成的機(jī)械結(jié)構(gòu)到達(dá)處決策系統(tǒng)所處理處的落子位置,再控制舵機(jī)打開開關(guān)實(shí)現(xiàn)落子;若為遠(yuǎn)程對弈通過WIFI模塊對數(shù)據(jù)進(jìn)行發(fā)送與接收后控制機(jī)械結(jié)構(gòu)實(shí)現(xiàn)落子。為了上述電路能夠正常工作,設(shè)計(jì)了可靠的供電模塊。對弈系統(tǒng)硬件結(jié)構(gòu)如圖3所示。
圖3 對弈系統(tǒng)硬件結(jié)構(gòu)圖
2.3 圖像識別設(shè)計(jì)
本系統(tǒng)的落子識別設(shè)計(jì)基于OpenCV流程如圖4所示。首先對落子前的棋盤進(jìn)行拍照得到圖片1;對圖片1設(shè)置感興趣區(qū)域[2]ROI(Region of Interest),同時進(jìn)行角點(diǎn)識別確定棋盤上坐標(biāo)位置予以記錄;落子后再次采集棋盤圖像得到圖片2,將圖片1與圖片2做差后得到目標(biāo)圖片3;對目標(biāo)圖片3進(jìn)行雙邊濾波以降低光源產(chǎn)生的陰影和隨機(jī)產(chǎn)生的噪聲干擾;將濾波后的圖片進(jìn)行二值化處理后使用Canny算法進(jìn)行邊緣檢測;對檢測到的邊緣進(jìn)行目標(biāo)識別并進(jìn)行圓心擬合得出圓心坐標(biāo);將圓心坐標(biāo)與之前記錄的棋盤坐標(biāo)進(jìn)行數(shù)據(jù)比對后得出落子對應(yīng)棋盤坐標(biāo)。
圖4 落子識別流程圖
2.4 落子系統(tǒng)設(shè)計(jì)
由IOIO對步進(jìn)電機(jī)及舵機(jī)進(jìn)行控制,R16將計(jì)算后得出的落子坐標(biāo)對應(yīng)指令通過USB 或者藍(lán)牙發(fā)送IOIO,進(jìn)而IOIO輸出相應(yīng)的脈沖波形用于控制步進(jìn)電機(jī)實(shí)現(xiàn)精確的位移,到達(dá)對應(yīng)坐標(biāo)后,再控制舵機(jī)轉(zhuǎn)動實(shí)現(xiàn)落子。落子結(jié)束后IOIO方向信號反向使步進(jìn)電機(jī)回到起始位置。
圖5 系統(tǒng)軟件流程圖
2.5 遠(yuǎn)程通信設(shè)計(jì)
在Java中,可通過openConnection()方法所返回的一個URLConnection對象與服務(wù)器建立通信[3]。由此通過sendPost()與sendGet()方法(發(fā)出請求參數(shù),并使用BufferedReader讀取服務(wù)器響應(yīng))來實(shí)現(xiàn)字符串的發(fā)送與接收,在主線程中對以上兩個方法進(jìn)行調(diào)用[4],即可完成字符串的接收與發(fā)送。
系統(tǒng)的軟件流程如圖5所示。
3.1 圖像識別
3.1.1 雙邊濾波
在OpenCV中調(diào)用雙邊濾波函數(shù):BilateralFilter()將參數(shù)分別設(shè)置為:d=15,σr=50,σd=140,雙邊濾波后的圖像對比如圖6所示。
圖6 雙邊濾波圖像對比圖
3.1.2 圓心擬合
圓心的擬合原理基于霍夫(Hough)變換,霍夫變換的主要思想是利用點(diǎn)與線的對偶性,將原始圖像空間的給定的曲線通過曲線表達(dá)形式變?yōu)閰?shù)空間的一個點(diǎn)。這樣就把原始圖像中給定曲線的檢測問題轉(zhuǎn)化為尋找參數(shù)空間中的峰值問題。而檢測圓時所對應(yīng)的參數(shù)方程為r2=(x-x0)2+(y-y0)2,OpenCV中實(shí)現(xiàn)霍夫圓檢測算法主要使用兩個步驟。第1步,二維累加器應(yīng)用于找到可能的圓的位置。由于在圓周上的點(diǎn)的梯度應(yīng)該指向半徑方向,因此,對于每個點(diǎn),只有沿著梯度方向的項(xiàng)才能得到增加(基于預(yù)定義的最大與最小半徑值)。一旦找到可能的圓心(即獲得預(yù)定義數(shù)量的投票),便在第2步構(gòu)建一維的半徑的直方圖。這個直方圖中的峰值對應(yīng)的是檢測到的圓的半徑,進(jìn)而便能得出圓心大致坐標(biāo)位置[7]。在OpenCV中調(diào)用霍夫圓變換函數(shù):cvHoughCircles(),即可實(shí)現(xiàn)圓心的擬合與圓心坐標(biāo)的確定。
3.2 落子系統(tǒng)的控制
在IOIOLib[8]庫中提供了下列接口API以便于對輸出信號進(jìn)行精確的控制。
Channel[8](通道):每個管腳都可以作為一個Channel,用來輸出一個單獨(dú)的信號。
Cues[8](執(zhí)行時間):在某一特定的的時間段所有的Channels的命令組成。
Sequencer[8](順序模式):可以將一系列復(fù)雜的操作按照精確的時間執(zhí)行。
3.2.1 步進(jìn)電機(jī)的控制
硬件上選擇的步進(jìn)電機(jī)規(guī)格為2線4相,每個脈沖電機(jī)旋轉(zhuǎn)1.8°,即旋轉(zhuǎn)圈數(shù)(Rounds)為200時旋轉(zhuǎn)一圈。將控制步進(jìn)電機(jī)的系統(tǒng)時鐘頻率(Fsystem)設(shè)定為250 kHz,設(shè)定period的值為400根據(jù)公式period=Fsystem÷Fmoto則步進(jìn)電機(jī)工作頻率(Fmoto)被設(shè)定為625 Hz。綜上根據(jù)公式Rounds÷Fmoto×62500=Cue可得出執(zhí)行時間(Cue)的值為10 000,進(jìn)而實(shí)現(xiàn)步進(jìn)電機(jī)179.05 rad/s轉(zhuǎn)動速度控制。步進(jìn)電機(jī)控制參數(shù)設(shè)置代碼如下:
Stepper Step Cue_1.clk=Sequencer.Clock.CLK_250K;//設(shè)定系統(tǒng)時鐘250 kHz
stepper Step Cue_1.pulse Width=2;//脈沖寬度2
stepper Step Cue_1.period=400;//周期400
stepper Dir Cue_1.value=false;//方向控制
sequencer_.push(cue_,10000);//cue執(zhí)行時間設(shè)置
3.2.2 舵機(jī)的控制
將控制舵機(jī)的系統(tǒng)時鐘頻率(Fsystem)設(shè)定為2MHz,設(shè)定period的值為400根據(jù)公式period=Fsystem÷Factuator則舵機(jī)工作頻率(Factuator)被設(shè)定為50 Hz,周期為20 ms。舵機(jī)控制參數(shù)設(shè)置代碼如下:
Sequencer.ChannelConfigPwmPosition(
Sequencer.Clock.CLK_2 M,4 0000,2 000,new Digital Output.Spec(7));
通過更改pwm的脈沖寬度,實(shí)現(xiàn)對舵機(jī)來回旋轉(zhuǎn)的控制,代碼如下:
servosCue.pulse Width=2 000;//舵機(jī),一個周期內(nèi)高電平持續(xù)時間2 000/2 000=1 ms;
servosCue.pulse Width=4 000;//舵機(jī),一個周期內(nèi)高電平持續(xù)時間4 000/2 000=2 ms;
3.3 遠(yuǎn)程對弈設(shè)計(jì)
在用戶選擇進(jìn)入遠(yuǎn)程對弈模式后,一方落子,系統(tǒng)進(jìn)行圖像識別分析獲取落子點(diǎn)坐標(biāo)后,整合為字符串,并通過post請求將該數(shù)據(jù)發(fā)送至云端服務(wù)器,服務(wù)器在接收到請求后數(shù)據(jù)庫進(jìn)行實(shí)時更新[9]。另一方則定時向服務(wù)器發(fā)送get請求獲取落子點(diǎn)坐標(biāo),判定數(shù)據(jù)庫更新后,將坐標(biāo)點(diǎn)字符串信息經(jīng)過Integer.parseInt(String string)轉(zhuǎn)換整型[4],并交付IOIO控制機(jī)械結(jié)構(gòu)進(jìn)行運(yùn)作,至此便實(shí)現(xiàn)了遠(yuǎn)程對弈。
對弈系統(tǒng)的整體性能可以歸納為:準(zhǔn)確性、時效性[10]。下面對這2種性能進(jìn)行試驗(yàn)測試。
對于準(zhǔn)確性的驗(yàn)證分為兩個部分,圖像識別棋子在棋盤坐標(biāo)的準(zhǔn)確性識別及落子系統(tǒng)的落子坐標(biāo)的準(zhǔn)確性。將棋盤劃分為x、y軸,劃分方式如圖7所示。
圖7 棋盤劃分方式
將棋子隨機(jī)放置于棋盤,通過游標(biāo)卡尺測量棋子實(shí)際圓心坐標(biāo)位置與在攝像頭無抖動的條件下圖像識別棋子圓心坐標(biāo)進(jìn)行誤差比較,反復(fù)進(jìn)行試驗(yàn)150次,記錄x軸方向上最大絕對誤差絕對值,最大相對誤差;y軸方向上最大絕對誤差,最大相對誤差。模擬對弈通過機(jī)械機(jī)構(gòu)進(jìn)行棋盤落子,使用游標(biāo)卡尺測量棋子圓心坐標(biāo)位置與棋盤坐標(biāo)位置進(jìn)行誤差比較,反復(fù)進(jìn)行試驗(yàn)150次,同樣記錄兩個坐標(biāo)軸方向上的最大絕對誤差絕對值,最大相對誤差值。最大相對誤差=最大絕對誤差絕對值/對應(yīng)棋盤坐標(biāo)。準(zhǔn)確性測試數(shù)據(jù)如表1所示,其中圖像識別最大絕對誤差及最大相對誤差在x軸方向及y軸方向上均小于2%,表明識別能夠滿足圓心位置識別要求,結(jié)合棋盤坐標(biāo)前后間隔完全能夠準(zhǔn)確識別出棋子所在棋盤坐標(biāo)。根據(jù)分析誤差來自于所采用的棋子并非嚴(yán)格正圓,以及棋子材質(zhì)反光致使圖片前后相減會造成棋子損失。落子最大絕對誤差及相對誤差在兩個坐標(biāo)軸方向上均小于5%,表明能夠較好滿足落子的準(zhǔn)確性要求,不會出現(xiàn)落錯棋盤坐標(biāo)的情況發(fā)生。根據(jù)分析,誤差來自于在通過輪盤帶動棋子時由于棋子的質(zhì)量不均,出子的速度不同,最終造成落到棋盤上會有誤差產(chǎn)生。模擬對弈落子實(shí)驗(yàn)如圖8所示。
表1 系統(tǒng)準(zhǔn)確性測試數(shù)據(jù)
圖8 模擬對弈落子實(shí)驗(yàn)圖
時效性測試,使用秒表測量從用戶落子后至機(jī)械結(jié)構(gòu)落子返回起點(diǎn)的消耗時間來進(jìn)行時效性測試以保證用戶使用體驗(yàn)。測量數(shù)據(jù)如表2所示。
表2 系統(tǒng)時效性測試數(shù)據(jù)
從表中數(shù)據(jù)看出圖像識別方面耗時在1 s以內(nèi),時效性良好,平均耗時25.44 s主要源自于五子棋落子大多集中在棋盤中部,機(jī)械系統(tǒng)從原點(diǎn)移動至落子處后進(jìn)行落子返回過程會消耗大量時間,后期可以通過配置性能更好的步進(jìn)電機(jī)或者搭建機(jī)械臂予以提升速度。
本系統(tǒng)是一款虛擬現(xiàn)實(shí)五子棋對弈嵌入式系統(tǒng)。其以功耗、性能、穩(wěn)定性強(qiáng)的嵌入式系統(tǒng)芯片R16作為數(shù)據(jù)處理核心,主要采用OpenCV進(jìn)行圖像識別后輔以IOIO操作機(jī)械系統(tǒng)運(yùn)作落子,實(shí)現(xiàn)了虛擬現(xiàn)實(shí)、現(xiàn)實(shí)增強(qiáng)、沉浸式體驗(yàn)[11]的對弈平臺設(shè)計(jì)。從上述性能測試可以看出,該系統(tǒng)穩(wěn)定性出色,時效性良好,完全滿足當(dāng)前人機(jī)對弈、遠(yuǎn)程對弈需求。本設(shè)計(jì)可擴(kuò)展性比較強(qiáng),具有今后進(jìn)一步開發(fā)的潛力。
[1] 張佳進(jìn),陳立暢,唐秀英,等. IOIO在Android手機(jī)中的應(yīng)用與研究[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013,13(2):42-44.
[2] 趙炯,朱海濤,屈劍平,等. 基于OpenCV的圓心定位在地鐵隧道變形監(jiān)測中的應(yīng)用[J]. 傳感器與微系統(tǒng),2013,32(11):139-142.
[3] 李剛. 瘋狂Android講義[M]. 第3版. 北京:電子工業(yè)出版社,2015.
[4] 李剛. 瘋狂Java講義[M]. 第3版. 北京:電子工業(yè)出版社,2014.
[5] 陳秉濤. 數(shù)字圖像混合噪聲濾除算法研究[D]. 云南大學(xué),2012.
[6] 河田諭志,五十川賢造,松本信幸,等. 圖像處理設(shè)備以及方法:CN102713971A[P]. 2012.
[7] Robert Laganière.OpenCV2計(jì)算機(jī)視覺編程手冊[M]. 北京:科學(xué)出版社,2013.
[8] Simon Monk. Making Android Accessories with Ioio[M]. USA:O’Reilly Media,Inc,2012.
[9] 馮久凌. 個人云系統(tǒng)移動終端數(shù)據(jù)同步的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京郵電大學(xué),2013.
[10] 孫偉,閆慧芳,李瑞豹,等. 基于慣性技術(shù)的端幫采煤機(jī)姿態(tài)測量儀設(shè)計(jì)[J]. 傳感技術(shù)學(xué)報(bào),2016,29(2):306-312.
[11] 曹崢. 應(yīng)用于實(shí)驗(yàn)教學(xué)的五子棋人機(jī)對弈系統(tǒng)[J]. 軟件工程師,2014,17(8):3-6.
ResearchandDesignofaGobangGameSysteamBasedonR16
CHENRuiqi,YuJiajia*,ZHUChengjie,LIUYunqing,XUYehan
(Electronic Engineering and Computer Science Department,Southeast UniversityChengxian Colloge,Nanjing 210088,China)
A virtual reality gobang playing platform is developed based on R16 chip and IOIO module. This platform connects pattern recognition module,chess move system module,distance communication module based on IOIO module. It also develops pattern recognition software system and mechanical chess move system especially for gobang chessboard and realizes virtual reality playing function including man-machine chess playing and distance chess playing. As for man-machine chess playing function,it makes decision based on chessboard information via pattern recognition and then controls mechanical structure to move. Regarding distance chess playing function,it guides mechanical structure to move according the decision by distance player and then feeds back the chessboard information to distance player.
R16;IOIO;embedded system development;image recognition
10.3969/j.issn.1005-9490.2017.05.051
2016-08-31修改日期2016-10-31
TP273.5
A
1005-9490(2017)05-1319-05
陳睿祺( 1993-) ,男,漢族,四川德陽,東南大學(xué)成賢學(xué)院電子與計(jì)算機(jī)工程學(xué)院,本科,研究方向?yàn)榍度胧较到y(tǒng)設(shè)計(jì),513149746@ qq.com;
郁佳佳(1986-) ,女,漢族,江蘇南通,東南大學(xué)成賢學(xué)院電子與計(jì)算機(jī)工程學(xué)院,講師,碩士,研究方向?yàn)槟J阶R別與智能系統(tǒng),yujiajia8@ 126.com;
諸程杰(1994-) ,男,漢族,江蘇無錫,東南大學(xué)成賢學(xué)院電子與計(jì)算機(jī)工程學(xué)院,本科,研究方向?yàn)榍度胧较到y(tǒng)設(shè)計(jì),523272685@ qq.com。