李佳怡,劉東旭
(吉林化工學(xué)院 信息與控制工程學(xué)院,吉林 吉林 132000)
隨著科技的不斷發(fā)展,人機(jī)交互技術(shù)逐步由傳統(tǒng)的鍵盤(pán)鼠標(biāo)的接觸式控制轉(zhuǎn)向基于動(dòng)作識(shí)別的體感交互模式[1-2]。而動(dòng)作識(shí)別的研究意義則在于能夠使計(jì)算機(jī)直接“看懂”人做的各種動(dòng)作,即可以識(shí)別出人的肢體動(dòng)作語(yǔ)言,并按預(yù)定規(guī)則轉(zhuǎn)換成控制指令,從而控制對(duì)象[3]。這種新模式的代表設(shè)備就是Kinect 3D體感攝影頭。Kinect 3D體感攝像頭是美國(guó)微軟公司的一款體感外設(shè),利用軟件可以調(diào)節(jié)攝像頭的上下角度,通過(guò)身體動(dòng)作或者語(yǔ)音就能夠直接完成操作,使其具有更好的視場(chǎng)[4-5]。
利用Kinect 3D攝像頭作為主要傳感器,計(jì)算機(jī)通過(guò)采集的數(shù)據(jù)分析骨骼圖像本身,判斷包含的信息,由此獲取人體姿態(tài)信息[6]。傳統(tǒng)的體感識(shí)別方法有基于嵌入式傳感器和基于計(jì)算機(jī)視覺(jué)的兩種方法。前者優(yōu)點(diǎn)是響應(yīng)速度快、精度高,缺點(diǎn)是需要用戶佩戴特定裝置,行動(dòng)受限;而基于計(jì)算機(jī)視覺(jué)的方法,用戶不需要佩戴任何東西,而用專(zhuān)用的深度攝像頭則可以直接得到深度圖像,使用范圍更加廣泛、方便[7-9]。
本文基于Prime Sense公司的新型景深成像原理以及通過(guò)深度圖像區(qū)域特征值和隨機(jī)森林算法獲得骨骼坐標(biāo)信息,并使用微軟Kinect和Visual Studio 2012 Kinect SDK平臺(tái)進(jìn)行識(shí)別骨骼,設(shè)計(jì)完成人體上身動(dòng)作姿勢(shì)庫(kù)[10],并將身體動(dòng)作與控制命令相結(jié)合,使用藍(lán)牙通信完成對(duì)下位機(jī)自衡車(chē)的控制。將體感識(shí)別與自衡車(chē)結(jié)合的交互系統(tǒng)對(duì)機(jī)器人在復(fù)雜環(huán)境中導(dǎo)航定位、科學(xué)勘探等工作領(lǐng)域有著重要意義[11-12]。
系統(tǒng)的圖像采集模塊選用Microsoft Kinect體感攝像頭;被控對(duì)象為兩輪自衡車(chē);PC機(jī)與自平衡車(chē)之間以藍(lán)牙方式進(jìn)行通信,兩者將IP設(shè)置在同一段建立TCP連接,完成數(shù)據(jù)包的雙向傳輸。系統(tǒng)總體框圖如圖1所示。
圖1 系統(tǒng)總體框圖
開(kāi)發(fā)平臺(tái)為Visual Studio 2012 Kinect SDK,在該版本中可選擇C++或者C#作為開(kāi)發(fā)語(yǔ)言對(duì)Kinect獲取深度圖像及骨骼模型數(shù)據(jù)進(jìn)行算法識(shí)別,識(shí)別出的肢體動(dòng)作與所設(shè)置的動(dòng)作庫(kù)進(jìn)行比較,自衡車(chē)執(zhí)行對(duì)應(yīng)控制命令。
體感(人體姿態(tài))識(shí)別主要通過(guò)Kinect 攝像頭獲取深度圖像,Kinect有3個(gè)鏡頭,中間的是RGB攝像頭,采集彩色圖像;左右兩邊的攝像頭分別是紅外射線發(fā)射器和紅外CMOS攝像頭,紅外射線發(fā)射器發(fā)出紅外光覆蓋整個(gè)待測(cè)區(qū)域。紅外CMOS攝像頭接收發(fā)射光線得到景深圖像,識(shí)別出人體骨骼關(guān)節(jié)點(diǎn),并提取骨骼關(guān)節(jié)點(diǎn)的空間坐標(biāo)[13-14],通過(guò)空間向量計(jì)算關(guān)節(jié)點(diǎn)之間的距離與角度,將計(jì)算結(jié)果與預(yù)先定義的人體姿態(tài)庫(kù)進(jìn)行比對(duì),并將人體姿態(tài)動(dòng)作轉(zhuǎn)換為控制命令,通過(guò)藍(lán)牙傳輸模塊與自衡車(chē)建立連接,完成數(shù)據(jù)的交換,從而實(shí)現(xiàn)人體姿態(tài)的識(shí)別[15],人體姿態(tài)識(shí)別流程圖如圖2所示。
人體的姿態(tài)結(jié)構(gòu)單元為人體的關(guān)節(jié),每個(gè)關(guān)節(jié)活動(dòng)時(shí)都有不同的方向和角度,判斷人體姿態(tài)信息需要獲取關(guān)節(jié)點(diǎn)的位置信息,計(jì)算各關(guān)節(jié)活動(dòng)的角度。Kinect使用的空間坐標(biāo)系的x、y軸的零點(diǎn)與傳統(tǒng)空間坐標(biāo)系相同,z軸的坐標(biāo)零點(diǎn)為Kinect攝像頭,正方向?yàn)镵inect指向的正方向。坐標(biāo)系下P1(x1,y1,z1)和P2(x2,y2,z2)是兩個(gè)不同坐標(biāo)點(diǎn),組成的向量為
圖2 人體姿態(tài)識(shí)別流程圖
P1P2=(x2-x1,y2-y1,z2-z1)
(1)
若第3點(diǎn)P3(x3,y3,z3)不在P1P2所在直線上,則P1P2P3所組成的夾角可表示為
(2)
因此,可將所獲取關(guān)節(jié)點(diǎn)的角度計(jì)算轉(zhuǎn)化為向量夾角的計(jì)算。人體骨骼關(guān)節(jié)圖像如圖3所示,由于左上肢與右上肢關(guān)節(jié)角度計(jì)算相同,以左側(cè)為例計(jì)算左上肢各關(guān)節(jié)角度。
圖3 人體骨骼關(guān)節(jié)圖像
2.2.1 手部握拳、張合與V字手動(dòng)作
由于Kinect攝像頭只能采集到骨骼信息,無(wú)法精確到手指狀態(tài),因此對(duì)手部的握拳與張合狀態(tài)通過(guò)計(jì)算指間D到掌根節(jié)點(diǎn)的C距離;而V字手的判斷則通過(guò)計(jì)算∠ECD,計(jì)算公式為
|CD|=
(3)
(4)
2.2.2 手臂平伸與直角上伸動(dòng)作
手臂平伸與手臂直角上伸的判斷可計(jì)算左肘關(guān)節(jié)角度,構(gòu)造左手肘關(guān)節(jié)點(diǎn)的空間夾角兩邊所在的一組向量,左肘關(guān)節(jié)角度計(jì)算公式為
(5)
2.2.3 肘部繞上臂旋轉(zhuǎn)角度
左肘關(guān)節(jié)繞上臂旋轉(zhuǎn)時(shí)所產(chǎn)生的角度,可看作兩個(gè)相交平面FAB與ABC的夾角,即圖中平面S1與S2的夾角。兩個(gè)非共線向量所在平面的法向量為
(6)
所以,計(jì)算平面FAB的法向量為
(AFyABz-AFzABy)i-(AFxABz-AFzABx)j+
(AFxABy-AFyABx)k
(7)
計(jì)算平面ABC的法向量為
(BAyBCz-BAzBCy)i-(BAxBCz-BAzBCx)j+
(BAxBCy-BAyBCx)k
(8)
因此,左肘關(guān)節(jié)旋轉(zhuǎn)角度可表示為
(9)
2.2.4 肩關(guān)節(jié)角度
肩關(guān)節(jié)的角度為上臂與雙肩所在直線組成的平面和雙肩所在直線與脊柱所組成的平面之間的夾角,圖中可看作平面FAB與GFA的夾角,即圖中平面S1與S3的夾角。計(jì)算平面FAB的法向量為
(AFyABz-AFzABy)i-(AFxABz-AFzABx)j+
(AFxABy-AFyABx)k
(10)
計(jì)算平面GFA的法向量為
(FAyFGz-FAzFGy)i-(FAxFGz-FAzFGx)j+
(FAxFGy-FAyFGx)k
(11)
因此,肩關(guān)節(jié)角度計(jì)算公式為
(12)
自衡車(chē)控制系統(tǒng)主要由單片機(jī)(MCU)模塊、姿態(tài)傳感器模塊、編碼器、電機(jī)驅(qū)動(dòng)模塊、穩(wěn)壓模塊、顯示模塊及藍(lán)牙模塊組成。自衡車(chē)通過(guò)姿態(tài)傳感器監(jiān)控車(chē)體俯仰角和其角度的變化率,利用微控制器(MCU)得出數(shù)據(jù)和指令,控制電動(dòng)機(jī)產(chǎn)生不同的扭轉(zhuǎn)力來(lái)實(shí)現(xiàn)車(chē)體平衡。采用MPU6050六軸傳感器采集角速度和角加速度,利用卡爾曼濾波法融合陀螺儀和加速度計(jì)的數(shù)據(jù),補(bǔ)償陀螺儀的累計(jì)誤差和加速度計(jì)的動(dòng)態(tài)誤差,使姿態(tài)近似值得到優(yōu)化。最終應(yīng)用PID控制算法,利用脈沖寬度調(diào)制技術(shù)調(diào)節(jié)電動(dòng)機(jī)的轉(zhuǎn)矩,使車(chē)體自衡并能夠直立行走。
人體的身體姿態(tài)可以表達(dá)很多的含義,從構(gòu)成部件來(lái)看,可分為頭部、四肢和軀干;從運(yùn)動(dòng)上來(lái)看,可分為特定動(dòng)作和整體位移。為了實(shí)現(xiàn)對(duì)自衡車(chē)的控制,需要對(duì)人體姿態(tài)進(jìn)行合理的規(guī)劃和定義。基于體感識(shí)別控制自衡車(chē)其實(shí)是將日常人體習(xí)慣動(dòng)作進(jìn)行簡(jiǎn)化、定義,使自衡車(chē)能夠“看懂”用戶的身體動(dòng)作的含義,進(jìn)而對(duì)用戶的動(dòng)作做出相應(yīng)的反應(yīng)。動(dòng)作的定義應(yīng)該符合明確性、習(xí)慣性與易操作性的原則。根據(jù)設(shè)計(jì)要求,對(duì)5種姿態(tài)進(jìn)行了定義,可控制車(chē)體實(shí)現(xiàn)前進(jìn)、后退、停止、左轉(zhuǎn)、右轉(zhuǎn)的動(dòng)作,動(dòng)作定義與識(shí)別結(jié)果統(tǒng)計(jì)如表1所示。其中,雙臂上伸、V字手控制小車(chē)后退,后退動(dòng)作人體姿態(tài)獲取如圖4所示。
圖4 后退動(dòng)作人體姿態(tài)獲取
表1 動(dòng)作定義與識(shí)別結(jié)果統(tǒng)計(jì)
系統(tǒng)聯(lián)機(jī)后,分別對(duì)不同人員進(jìn)行動(dòng)作識(shí)別測(cè)試,體感識(shí)別結(jié)果滿足人機(jī)交互控制要求。其中,人體向右打舵動(dòng)作控制自衡車(chē)實(shí)現(xiàn)右轉(zhuǎn),右轉(zhuǎn)姿態(tài)獲取及自衡車(chē)動(dòng)作圖如圖5所示。
圖5 右轉(zhuǎn)姿態(tài)獲取及自衡車(chē)動(dòng)作圖
本研究設(shè)計(jì)了一款基于體感識(shí)別的自衡車(chē)交互控制系統(tǒng),使用微軟Kinect攝像頭和Visual Studio 2012 Kinect平臺(tái)來(lái)實(shí)現(xiàn)。由于Kinect攝像頭采集到的圖像是人體的骨骼圖像信息,動(dòng)作識(shí)別的結(jié)果不受人體外形的影響,因此,實(shí)驗(yàn)過(guò)程邀請(qǐng)了不同性別,不同高矮胖瘦的人員進(jìn)行測(cè)試,動(dòng)作識(shí)別的結(jié)果良好。研究結(jié)果表明:在有效識(shí)別距離為1~5 m范圍內(nèi),動(dòng)作正確識(shí)別率高達(dá)96%以上,具有較高的識(shí)別成功率,能夠正確地控制自衡車(chē)實(shí)現(xiàn)前進(jìn)、后退、停止、左轉(zhuǎn)及右轉(zhuǎn)的相應(yīng)動(dòng)作。所以,基于Kinect攝像頭進(jìn)行體感識(shí)別可以有效的完成對(duì)自衡車(chē)的控制,具有良好的可操控性。能夠滿足復(fù)雜環(huán)境的人機(jī)交互控制的需求,對(duì)無(wú)人環(huán)境下機(jī)器人進(jìn)行勘探、科考以及救援都有著實(shí)際意義。