姚 托,毛麗民,王 濤,金宇豪
(常熟理工學(xué)院 電氣與自動(dòng)化工程學(xué)院,江蘇 常熟 215500)
隨著圖像處理技術(shù)的發(fā)展,視覺跟蹤技術(shù)得到了廣泛的關(guān)注. 基于視覺的跟蹤技術(shù)是通過獲取圖像信息來得到跟蹤者的姿態(tài)信息,從而對不同的狀態(tài)進(jìn)行分類. 相比以前一些傳統(tǒng)的人機(jī)交互方式,基于視覺的識(shí)別技術(shù)更為自然,是目前的研究熱點(diǎn)[1-3].
在基于康復(fù)機(jī)器人的人機(jī)交互系統(tǒng)中,有基于表面肌電信號(hào)的控制策略、基于腦電信號(hào)的控制策略和基于系統(tǒng)動(dòng)力學(xué)模型的控制策略等. 傳統(tǒng)的人體行為識(shí)別是基于RGB圖像的行為識(shí)別,但該方法把原本三維的立體信息轉(zhuǎn)換成了二維的平面信息,會(huì)造成識(shí)別準(zhǔn)確率的下降[4-5].
本文利用Kinect體感器能夠同時(shí)獲取彩色圖像、深度信息,實(shí)現(xiàn)運(yùn)動(dòng)行為的識(shí)別,為康復(fù)輪椅的跟隨系統(tǒng)設(shè)計(jì)提供基礎(chǔ).
圖1 Kinect設(shè)備圖
Kinect擁有深度攝像頭、紅外投影機(jī)、RGB攝像頭及兩側(cè)的麥克風(fēng)陣列,為了增大Kinect的覆蓋面積,Kinect底部配備傳動(dòng)馬達(dá),有效范圍為-27°~27°,如圖1所示.
Kinect通過紅外投影機(jī)主動(dòng)投射近紅外線光譜,照射到物體后形成隨機(jī)反射斑點(diǎn),紅外攝像頭讀取散斑,進(jìn)而獲得視野內(nèi)的深度圖像. 通過讀取深度信息,獲取相應(yīng)人體的骨骼數(shù)據(jù),Kinect提供的人體骨骼點(diǎn)數(shù)據(jù)如圖2所示.
Kinect獲取的每個(gè)骨骼數(shù)據(jù)包含狀態(tài)及位置信息. 其中骨骼位置的參考系是Kinect本身的空間坐標(biāo)系,通過確定骨骼的x,y,z就能確定相對于Kinect的具體位置,Kinect空間坐標(biāo)系如圖3所示,橫向?yàn)閤軸,縱向?yàn)閥軸,深度為z軸[6-7].
圖2 Kinect提供的人體骨骼點(diǎn)數(shù)據(jù)
圖3 Kinect空間坐標(biāo)系
圖4 人體交互系統(tǒng)流程圖
圖5 利用三角幾何計(jì)算角度示意圖
本文設(shè)計(jì)的視覺跟隨系統(tǒng)利用Kinect實(shí)時(shí)掃描深度信息,當(dāng)發(fā)現(xiàn)人形后對其骨骼點(diǎn)進(jìn)行追蹤,識(shí)別出人體的動(dòng)作,進(jìn)而控制輪椅移動(dòng)[8].
在識(shí)別過程中有些骨骼點(diǎn)定位不到,本文將預(yù)測該點(diǎn)的可能位置并標(biāo)記. 為了防止預(yù)測的點(diǎn)過于偏離真實(shí)值,在實(shí)施過程中,如果某骨骼點(diǎn)的上一幀與下一幀的位置出現(xiàn)超過30 cm的位移,則判斷該移動(dòng)無效,自動(dòng)過濾,實(shí)現(xiàn)流程如圖4所示.
在獲得準(zhǔn)確的人體數(shù)據(jù)模型后,將會(huì)為每個(gè)跟蹤到的骨架分配一個(gè)隨機(jī)的ID. 原先目標(biāo)跟蹤丟失后,即使重新跟蹤到該目標(biāo),分配到的ID也會(huì)不同. Kinect最多可以追蹤2人,定位6人. 在開啟人機(jī)交互系統(tǒng)前,Kinect會(huì)自動(dòng)辨識(shí)范圍內(nèi)的所有人形,但當(dāng)目標(biāo)(做啟動(dòng)人體交互系統(tǒng)姿勢的人)出現(xiàn)后,即關(guān)閉自動(dòng)辨識(shí)人體骨架,鎖定目標(biāo)進(jìn)行骨骼識(shí)別[9].
在跟隨過程中,康復(fù)輪椅能實(shí)現(xiàn)自動(dòng)拐彎,當(dāng)檢測到被追蹤人體做出了終止操作,康復(fù)輪椅就會(huì)停止跟蹤. 本康復(fù)輪椅以100 ms的間隔通過串口發(fā)送指令.
由于kinect對于重疊的關(guān)節(jié)和骨骼的識(shí)別度不高,在姿勢識(shí)別算法中運(yùn)用了計(jì)算靜態(tài)姿勢識(shí)別算法,即通過計(jì)算關(guān)節(jié)與關(guān)節(jié)之間的角度來確定姿勢. 以手作為人機(jī)交互的識(shí)別對象,采用T姿勢啟動(dòng)人體交互系統(tǒng),T姿勢即手臂平舉,識(shí)別速度小于1 s,準(zhǔn)確率很高;將舉起左手的姿勢作為停止追蹤系統(tǒng)姿勢,即右手低垂,左手舉起. 通過實(shí)驗(yàn),這兩個(gè)姿勢的辨識(shí)度很高,實(shí)現(xiàn)了人與康復(fù)輪椅的交互.
本文使用3個(gè)關(guān)節(jié)點(diǎn)組成一個(gè)三角形,使用三角幾何計(jì)算出角度,三角幾何計(jì)算角度的方法如圖5所示. 實(shí)際中通過兩個(gè)關(guān)節(jié)點(diǎn)就可以組成一個(gè)三角形,第三個(gè)點(diǎn)由這兩個(gè)點(diǎn)決定. 本文利用手腕和肘部兩個(gè)關(guān)節(jié)點(diǎn),將肘部作為中心關(guān)節(jié)點(diǎn),手腕作為角度關(guān)節(jié)點(diǎn),再以肘部為基準(zhǔn),隨意找一個(gè)水平x軸上的點(diǎn),由這3個(gè)點(diǎn)組成的三角形計(jì)算出角度.
為提高人體位置識(shí)別的準(zhǔn)確性及可靠性,通過讀取人體3個(gè)骨骼數(shù)據(jù)點(diǎn)并計(jì)算其中心點(diǎn)作為人體的最終位置. 該方法可以防止人體側(cè)身后因?yàn)槟骋粋€(gè)點(diǎn)被遮擋而出現(xiàn)跟隨目標(biāo)丟失.
康復(fù)輪椅的跟隨采用以區(qū)域?yàn)閱挝慌袛辔恢玫姆椒ǎ瑢inect前方分為左轉(zhuǎn)、右轉(zhuǎn)、前進(jìn)、停止4種區(qū)域,并且區(qū)域面積較大,主要是為了增強(qiáng)使用者的乘坐體驗(yàn),防止一直移動(dòng). 另外康復(fù)輪椅也不需要緊緊跟隨醫(yī)護(hù)人員,當(dāng)輪椅和醫(yī)護(hù)人員的距離在1.7~2.5 m時(shí),輪椅跟隨醫(yī)護(hù)人員運(yùn)動(dòng),并且速度與距離呈正比;當(dāng)輪椅偏離醫(yī)護(hù)人員超過±0.2 m時(shí)會(huì)進(jìn)行方向修正. 康復(fù)輪椅離醫(yī)護(hù)人員過近或者過遠(yuǎn),輪椅都會(huì)停止運(yùn)動(dòng)避免發(fā)生意外. 直線跟隨流程如圖6所示.
當(dāng)被跟隨者進(jìn)行拐角轉(zhuǎn)彎時(shí),如果康復(fù)輪椅像往常那樣進(jìn)行跟隨,很可能會(huì)撞到墻面或者丟失目標(biāo),本文針對拐角轉(zhuǎn)彎的情況做了專門的處理.
首先通過3個(gè)不在一條直線上的點(diǎn)計(jì)算出被跟隨者面向方向的法向量,本文選擇兩側(cè)肩膀及人體的中心3個(gè)骨骼數(shù)據(jù)點(diǎn),確定了跟隨者面向方向的法向量,算出法向量與Kinectz軸的角度,根據(jù)被跟隨者轉(zhuǎn)向的角度可以推測他是否有要拐角轉(zhuǎn)彎的意圖.
打開判斷拐角轉(zhuǎn)彎的線程,根據(jù)500 ms后在x軸上的距離相對500 ms前是否超過0.4 m或者可能進(jìn)入過道而丟失目標(biāo)來判斷是否進(jìn)行了拐角轉(zhuǎn)彎. 如果判斷出進(jìn)行了拐彎則前進(jìn)至拐彎點(diǎn)原地轉(zhuǎn)彎,直到視野內(nèi)出現(xiàn)目標(biāo)并鎖定,繼續(xù)開始跟隨. 如果判斷出并沒有進(jìn)行拐彎,則500 ms后自動(dòng)關(guān)閉該線程. 在判斷的這500 ms內(nèi)直線跟隨線程一直處于運(yùn)行狀態(tài),拐彎轉(zhuǎn)角流程如圖7所示.
圖6 直線跟隨策略流程圖
圖7 拐角轉(zhuǎn)彎流程圖
由于視覺跟隨系統(tǒng)對實(shí)時(shí)性的要求高,因此本文單獨(dú)設(shè)置了線程用來發(fā)送串口數(shù)據(jù). 該線程以100 ms的間隔輪詢發(fā)送操作指令,由于數(shù)據(jù)量大,為了減小掉包率,先將相關(guān)的一組數(shù)據(jù)打包成一串字符串,以Kinect相關(guān)的數(shù)據(jù)包為例,包頭為字符‘a(chǎn)’,包尾為字符‘d’,中間的數(shù)據(jù)被字符‘_’分隔. 下位機(jī)采用中斷接收方式,并且下位機(jī)只有在接收到包頭為‘a(chǎn)’,包尾為‘d’的數(shù)據(jù)包后,才將其視為有效數(shù)據(jù),否則停止接收,直到下個(gè)包頭‘a(chǎn)’. 成功接收后,將數(shù)據(jù)包以‘_’為記號(hào)分開,并存入相應(yīng)的數(shù)據(jù)數(shù)組中. 上位機(jī)在發(fā)送數(shù)據(jù)前會(huì)將數(shù)據(jù)進(jìn)行去空格處理,以免下位機(jī)在接收數(shù)據(jù)時(shí)接受無效符號(hào)而錯(cuò)誤.
首先,測試人員站在康復(fù)輪椅前方,做出啟動(dòng)人機(jī)交互系統(tǒng)的姿勢后,輪椅鎖定目標(biāo),給下位機(jī)發(fā)送控制指令. Goat ID為True時(shí)表示鎖定目標(biāo),由于開始時(shí)站在了距離Kinect超過1.7 m處,上位機(jī)顯示為1.9 m,上位機(jī)發(fā)送前進(jìn)指令. 測試過程如圖8所示.
向前移動(dòng),康復(fù)輪椅離測試人員1.7 m內(nèi)時(shí)停止移動(dòng),測試結(jié)果如圖9所示.
當(dāng)測試人員向兩邊移動(dòng)至離輪椅超過0.2 m后,康復(fù)輪椅同樣實(shí)現(xiàn)方向的跟隨,測試結(jié)果如圖10所示.
做出停止姿勢時(shí)停止人機(jī)交互系統(tǒng),Goat ID變?yōu)镕alse,測試結(jié)果如圖11所示.
針對目前康復(fù)輪椅的控制方式進(jìn)行了研究,提出了一種康復(fù)輪椅的視覺跟隨系統(tǒng). 由于kinect對于重疊的關(guān)節(jié)和骨骼的識(shí)別度不高,本文運(yùn)用計(jì)算靜態(tài)姿勢識(shí)別算法,提高了識(shí)別精度. 同時(shí)采用T姿勢啟動(dòng)人體交互系統(tǒng),響應(yīng)時(shí)間在1 s內(nèi). 為提高人體跟隨的可靠性,針對直線和拐彎分別進(jìn)行了研究,取得了良好的效果.
圖8 啟動(dòng)姿勢測試
圖9 前方停止測試
圖10 轉(zhuǎn)向測試
圖11 停止姿勢測試