馬成武
【摘 要】慧魚模型,是創(chuàng)新性極高的一種教學(xué)工具,可以組成各式各樣的模型機(jī)器人,可以模擬眾多現(xiàn)實(shí)場景。本研究是基于LabVIEW平臺,用慧魚模型設(shè)計一個人工智能五子棋機(jī)器人,最終完成了軟件和硬件的搭建。
【關(guān)鍵詞】慧魚模型;LabVIEW;人工智能;五子棋
中圖分類號: TP18 文獻(xiàn)標(biāo)識碼: A 文章編號: 2095-2457(2018)35-0008-002
DOI:10.19694/j.cnki.issn2095-2457.2018.35.004
Research on Intelligent Backgammon Robot Based on Fischer Fish Model and LabVIEW
MA Cheng-wu
(School of Information and Mechanical Engineering, Shanghai Normal University, Shanghai 201418, China)
【Abstract】Fischer model is a kind of teaching tools with extremely high innovation, which is able to make various model robots and simulate many real situations. As for this research project, we design an intelligent gobang playing robot based on LabVIEW with the fischer model, and finally finishboth of the software and the hardware.
【Key words】Fischer model; LabVIEW; Artificial Intelligence; Gobang
0 引言
慧魚模型是在阿門·費(fèi)舍爾先生于1964年發(fā)明的“六面可拼接體”的基礎(chǔ)上發(fā)展而成的技術(shù)含量很高的工程技術(shù)類智取拼裝模型,適合設(shè)計方案的探究和論證。Arduino 是一款便捷靈活、方便上手的開源電子原型平臺,能通過各種各樣的傳感器來感知環(huán)境,通過控制燈光、馬達(dá)和其他的裝置來反饋、影響環(huán)境,從而開發(fā)出很多互動作品。LabVIEW是一種程序開發(fā)環(huán)境,使用的是圖形化編輯語言編寫程序,具有強(qiáng)大的信號處理、分析和連接功能。
本研究課題設(shè)計了一款基于慧魚模型和LabVIEW的人工智能五子棋機(jī)器人,基本實(shí)現(xiàn)了人與機(jī)器之間的五子棋對弈功能。硬件部分利用慧魚模型組裝和搭建控制系統(tǒng)電路,負(fù)責(zé)采集棋盤落子信息、準(zhǔn)確完成落子等。軟件部分利用Arduino和LabVIEW開發(fā)環(huán)境編寫相關(guān)程序,負(fù)責(zé)處理棋盤落子信息、發(fā)送下一步落子坐標(biāo)、驅(qū)動硬件部分完成落子等,結(jié)合各種傳感器的反饋實(shí)現(xiàn)對慧魚模型基本的控制,最終實(shí)現(xiàn)機(jī)電一體化的完整設(shè)計。
1 設(shè)計內(nèi)容
1.1 硬件部分
智能五子棋機(jī)器人的硬件,主要包括攝像頭、棋盤、機(jī)械臂(橫軸和豎軸)、直流電機(jī)、電磁鐵、指示燈、小滑輪以及各種用以連接、固定、支撐的部件等。
1.2 軟件部分
LabVIEW控制程序
Labview程序由四個部分組成:圖像讀取部分,圖像處理部分,五子棋算法部分,串口通信部分。
1.2.1 圖像讀取部分
圖像讀取部分的功能為通過攝像頭將棋盤拍攝下來以便后續(xù)進(jìn)行圖像處理。
首先要用IMAQ Creat函數(shù)創(chuàng)建彩色和灰度圖像的圖像緩存,然后用IMAQdx模塊的一系列函數(shù)配置攝像頭,攝像頭直接采集到的是彩色圖像,利用IMAQ xtarctSingleColorPlane函數(shù)將其轉(zhuǎn)化為灰度圖像,其中Color Plane設(shè)置為Green。之所以轉(zhuǎn)化為灰度圖像,是因?yàn)槲遄悠逯簧婕暗胶凇缀推灞P底色三種顏色,將圖像黑白化讀取像素值即可,不需要其他復(fù)雜的顏色分析。
1.2.2 圖像處理部分
圖像處理部分是對之前得到的灰度圖像進(jìn)行處理,將攝像頭拍到的棋盤轉(zhuǎn)化成數(shù)組,作為五子棋算法程序的輸入。
由于棋盤的規(guī)格為16×16,所以在前面板創(chuàng)建了一個16×16的二維數(shù)組,數(shù)組的每一格和棋盤的每一格對應(yīng)。該二維數(shù)組用二重循環(huán)寫入,循環(huán)參數(shù)為15。在這個循環(huán)中,第一次讀取圖像上(32,30)點(diǎn)的像素,根據(jù)像素值確定其為黑、白還是空格,黑記為2,白記為1,空記為0,寫入數(shù)組的(1,1)格。第二次在(32,30)點(diǎn)的基礎(chǔ)上縱坐標(biāo)加30(棋盤圖像上每一格的長寬都是30),得到數(shù)組上(2,1)格的信息。以此類推,最終整個數(shù)組都被寫入。
1.2.3 五子棋算法部分
五子棋算法計算的是機(jī)器落子的位置。輸入為棋盤數(shù)組,輸出一個長度為5的字符串OUTPUT,代表落子位置和是否獲勝。
要實(shí)現(xiàn)五子棋的算法,直接用Labview編寫較為繁瑣,因此選擇更為合適的C語言編寫程序。Labview的調(diào)用庫函數(shù)節(jié)點(diǎn)可以調(diào)用dll庫,而dll可以由C程序生成,這樣就可以在Labview里調(diào)用C語言編寫的程序, Labview程序框圖如圖3所示。
調(diào)用庫函數(shù)節(jié)點(diǎn)的輸入為array,即棋盤數(shù)組;輸出為X,Y,WIN,對應(yīng)表1的三個標(biāo)志。確(下轉(zhuǎn)第15頁)(上接第9頁)定好輸入輸出之后,用Visual C++6.0來生成dll文件。首先創(chuàng)建一個空的dll工程,然后在工程的source files創(chuàng)建一個.C文件,在工程的header files中創(chuàng)建一個.h文件。
在所創(chuàng)建的頭文件中添加如下代碼:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
__declspec( dllexport ) int testarray(int *array,int *X,int *Y,int *WIN);
#endif
__declspec( dllexport )不可缺少,它是用來聲明所創(chuàng)建的dll文件是用來給外部調(diào)用的。
在所創(chuàng)建的頭文件中添加如下代碼:
1.2.4 串口通信部分
串口通信部分是將OUTPUT發(fā)送到串口,利用Arduino控制電機(jī)的運(yùn)動。程序框圖如圖4所示,
2 結(jié)果和結(jié)論
Arduino控制器是一款性能優(yōu)良的控制器,通過Arduino控制程序,實(shí)現(xiàn)了機(jī)器自動識別,自動落子,自動判斷勝負(fù),可以實(shí)現(xiàn)人機(jī)博弈,是人機(jī)一體化的設(shè)計。
【參考文獻(xiàn)】
[1]修金鵬.Arduino與Labview互動設(shè)計[M].北京:清華大學(xué)出版社,2014:35-40.
[2]Arduino官網(wǎng),http://arduino.cc/en/Main/arduinoBoardUno.
[3]巴雷特,Arduino高級開發(fā)權(quán)威指南,機(jī)械工業(yè)出版社,2014,20,33-36.
[4]沃倫,亞當(dāng)斯,莫勒,Arduino機(jī)器人權(quán)威指南,電子工業(yè)出版社,2014,24-25.