李佳怡,劉東旭
(吉林化工學院 信息與控制工程學院,吉林 吉林 132000)
隨著科技的不斷發展,人機交互技術逐步由傳統的鍵盤鼠標的接觸式控制轉向基于動作識別的體感交互模式[1-2]。而動作識別的研究意義則在于能夠使計算機直接“看懂”人做的各種動作,即可以識別出人的肢體動作語言,并按預定規則轉換成控制指令,從而控制對象[3]。這種新模式的代表設備就是Kinect 3D體感攝影頭。Kinect 3D體感攝像頭是美國微軟公司的一款體感外設,利用軟件可以調節攝像頭的上下角度,通過身體動作或者語音就能夠直接完成操作,使其具有更好的視場[4-5]。
利用Kinect 3D攝像頭作為主要傳感器,計算機通過采集的數據分析骨骼圖像本身,判斷包含的信息,由此獲取人體姿態信息[6]。傳統的體感識別方法有基于嵌入式傳感器和基于計算機視覺的兩種方法。前者優點是響應速度快、精度高,缺點是需要用戶佩戴特定裝置,行動受限;而基于計算機視覺的方法,用戶不需要佩戴任何東西,而用專用的深度攝像頭則可以直接得到深度圖像,使用范圍更加廣泛、方便[7-9]。
本文基于Prime Sense公司的新型景深成像原理以及通過深度圖像區域特征值和隨機森林算法獲得骨骼坐標信息,并使用微軟Kinect和Visual Studio 2012 Kinect SDK平臺進行識別骨骼,設計完成人體上身動作姿勢庫[10],并將身體動作與控制命令相結合,使用藍牙通信完成對下位機自衡車的控制。將體感識別與自衡車結合的交互系統對機器人在復雜環境中導航定位、科學勘探等工作領域有著重要意義[11-12]。
系統的圖像采集模塊選用Microsoft Kinect體感攝像頭;被控對象為兩輪自衡車;PC機與自平衡車之間以藍牙方式進行通信,兩者將IP設置在同一段建立TCP連接,完成數據包的雙向傳輸。系統總體框圖如圖1所示。

圖1 系統總體框圖
開發平臺為Visual Studio 2012 Kinect SDK,在該版本中可選擇C++或者C#作為開發語言對Kinect獲取深度圖像及骨骼模型數據進行算法識別,識別出的肢體動作與所設置的動作庫進行比較,自衡車執行對應控制命令。
體感(人體姿態)識別主要通過Kinect 攝像頭獲取深度圖像,Kinect有3個鏡頭,中間的是RGB攝像頭,采集彩色圖像;左右兩邊的攝像頭分別是紅外射線發射器和紅外CMOS攝像頭,紅外射線發射器發出紅外光覆蓋整個待測區域。紅外CMOS攝像頭接收發射光線得到景深圖像,識別出人體骨骼關節點,并提取骨骼關節點的空間坐標[13-14],通過空間向量計算關節點之間的距離與角度,將計算結果與預先定義的人體姿態庫進行比對,并將人體姿態動作轉換為控制命令,通過藍牙傳輸模塊與自衡車建立連接,完成數據的交換,從而實現人體姿態的識別[15],人體姿態識別流程圖如圖2所示。
人體的姿態結構單元為人體的關節,每個關節活動時都有不同的方向和角度,判斷人體姿態信息需要獲取關節點的位置信息,計算各關節活動的角度。Kinect使用的空間坐標系的x、y軸的零點與傳統空間坐標系相同,z軸的坐標零點為Kinect攝像頭,正方向為Kinect指向的正方向。坐標系下P1(x1,y1,z1)和P2(x2,y2,z2)是兩個不同坐標點,組成的向量為

圖2 人體姿態識別流程圖
P1P2=(x2-x1,y2-y1,z2-z1)
(1)
若第3點P3(x3,y3,z3)不在P1P2所在直線上,則P1P2P3所組成的夾角可表示為

(2)
因此,可將所獲取關節點的角度計算轉化為向量夾角的計算。人體骨骼關節圖像如圖3所示,由于左上肢與右上肢關節角度計算相同,以左側為例計算左上肢各關節角度。

