陳帥 桑海偉 胡興玲 李紅霞 陳桃
摘 要:隨著體感技術(shù)的發(fā)展,人機(jī)交互的方式變得更為先進(jìn)和多樣化。通過(guò)人體肢體語(yǔ)言去控制機(jī)械或者游戲機(jī)已經(jīng)變成可能。而通過(guò)Kinect外設(shè),可以解除人們受鍵盤,手柄等傳統(tǒng)遙控方式的限制。文中通過(guò)Kinect骨骼跟蹤標(biāo)準(zhǔn)應(yīng)用程序接口API來(lái)設(shè)定特殊的肢體動(dòng)作作為觸發(fā)事件向控制器發(fā)出指令,達(dá)到控制的目的。本設(shè)計(jì)通過(guò)對(duì)人體手勢(shì)的識(shí)別,并用Arduino單片機(jī)作為控制媒介,從而達(dá)到了對(duì)遙控飛機(jī)運(yùn)動(dòng)軌跡的控制目的。
關(guān)鍵詞:Arduino單片機(jī);體感技術(shù);遙控飛機(jī);Kinect
中圖分類號(hào):TB21 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2016)04-00-03
0 引 言
作為一個(gè)新興的研究領(lǐng)域,人體行為識(shí)別研究受到了越來(lái)越多研究者的關(guān)注。通過(guò)對(duì)傳感器采集到的數(shù)據(jù)進(jìn)行加工、處理和分析,從而使PC機(jī)應(yīng)用程序系統(tǒng)能夠識(shí)別個(gè)體動(dòng)作、個(gè)體之間以及個(gè)體與環(huán)境之間的交互是人體動(dòng)作識(shí)別的研究目的?;贙inect的人體體感遙控是新型人機(jī)交互研究中一種重要的交互方式。因此,基于Kinect的人體體感遙控是人機(jī)交互發(fā)展的趨勢(shì)之一。
基于Kinect的人體體感遙控作為一種新的控制方式,該方式不僅深受遙控飛機(jī)愛(ài)好者的喜愛(ài),控制方法簡(jiǎn)單易學(xué),而且充滿樂(lè)趣,受外界影響因素較少。因此開(kāi)發(fā)一套基于Kinect體感技術(shù)的遙控飛機(jī)系統(tǒng)具有非常重要的意義與價(jià)值。
1 系統(tǒng)結(jié)構(gòu)和工作原理
1.1 系統(tǒng)結(jié)構(gòu)框圖
本系統(tǒng)可以分為三個(gè)模塊,包括由Kinect體感器和PC機(jī)應(yīng)用程序構(gòu)成的人體手勢(shì)識(shí)別數(shù)據(jù)采集模塊,Arduino UNO 單片機(jī)核心處理模塊,遙控飛機(jī)遙控器和X9313數(shù)字電位器組成的遙控模塊。其系統(tǒng)框圖如圖1所示。
1.2 工作原理
基于Kinect體感技術(shù)的遙控飛機(jī)系統(tǒng)由核心控制模塊、遙控控制模塊和體感器數(shù)據(jù)采集模塊組成。本系統(tǒng)采用Arduino單片機(jī)作為核心處理模塊和其它模塊相互通信,最終實(shí)現(xiàn)控制遙控飛機(jī)飛行軌跡的目的。
本系統(tǒng)首選通過(guò)Kinect體感器采集人體骨骼運(yùn)動(dòng)的信息,發(fā)送給PC機(jī)應(yīng)用程序處理數(shù)據(jù)。Arduino單片機(jī)核心控制模塊通過(guò)串口和PC機(jī)通信獲取數(shù)據(jù),核心控制模塊發(fā)送指令到遙控控制模塊,進(jìn)而控制遙控飛機(jī)的運(yùn)行軌跡。
本系統(tǒng)利用體感器采集到的左手骨骼信息作為控制遙控飛機(jī)的油門大小,采集到的右手骨骼信息作為控制遙控飛機(jī)的方向。其系統(tǒng)流程圖如圖2所示。
2 硬件電路設(shè)計(jì)
基于Kinect體感技術(shù)的遙控飛機(jī)系統(tǒng)的核心處理模塊為Arduino UNO單片機(jī)開(kāi)發(fā)板,遙控器控制模塊由X9313數(shù)字電位器和遙控飛機(jī)遙控器組成,數(shù)據(jù)采集模塊為Kinect體感器。所述遙控控制模塊通過(guò)電路與核心控制模塊連接通信,體感采集數(shù)據(jù)模塊通過(guò)電腦與核心控制模塊連接通信。
2.1 核心處理模塊
ArduinoUNO的主要作用是與電腦進(jìn)行通信,通過(guò)USB接口與電腦連接,獲取電腦處理后的數(shù)據(jù)信息,進(jìn)而進(jìn)行指令判斷,最后通過(guò)改變高低電平調(diào)節(jié)數(shù)字電位器的大小,進(jìn)而控制遙控飛機(jī)的運(yùn)行軌跡。
Arduino UNO是Arduino USB接口系列的最新版本,作為Arduino平臺(tái)的參考標(biāo)準(zhǔn)模板。UNO的處理器核心是ATmega328,同時(shí)具有14路數(shù)字輸入/輸出口(其中6路可作為PWM輸出),6路模擬輸入,一個(gè)16 MHz晶體振蕩器,一個(gè)USB口,一個(gè)電源插座,ICSP header和一個(gè)復(fù)位按鈕。核心處理模塊的結(jié)構(gòu)示意圖如圖3所示。
2.2 遙控控制模塊
遙控控制模塊是控制飛機(jī)運(yùn)行軌跡的主要控制部分,它由遙控飛機(jī)遙控器與X9313數(shù)字電位器組裝而成,通過(guò)接收Arduino單片機(jī)的端口高低電平的數(shù)值,進(jìn)而改變數(shù)字電位器的阻值大小以進(jìn)行速度和飛行方向的控制。
拆除遙控器的模擬電位器,用X9313數(shù)字電位器的阻值觸點(diǎn)代替模擬電位器的觸點(diǎn),數(shù)字電位器的控制端口由Arduino核心處理模塊控制。圖4所示為X9313數(shù)字電位器的引腳圖。
簡(jiǎn)單介紹數(shù)字電位器X9313的工作原理:Vcc 是高電平接入端, Vss是負(fù)極接入端。 3號(hào)引腳RH/VH、6號(hào)引腳RL/VL和5號(hào)引腳RW/VW相當(dāng)于滑動(dòng)變阻器的三個(gè)抽頭,其中5號(hào)引腳是活動(dòng)抽頭,介于3號(hào)與6號(hào)引腳之間進(jìn)行運(yùn)動(dòng)。X9313WP型號(hào)的電位器阻值為10 kΩ,數(shù)字電位器為32階,意思就是將10 kΩ分成31份,大約每份330 Ω。X9313結(jié)構(gòu)框圖如圖5所示。
圖5中的引腳,引腳,引腳為三個(gè)控制端,為片選端,當(dāng)為低電平時(shí),X9313被選中,此時(shí)才能接收和的信號(hào),其中在一個(gè)脈沖的下降沿使計(jì)數(shù)器的數(shù)值增減1,如果為高電平,則滑動(dòng)端向VH端滑動(dòng),VW與VH之間電阻值減少一個(gè)臺(tái)階,也就是330 Ω,反之如果UN為低電平,則滑動(dòng)端向VL端滑動(dòng)。但是要注意,滑動(dòng)端VW不會(huì)一直滑動(dòng)下去,也不會(huì)滑動(dòng)到邊緣然后再循環(huán)滑動(dòng)回來(lái),如果想儲(chǔ)存滑動(dòng)后的電阻值,那么就讓變?yōu)楦唠娖剑優(yōu)楦唠娖?,這樣就可將計(jì)數(shù)器的值儲(chǔ)存。,,在接單片機(jī)之前最好串聯(lián)10 kΩ電阻,在RH與RL兩端分別按如圖所示的接線連接電容,這樣會(huì)明顯降低噪聲,穩(wěn)定性大大增強(qiáng)。
2.3 數(shù)據(jù)采集模塊
數(shù)據(jù)采集模塊由Kinect體感器和PC機(jī)兩部分組成,主要作用為通過(guò)Kinect體感器對(duì)人體手勢(shì)的運(yùn)動(dòng)軌跡進(jìn)行識(shí)別,繼而轉(zhuǎn)換成三維數(shù)據(jù)傳輸給PC機(jī),通過(guò)數(shù)據(jù)轉(zhuǎn)換程序把三維數(shù)據(jù)轉(zhuǎn)換為命令數(shù)據(jù)。通過(guò)串口發(fā)送給Arduino單片機(jī),進(jìn)行遙控飛機(jī)運(yùn)行軌跡控制。
遙控直升機(jī)在三維空間飛行,因此還應(yīng)為其添加上下飛行(油門)的動(dòng)作,而前后動(dòng)作就由左手來(lái)完成,以左手的擺動(dòng)幅度來(lái)控制飛機(jī)的油門大小。在Kinect中,油門的大小采用變量get_angle控制,以左手腕部,左側(cè)肩部,左側(cè)臀部三點(diǎn)形成三角形,三角形肩部位置的角度為get_angle,利用get_angle的大小映射(map函數(shù))油門大小。
人體在Kinect中可以用enableMirror()函數(shù)來(lái)激活鏡面關(guān)系,也就是說(shuō)左右手的位置可以在Kinect中調(diào)換。由左手控制飛機(jī)油門,右手控制飛機(jī)的方向,這樣飛機(jī)就可以遵從人體姿態(tài)達(dá)到飛行目的。總體來(lái)說(shuō),飛行器的身體姿態(tài)方面采用的綜合控制方法如圖6所示。
本系統(tǒng)采用的數(shù)據(jù)采集模塊是微軟公司Kinect for Windows的第一代產(chǎn)品。Kinect的關(guān)鍵部件及說(shuō)明如下:
(1)麥克風(fēng)陣列:聲音從4個(gè)麥克風(fēng)采集,同時(shí)過(guò)濾背景噪聲,可定位聲源。
(2)紅外投影機(jī):主動(dòng)投射近紅外光譜,照射到粗糙物體或穿透毛玻璃后,光譜發(fā)生扭曲,從而形成隨機(jī)的反射斑點(diǎn)(稱為散斑),進(jìn)而被紅外攝像頭讀取。
(3)紅外攝像頭:分析紅外光譜,創(chuàng)建可視范圍內(nèi)的人體、物體的深度圖像。
(4)仰角控制馬達(dá):可編程控制仰角的馬達(dá),用于獲取最佳視角。
(5)USB線纜:支持USB 2.0接口,用于傳輸彩色視頻流、深度流、音頻流等。必須使用外部電源,傳感器才能充分發(fā)揮其功能(Kinect的功率達(dá)到了12 W,而普通USB一般是2.5 W)。
(6)彩色攝像頭:用于拍攝視角范圍內(nèi)的彩色視頻圖像。
4 結(jié) 語(yǔ)
本系統(tǒng)是一種基于Kinect的體感技術(shù)遙控飛機(jī),采用Arduino作為核心處理模塊,運(yùn)用微軟公司成熟可靠的體感器設(shè)備作為人體骨骼數(shù)據(jù)的采集模塊,可以增強(qiáng)數(shù)據(jù)的可靠性和可處理性。通過(guò)改變數(shù)字電位器的大小來(lái)控制飛機(jī)的運(yùn)行軌跡,對(duì)體感技術(shù)研究具有深遠(yuǎn)的意義。
參考文獻(xiàn)
[1]余濤.Kinect應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn):用最自然的方式與機(jī)器對(duì)話[M].北京:機(jī)械工業(yè)出版社,2012.
[2]吳國(guó)斌,李斌,閻驥洲.Kinect人機(jī)交互開(kāi)發(fā)實(shí)踐[M].北京:人民郵電出版社,2013.
[3]王森.Kinect體感程序設(shè)計(jì)入門[M].北京:科學(xué)出版社,2012.
[4]Enrique Ramos Melgar.學(xué)Arduino玩轉(zhuǎn)Kinect制作項(xiàng)目[M].北京:人民郵電出版社,2014.
[5]曹林.人臉識(shí)別與人體動(dòng)作識(shí)別技術(shù)及應(yīng)用[M].北京:電子工業(yè)出版社,2015.
[6]Michael McRoberts.Arduino從基礎(chǔ)到實(shí)踐[M].北京:電子工業(yè)出版社,2013.
[7]楊昆云.Arduino權(quán)威指南[M].北京:人民郵電出版社,2015.
[8]陳呂洲.Arduino程序設(shè)計(jì)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2014.
[9]趙志.Arduino開(kāi)發(fā)實(shí)戰(zhàn)指南[M].北京:機(jī)械工業(yè)出版社,2015.
[10]孫駿榮.Arduino互動(dòng)設(shè)計(jì)入門[M].北京:科學(xué)出版社,2015.