龍海飛, 劉詠梅, 李相旭, 畢德學(xué)
(1.廈門理工學(xué)院 機(jī)械與汽車工程學(xué)院,福建 廈門 361024;2.北京出入境檢驗(yàn)檢疫局,北京 100026;3.天津科技大學(xué) 機(jī)械工程學(xué)院,天津 300222)
世界衛(wèi)生組織在2008年的一份報(bào)告里指出,全球大概有6.5億的殘障人士(包括殘疾人士、老年人士、病傷人士),約占全球總?cè)丝跀?shù)的10%[1]。而在這6.5億的殘障人士中,大概有15%需要輔助器具,據(jù)此進(jìn)行粗略的估算,全世界大約有將近1億的殘障人士需要輔助器具。因此開發(fā)輔助器具的相關(guān)技術(shù)和產(chǎn)品,利用科技的力量來提升殘障人士的生活質(zhì)量,是很多國家研究的目標(biāo),目前一些發(fā)達(dá)國家技術(shù)水平都處于領(lǐng)先地位,我國也在這方面加大了資金投入、加快了研究步伐[2-4]。微軟 Kinect的推出,可以實(shí)現(xiàn)很多的人機(jī)交互方式,且成本和開發(fā)難度較低,本文采用基于Kinect的手勢識別控制系統(tǒng)實(shí)現(xiàn)對重障者輔助洗浴器具的控制,重障者輔助洗浴器具的三維模型如圖1所示。
圖1 重障者輔助洗浴器具三維模型
重障者輔助洗浴器具由移動(dòng)裝置、升降裝置和洗浴椅3部分構(gòu)成。洗浴椅通過S架以及S架與升降裝置中的外管固定零件組成一個(gè)整體,洗浴椅升降通過升降裝置帶動(dòng),其中升降裝置的升降主要通過推桿電機(jī)帶動(dòng)外管升降實(shí)現(xiàn)。洗浴椅由背板、坐板以及腿板構(gòu)成,背板與坐板以及坐板與腿板分別通過轉(zhuǎn)軸連接,轉(zhuǎn)軸靠近外管部分各有1個(gè)帶輪,帶輪通過與S架相連的無刷直流電機(jī)帶動(dòng)來實(shí)現(xiàn)轉(zhuǎn)軸的轉(zhuǎn)動(dòng),從而可以實(shí)現(xiàn)患者的抬背和曲腿。由于行動(dòng)不便,重障者需要躺在放入浴缸中的洗浴椅上,并在護(hù)理人員幫助下進(jìn)行洗浴。護(hù)理人員通過一系列簡單的手勢,經(jīng)Kinect采集傳入到PC中并對其進(jìn)行計(jì)算和處理,然后通過PC和單片機(jī)的通信設(shè)備將控制指令傳入到單片機(jī)中,最后實(shí)現(xiàn)對電機(jī)的控制。
本文采用多層次的系統(tǒng)框架設(shè)計(jì),底層是Kinect設(shè)備接收手部圖像,驅(qū)動(dòng)采用開源Open-NI框架,通過研究OpenNI的模塊原理實(shí)現(xiàn)識別手勢的算法。由于本系統(tǒng)對手勢的定義簡單,故系統(tǒng)對信息的計(jì)算量不大,可以很好地達(dá)到實(shí)時(shí)性的要求,很容易實(shí)現(xiàn)對洗浴椅的控制。
基于手勢識別的控制系統(tǒng)流程圖如圖2所示,本控制系統(tǒng)由手勢識別和洗浴椅的控制2個(gè)部分組成。其中手勢識別部分是通過Kinect采集手勢信號,調(diào)用開源OpenNI開發(fā)包中相關(guān)函數(shù)實(shí)現(xiàn)手勢識別的算法,將能夠識別的特征手勢轉(zhuǎn)換為相應(yīng)的控制指令;洗浴椅的控制部分是通過PC與單片機(jī)的通信設(shè)備將控制指令傳送給以單片機(jī)為核心的控制系統(tǒng),以實(shí)現(xiàn)對電機(jī)的控制,從而達(dá)到控制洗浴器具的目的。
圖2 系統(tǒng)流程圖
重障者輔助洗澡器具的控制主要包括床體的升降、背部姿態(tài)的調(diào)整和腿部姿態(tài)的調(diào)整3個(gè)部分,并且每部分的控制是由各自的電機(jī)實(shí)現(xiàn)的。選用AVR單片機(jī)作為主控芯片來實(shí)現(xiàn)對電機(jī)的控制。下位AVR單片機(jī)接收PC相應(yīng)的指令是通過RS-232C異步串口通信總線實(shí)現(xiàn)的,對電機(jī)相應(yīng)的控制指令進(jìn)行如下約定。
(1)電機(jī)的選擇。分別將控制床體的升降、腿部姿態(tài)和背部姿態(tài)的電機(jī)定義為1號、2號和3號電機(jī),當(dāng)相應(yīng)的電機(jī)被選中時(shí),PC機(jī)向下位機(jī)分別發(fā)送“1”“2”“3”指令。
(2)電機(jī)的正反轉(zhuǎn)選擇。當(dāng)檢測到電機(jī)正轉(zhuǎn)信號時(shí),PC機(jī)向下位機(jī)發(fā)送“P”指令;當(dāng)檢測到電機(jī)反轉(zhuǎn)信號時(shí),PC機(jī)向下位機(jī)發(fā)送“N”指令。
(3)電機(jī)速度的控制。當(dāng)檢測到電機(jī)加速信號時(shí),PC機(jī)向下位機(jī)發(fā)送“U”指令;當(dāng)檢測到電機(jī)減速信號時(shí),PC機(jī)向下位機(jī)發(fā)送“D”指令。
(4)電機(jī)的停止。當(dāng)檢測到電機(jī)停止信號時(shí),PC機(jī)向下位機(jī)發(fā)送“S”指令。
Kinect是美國微軟公司于2010年11月正式推出的一種3D體感攝影機(jī),起初是為XBOX 360游戲機(jī)開發(fā)的一款體感設(shè)備,Kinect外觀圖如圖3所示。
Kinect與傳統(tǒng)的二維攝像頭相比具有很大的優(yōu)勢,它不僅具有傳統(tǒng)攝像頭能獲取物體顏色信息的功能,還可以同時(shí)獲取物體的深度信息,從而能夠幫助數(shù)字設(shè)備更好地感知外界。Kinect光學(xué)部分有紅外線發(fā)射裝置、RGB VGA彩色攝像頭組和3D深度感應(yīng)器3個(gè)攝像頭。紅外線發(fā)射裝置發(fā)出一道“激光”覆蓋了整個(gè)Kinect的可視范圍,攝像頭組接收反射光線用來識別用戶。紅外攝像頭識別的圖像是一個(gè)“深度場”(Depth Field),其中每一像素的顏色代表該點(diǎn)物體到攝像頭的距離,比如離攝像頭近的身體部位呈現(xiàn)亮紅色、綠色等,而離攝像頭遠(yuǎn)的身體部位則呈暗灰色。通過景深攝像頭和RGB攝像頭的配合,Kinect可將實(shí)物的3D影像投放到屏幕之中,同時(shí)拍攝彩色圖像和紅外圖像,從而捕捉到用戶的手勢動(dòng)作。
圖3 Kinect外觀圖
為了滿足系統(tǒng)設(shè)計(jì)要求,手部與Kinect攝像頭的距離為1.5~2.0m,背景的顏色單一。此外,Kinect的垂直可視角度為43°,故手部的手心平面與Kinect的夾角[5]應(yīng)小于43°。Kinect所獲取的深度數(shù)據(jù)是以640×480的圖像存在的。在手勢識別過程中,需要根據(jù)手部與Kinect的實(shí)際距離進(jìn)行判斷,故要將像素的數(shù)據(jù)轉(zhuǎn)換為實(shí)際距離的數(shù)據(jù)。設(shè)Kinect拍攝的深度圖x-y平面尺寸為w×h,則實(shí)際距離的坐標(biāo)位置如圖4所示,其中,零點(diǎn)坐標(biāo)為彩色攝像頭光心的位置。
圖4 Kinect坐標(biāo)示意圖
Kinect返回的深度值只是一個(gè)相對的數(shù)據(jù)。假定Kinect任意返回的一點(diǎn)深度值為r,則在Kinect的自我調(diào)整過程中,可得到實(shí)際距離的深度值[6]為:
其中,a=0.123 6m;q=0.037m。
由(1)式可解得像素位置為(m,n,p)點(diǎn)的實(shí)際位置(x,y,z),其計(jì)算公式[7]為:
其中,b=0.002 1。
OpenNI為開發(fā)者提供了一組使用體感(Natural Interaction)程序的API接口,它是一個(gè)多語言、跨平臺的框架,可以實(shí)現(xiàn)與外接硬件的溝通。
NITE控制是OpenNI的中間層部分,包括一些可以識別用戶和跟蹤用戶動(dòng)作的計(jì)算機(jī)視覺算法。NITE控制的設(shè)計(jì)理念是基于手勢控制和全身控制的2個(gè)模塊,本系統(tǒng)主要應(yīng)用了手勢控制模塊。手勢的識別是由NITE Controls中手勢檢測器實(shí)現(xiàn)的,NITE控制為開發(fā)者提供了一些專業(yè)的手勢檢測器,這些檢測器在NITE內(nèi)部是以類的形式存在的,它可以利用自身內(nèi)部的一些算法,實(shí)現(xiàn)對手勢的識別和理解。本文用到的手勢檢測器,見表1所列。
表1 手勢檢測器簡介
Kinect檢測到預(yù)定義的手勢時(shí),該手勢會觸發(fā)相應(yīng)的控制信號流,實(shí)現(xiàn)人機(jī)的交互。控制信號流的運(yùn)行機(jī)制如下。
(1)當(dāng) Kinect檢測到“Wave”或者“Raise-Hand”手勢時(shí)對話開始,此時(shí)對話管理器(Session Manager)將路由節(jié)點(diǎn)FlowRouter置為活動(dòng)狀態(tài)(SetActive)。
(2)此時(shí)FlowRouter將數(shù)據(jù)流路由至水平滑塊MainSlide 1,該滑塊主要有懸掛和選擇2個(gè)狀態(tài)。當(dāng)手勢在水平方向來回移動(dòng)時(shí),MainSlide 1處于懸掛狀態(tài);當(dāng)檢測到向前推的手勢時(shí),可以發(fā)出MainSlide 1的選擇狀態(tài),即選擇1號、2號或3號電機(jī)。
(3)當(dāng)電機(jī)選擇后,F(xiàn)lowRouter將數(shù)據(jù)流路由至SteadyDetector 1,即手勢穩(wěn)定狀態(tài)檢測器。該狀態(tài)為過渡狀態(tài),主要是確保其他手勢狀態(tài)的有效檢測。
(4)當(dāng)SteadyDetector 1檢測到手勢的穩(wěn)定狀態(tài)時(shí),F(xiàn)lowRouter將數(shù)據(jù)流路由至水平滑塊MainSlide 2,實(shí)現(xiàn)電機(jī)正反轉(zhuǎn)的選擇。
(5)當(dāng)電機(jī)的正反轉(zhuǎn)選擇后,F(xiàn)lowRouter將數(shù)據(jù)流路由至Box,Box通過BroadCaster對PushDetector、FlowRouter 2和CircleDetector進(jìn)行廣播。此時(shí)如果要停止電機(jī)時(shí),則觸發(fā)Push-Detector或者CircleDetector。如果要控制電機(jī)的速度時(shí),先觸發(fā)SteadyDetector 2,然后選擇SwipeUp或者SwipeDown。
該部分在Visual C++2010環(huán)境下,利用MFC框架實(shí)現(xiàn)了手勢信號的識別和與下位單片機(jī)的實(shí)時(shí)通信[8]。本系統(tǒng)實(shí)現(xiàn)了手動(dòng)和手勢的控制,手勢控制通過Kinect的手勢識別實(shí)現(xiàn)。
(1)控制電機(jī)的選擇。左右進(jìn)行一定角度的擺手,系統(tǒng)即會識別,開始進(jìn)行電機(jī)的選擇,這時(shí)系統(tǒng)可以識別沿水平方向手部滑動(dòng)的動(dòng)作,水平方向劃分為3個(gè)區(qū)域,分別對應(yīng)3個(gè)電機(jī),即高度調(diào)節(jié)電機(jī)、椅前角度調(diào)節(jié)電機(jī)和椅背角度調(diào)節(jié)電機(jī)。手部滑到不同的區(qū)域,即出現(xiàn)了不同電機(jī)區(qū)域界面,如圖5所示。
圖5 手部滑移到不同電機(jī)區(qū)域的界面
手部滑移到要控制的電機(jī)區(qū)域,然后手部沿著豎直方向向下,即選中了1個(gè)需要控制的電機(jī)。選中高度調(diào)節(jié)的電機(jī),就會傳輸給單片機(jī)信號“1”;選中椅前角度調(diào)節(jié),就會傳輸給單片機(jī)信號“2”;選中椅背角度調(diào)節(jié)的電機(jī),就會傳輸給單片機(jī)信號“3”。
(2)電機(jī)正反轉(zhuǎn)的選擇。水平方向分為2個(gè)區(qū)域,分別對應(yīng)正轉(zhuǎn)和反轉(zhuǎn)2個(gè)電機(jī)的方向控制。在水平方向進(jìn)行手部的左右滑移,系統(tǒng)即會識別,可以開始進(jìn)行方向的選擇,如圖6所示。
圖6 手部滑移到方向選擇區(qū)域的界面
手部滑移到方向控制的區(qū)域,然后手部沿著豎直方向向下,即選中了相應(yīng)的方向控制。選中正轉(zhuǎn),就會傳輸給單片機(jī)信號“P”;選中反轉(zhuǎn),就會傳輸給單片機(jī)信號“N”。
(3)電機(jī)速度的調(diào)節(jié)與停止。水平方向分為2個(gè)區(qū)域,分別對應(yīng)加速和減速2種速度控制。手部進(jìn)行水平方向的左右滑動(dòng),即可選中1種速度控制,手部沿著豎直方向向上系統(tǒng)識別,這時(shí)會傳輸給單片機(jī)信號“U”,單片機(jī)就會控制電機(jī)速度增加1級;手部沿著豎直方向向下系統(tǒng)識別,會傳輸給單片機(jī)信號“D”,單片機(jī)就會控制電機(jī)速度減1級,如圖7所示。
圖7 手部滑移到速度區(qū)域的界面
當(dāng)手部焦點(diǎn)消失或手部進(jìn)行向前推動(dòng)時(shí),系統(tǒng)識別,這時(shí)會傳輸給單片機(jī)信號“S”,單片機(jī)就會控制電機(jī)停止運(yùn)轉(zhuǎn)。
本實(shí)驗(yàn)主要測試了距離對識別效果的影響、各種手勢識別的靈敏度、系統(tǒng)對手勢的操作是否反應(yīng)及時(shí)等。當(dāng)Kinect攝像頭檢測到手部動(dòng)作時(shí),系統(tǒng)會判斷是否與事先定義好的手勢相匹配,如正確,則通過串口通信向以單片機(jī)為核心的控制系統(tǒng)發(fā)出控制指令,使洗浴器具做出相應(yīng)的動(dòng)作;如錯(cuò)誤,則系統(tǒng)重新對手勢進(jìn)行檢測,直到正確為止。本系統(tǒng)定義了6種手勢動(dòng)作,它們所代表的指令見表2所列。
表2 動(dòng)態(tài)手勢的定義
系統(tǒng)對所定義的手勢識別實(shí)驗(yàn)結(jié)果見表3所列,從表3可以得出,對系統(tǒng)所定義的6種手勢平均識別率可達(dá)96%,平均響應(yīng)時(shí)間要小于49ms,因此本系統(tǒng)具備良好的實(shí)時(shí)性,故可實(shí)現(xiàn)對洗浴器具實(shí)時(shí)控制的要求。
表3 定義的手勢識別實(shí)驗(yàn)結(jié)果
洗浴姿勢主要有仰姿和坐姿2種,人體最舒適洗浴姿勢一般為背部平躺30°,腿部彎曲10°,洗浴床實(shí)驗(yàn)運(yùn)動(dòng)示意圖,如圖8所示。
圖8 洗浴床實(shí)驗(yàn)運(yùn)動(dòng)示意圖
圖8中,背板活動(dòng)范圍為40°,腿板活動(dòng)范圍為50°,從而可以使洗浴者在該范圍內(nèi)隨意調(diào)整姿勢。在本實(shí)驗(yàn)中,實(shí)驗(yàn)者經(jīng)過對本系統(tǒng)所定義的手勢簡單了解后,就可以方便地對洗浴床進(jìn)行控制。
本控制系統(tǒng)采用了一種全新的、成本較低的微軟體感控制器Kinect,通過手勢識別這種友好的人機(jī)交互方式來實(shí)現(xiàn)對洗澡椅的控制,從而方便了重障者的生活。本系統(tǒng)具有成本比較低廉、用戶使用方便、控制功能良好等特點(diǎn)。
隨著體感設(shè)備的進(jìn)一步發(fā)展和改進(jìn),其應(yīng)用將越來越廣泛,識別的部位和方式也會有多種,如對全身、多人的識別等。此外,在手勢識別的實(shí)驗(yàn)中,會有一些相似信號的干擾,進(jìn)一步提高識別率和增強(qiáng)系統(tǒng)對干擾的魯棒性,將是下一步要完成的工作。
[1] Center for Health Workforce Studies,University at Albany.The impact of the aging population on the health workforce in the United States:summary of key findings[R].U-niversity at Albany,2006.
[2] 陳振聲.中國殘疾人輔助器服務(wù)體系的構(gòu)建[J].中國康復(fù)理論與實(shí)驗(yàn),2011,17(6):83-85.
[3] 王健強(qiáng),程 汀.SCARA機(jī)器人結(jié)構(gòu)設(shè)計(jì)及軌跡規(guī)劃算法[J].合 肥 工業(yè) 大 學(xué) 學(xué) 報(bào):自 然 科 學(xué) 版,2008,31(7):1026-1028,1041.
[4] 羅元,謝彧,張 毅.基于Kinect傳感器的智能輪椅手勢控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].機(jī)器人,2012(1):110-113.
[5] 張 毅,張 爍,羅 元,等.基于Kinect深度圖像信息的手勢軌跡識別及應(yīng)用 [J].計(jì)算機(jī)應(yīng)用研究,2012(9):3547-3550.
[6] Raheja J L,Chaudhary A,Singal K.Tracking of fingertips and centres of palm using KINECT[C]//2011Third International Conference on Computational Intelligence,Modelling and Simulation(CIMSiM),Langkawi,Malaysia,2011:248-252.
[7] OpenKinect Organization.Imaging information for Kinect[EB/OL].[2011-06-07].http://openkinect.org/wiki/Imaging-Informationg.
[8] 王 坤,高 簧.基于VC++實(shí)現(xiàn)串口通信的方法[D].西安:西安科技大學(xué),2010.