圖3 人體骨骼關節圖像
2.2.1 手部握拳、張合與V字手動作
由于Kinect攝像頭只能采集到骨骼信息,無法精確到手指狀態,因此對手部的握拳與張合狀態通過計算指間D到掌根節點的C距離;而V字手的判斷則通過計算∠ECD,計算公式為
|CD|=
(3)
(4)
2.2.2 手臂平伸與直角上伸動作
手臂平伸與手臂直角上伸的判斷可計算左肘關節角度,構造左手肘關節點的空間夾角兩邊所在的一組向量,左肘關節角度計算公式為

(5)
2.2.3 肘部繞上臂旋轉角度
左肘關節繞上臂旋轉時所產生的角度,可看作兩個相交平面FAB與ABC的夾角,即圖中平面S1與S2的夾角。兩個非共線向量所在平面的法向量為

(6)
所以,計算平面FAB的法向量為

(AFyABz-AFzABy)i-(AFxABz-AFzABx)j+
(AFxABy-AFyABx)k
(7)
計算平面ABC的法向量為

(BAyBCz-BAzBCy)i-(BAxBCz-BAzBCx)j+
(BAxBCy-BAyBCx)k
(8)
因此,左肘關節旋轉角度可表示為

(9)
2.2.4 肩關節角度
肩關節的角度為上臂與雙肩所在直線組成的平面和雙肩所在直線與脊柱所組成的平面之間的夾角,圖中可看作平面FAB與GFA的夾角,即圖中平面S1與S3的夾角。計算平面FAB的法向量為

(AFyABz-AFzABy)i-(AFxABz-AFzABx)j+
(AFxABy-AFyABx)k
(10)
計算平面GFA的法向量為

(FAyFGz-FAzFGy)i-(FAxFGz-FAzFGx)j+
(FAxFGy-FAyFGx)k
(11)
因此,肩關節角度計算公式為

(12)
自衡車控制系統主要由單片機(MCU)模塊、姿態傳感器模塊、編碼器、電機驅動模塊、穩壓模塊、顯示模塊及藍牙模塊組成。自衡車通過姿態傳感器監控車體俯仰角和其角度的變化率,利用微控制器(MCU)得出數據和指令,控制電動機產生不同的扭轉力來實現車體平衡。采用MPU6050六軸傳感器采集角速度和角加速度,利用卡爾曼濾波法融合陀螺儀和加速度計的數據,補償陀螺儀的累計誤差和加速度計的動態誤差,使姿態近似值得到優化。最終應用PID控制算法,利用脈沖寬度調制技術調節電動機的轉矩,使車體自衡并能夠直立行走。
人體的身體姿態可以表達很多的含義,從構成部件來看,可分為頭部、四肢和軀干;從運動上來看,可分為特定動作和整體位移。為了實現對自衡車的控制,需要對人體姿態進行合理的規劃和定義。基于體感識別控制自衡車其實是將日常人體習慣動作進行簡化、定義,使自衡車能夠“看懂”用戶的身體動作的含義,進而對用戶的動作做出相應的反應。動作的定義應該符合明確性、習慣性與易操作性的原則。根據設計要求,對5種姿態進行了定義,可控制車體實現前進、后退、停止、左轉、右轉的動作,動作定義與識別結果統計如表1所示。其中,雙臂上伸、V字手控制小車后退,后退動作人體姿態獲取如圖4所示。

圖4 后退動作人體姿態獲取

表1 動作定義與識別結果統計
系統聯機后,分別對不同人員進行動作識別測試,體感識別結果滿足人機交互控制要求。其中,人體向右打舵動作控制自衡車實現右轉,右轉姿態獲取及自衡車動作圖如圖5所示。

圖5 右轉姿態獲取及自衡車動作圖
本研究設計了一款基于體感識別的自衡車交互控制系統,使用微軟Kinect攝像頭和Visual Studio 2012 Kinect平臺來實現。由于Kinect攝像頭采集到的圖像是人體的骨骼圖像信息,動作識別的結果不受人體外形的影響,因此,實驗過程邀請了不同性別,不同高矮胖瘦的人員進行測試,動作識別的結果良好。研究結果表明:在有效識別距離為1~5 m范圍內,動作正確識別率高達96%以上,具有較高的識別成功率,能夠正確地控制自衡車實現前進、后退、停止、左轉及右轉的相應動作。所以,基于Kinect攝像頭進行體感識別可以有效的完成對自衡車的控制,具有良好的可操控性。能夠滿足復雜環境的人機交互控制的需求,對無人環境下機器人進行勘探、科考以及救援都有著實際意義。