文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.03.017
中文引用格式: 黨宏社,,侯金良,張超. 基于Kinect的家庭助理機器人系統(tǒng)設計與實現(xiàn)[J].電子技術應用,,2017,,43(3):70-72,76.
英文引用格式: Dang Hongshe,,Hou Jinliang,,Zhang Chao. Design and implementation of home assistant robot system based on Kinect[J].Application of Electronic Technique,2017,,43(3):70-72,,76.
0 引言
老齡化社會提前到來,,“空巢家庭”日趨增多,,越來越多的老年人“照顧缺位”。子女在外上班,,不能陪伴父母,,一些身體虛弱、生活不能自理的老人不能得到很好的照顧,。老人獨自在家時若發(fā)生一些意外事故,,因無法快速地發(fā)送求救信號,從而不能得到救助而造成嚴重后果,。家人工作繁忙,,一些生病或因殘疾導致行動、生活不便的人,,不能獨自去拿水杯、藥品等,。家長出門孩子獨自留在家中,,孩子由于調皮貪玩會跑到陽臺等危險區(qū)域,因無實時的監(jiān)管導致意外?,F(xiàn)代年輕人工作壓力和生活壓力加重,上班一族整天為工作奔波,,常常會疏忽家里的瑣事,,忘記關燈、關空調等,;家里出現(xiàn)煤氣泄漏,、水管漏水等危險情況,未能及時處理而導致事故的發(fā)生,;家里有盜賊進入時,,不能及時報警而導致貴重財物被盜。
為了解決上述問題,,設計了基于Kinect的家庭助理機器人系統(tǒng),。可通過Kinect體感控制機器人移動到指定地點并抓取物體,,也可用手機APP遠程控制機器人,,實時地監(jiān)視室內情況。
1 系統(tǒng)硬件設計
系統(tǒng)采用基于Java的單服務器多客戶端模型,,Kinect和智能手機分別作為客戶端連接到運行在PC上的服務器[1],。Kinect通過USB連接到電腦,,利用串口通信將采集到的數(shù)據(jù)實時發(fā)送到服務器。智能手機通過WiFi連接到服務器,,手機APP將控制信號發(fā)送到服務器,。服務器對客戶端發(fā)來的數(shù)據(jù)進行實時采集,、解析,,并將控制信號發(fā)送給機器人,。系統(tǒng)整體結構如圖1所示。
機器人硬件組成如圖2所示,。機器人頭部為網(wǎng)絡攝像頭IP Camera,主要功能有:遠程視頻監(jiān)視,、遠程視頻通話、智能報警,。機器人臂部為數(shù)字舵機結構,共8個自由度,,機械臂末端為夾爪結構,。機械臂可模擬人的雙臂運動,,可通過夾爪來抓取物體,。機器人的腿部為輪式結構,使其在室內更快捷,、靈活地移動,。
機器人的主控芯片采用樹莓派,,樹莓派(Raspberry Pi)是只有信用卡大小的卡片式電腦,。它配備一枚1.24 GHz的4核ARM架構Cortex-A53處理器,,SD卡作為儲存媒體,主板周圍有4個USB接口和一個網(wǎng)口[2],,利用USB接口可直接與Arduino相連。樹莓派內置無線WiFi模塊,,可與服務器進行無線通信。樹莓派PWM輸出能力有限,,利用2片Arduino共同產生8路PWM控制機械臂的8個舵機[3]。Arduino是一款便捷靈活,、方便上手的開源電子原型平臺,,它搭載Atmel ATmega328處理器,有14路數(shù)字輸入輸出端口,。一片Arduino可同時產生6路PWM信號,,并且Arduino開發(fā)軟件提供標準的串口通信協(xié)議,,可直接與樹莓派通信,。樹莓派通過USB與Arduino相連,通過串口通信將每個舵機控制信號發(fā)給Arduino,。數(shù)字舵機根據(jù)PWM信號轉動,實現(xiàn)0°~180°的精確控制,。此外,,機器人上裝有煙霧和溫濕度傳感器,可實時監(jiān)測家中環(huán)境,,發(fā)生煤氣泄漏或火災時可自動報警。
Kinect通過USB與服務器相連,,完成人體骨骼數(shù)據(jù)的采集。采用Kinect for Windows,,其工作原理是通過傳感器上一個可見光RGB攝像頭和2個紅外攝像頭,,使傳感器能夠采集彩色影像和3D深度圖像[4],。采集圖像時,Kinect傳感器通過紅外激光點陣反饋圖像信息到2個紅外攝像頭中,,對操作者的X、Y,、Z坐標進行3D掃描定位。此外,,通過可見光RGB攝像頭捕捉VGA級別的圖像[5],,可進行人物的身份識別,。Kinect數(shù)據(jù)通過USB線纜傳輸?shù)絇C上,,PC上的Kinect數(shù)據(jù)采集庫對傳感器傳輸而來的3種不同的數(shù)據(jù)資料進行串聯(lián),,將彩色圖像和3D深度圖像融合成為一個數(shù)據(jù)流,,最后將數(shù)據(jù)流輸出[6],。本次設計利用數(shù)據(jù)流中的20個關鍵點的三維坐標,對人體動作進行識別,。
2 系統(tǒng)軟件設計
2.1 Kinect動作識別算法
基于輪廓和特征匹配的目標跟蹤算法,,例如文獻[7]中的人體動作識別算法,,雖然準確性良好,,但其算法過于復雜,,模板匹配運算量太大,,需要大量設備進行并行處理,,需要比較高端的處理器,?;跒V波預測跟蹤算法,,例如文獻[8]中提出的利用卡爾曼濾波算法實現(xiàn)人體動作識別,,雖然消除了數(shù)據(jù)抖動,但其算法的魯棒性不好,,對光照,、背景變化太敏感。本文提出了一種改進的Kinect動作識別算法,,將人體關節(jié)分上,、下半身來處理,既保證了手臂控制機器人的實時性,,又保證了雙腿控制機器人的準確性,。
2.1.1 坐標獲取
Kinect是微軟公司于2011年推出的一款體感外設,,主要由紅外發(fā)射器、RGB攝像頭,、紅外深度攝像頭組成,。它具有實時的全身骨骼跟蹤,、運動捕捉以及麥克風輸入的功能,并能夠識別一系列人體動作[9],。本文算法利用Kinect骨骼追蹤技術獲取操作者20個關鍵點的三維坐標,,并能對這些點的位置進行實時追蹤,。圖3為人體關鍵點的示意圖,。
由于直接獲取的坐標為深度圖像坐標,所以將其換算為實際坐標,。(ximage,yimage,,zimage)到(xworld,,yworld,,zworld)的變換公式[10]:
2.1.2 特征提取
在Kinect不標定的情況下識別人體動作,,且操作者所在位置可能隨時會發(fā)生變化,,因此算法對魯棒性要求很高,。本文算法提取的特征是骨骼關鍵點坐標的相對位置,,即提取關鍵點坐標向量所成的角度特征,。Kinect每秒鐘獲取30幀圖像[11],,即關鍵點的坐標每秒刷新30次,,再加上人體的抖動,,采集到的關鍵點坐標會有波動。采用加權遞推平均濾波方法對坐標進行濾波,。把連續(xù)N個采樣值看成一個隊列,,隊列的長度固定為N,,每次采樣到新的數(shù)據(jù)放入隊尾,,并扔掉原來隊首的一次數(shù)據(jù)(先進先出原則),。然后針對不同時刻采用不同的權值,,最后把隊列中的N個數(shù)據(jù)進行算術平均運算,,就可獲得新的濾波結果。公式如下:
角度θij就是當前人體肘部的角度特征,。以此類推,,可求出人體所有關節(jié)的角度特征,。提取的角度特征是一個相對的特征且魯棒性好,,只與關鍵點相對位置有關,,與光照,、背景、操作者以及操作者的位置都無關,。
2.1.3 特征匹配
機器人的機械臂是由操作者的雙臂體感控制的,而所提取的角度特征恰好是每個關節(jié)點的相對角度,,所以可直接將角度特征輸出控制舵機的轉動,。對于下半身,,則要通過特征匹配的方法更加準確地識別操作者的動作,。由于Kinect采用Processing進行開發(fā),,用Java語言編程,,所以將計算好的動作模板保存到TXT文本中。本設計中下半身需要識別的動作包括:前進一檔,、前進二檔,、前進三檔,、后退一檔、后退二檔,、后退三檔,、停止、機器人夾爪的張開與閉合,。將下半身骨骼數(shù)據(jù)的角度特征與動作模板角度特征進行比較,,可得到匹配的百分比,從而實現(xiàn)人體動作的識別,。
2.2 機器人軟件編程
機器人的軟件部分主要完成的任務為:接收服務器發(fā)來的控制信號并根據(jù)信號控制舵機和電機。機器人的控制芯片為樹莓派,,樹莓派的操作系統(tǒng)是開源的Linux系統(tǒng),,采用Python語言進行編程。首先利用Socket無線通信把樹莓派作為客戶端連接到服務器,,開啟客戶端并將其連接到服務器的IP地址和端口號,接收服務器數(shù)據(jù),。然后根據(jù)通信協(xié)議解析數(shù)據(jù),,最后利用Firmata協(xié)議將控制舵機和電機數(shù)據(jù)發(fā)給Arduino。Arduino根據(jù)接收到的數(shù)據(jù),,控制對應引腳產生不同占空比的PWM信號來控制舵機和電機的轉動,。樹莓派接收煙霧傳感器和溫濕度傳感器的反饋值,與設定閾值比較決定是否報警,。
本設計利用安卓開發(fā)了手機APP[12],,可使在外的家人通過機器人實時查看家中情況,及時發(fā)現(xiàn)家中緊急情況,。圖4為手機APP界面,,點擊連接按鈕,手機APP會自動登錄服務器,。左邊是實時視頻監(jiān)控界面,,可實現(xiàn)360°旋轉監(jiān)視、拍照,、錄像等功能,,還可通過對講功能與家里的老人和病人進行視頻通話,;右邊是機器人控制界面,通過前后,、左右按鈕控制機器人的運動,,從而實現(xiàn)了與傳統(tǒng)固定攝像頭監(jiān)視不同的室內移動視頻監(jiān)視功能。
3 功能實現(xiàn)
Processing程序對Kinect深度數(shù)據(jù)進行采集,,利用上文動作識別算法對數(shù)據(jù)進行處理,,把控制信號傳給機器人。操作者可以用雙臂體感控制機械臂,,并且實時性很好,;可以用腿部的前后移動體感控制機器人的前后移動,并且可以調速,;可以利用雙腿的分開程度控制機械夾爪的開合。實驗表明,,本算法的動作識別準確率較高,,而且光照、背景,、操作者和操作者位置的變化對算法影響較小,。測試結果如圖5和圖6所示。系統(tǒng)可實現(xiàn)機器人的體感控制,,幫助家里的老人和病人抓取物品,。
4 結束語
設計制作了基于Kinect的家庭助理機器人系統(tǒng),可通過機器人的體感控制幫助在家無人照顧的老人和病人抓取物體,。在外的家人可通過手機App遠程監(jiān)視室內情況并可視頻通話,,使老人和病人得到更好的照顧。通過實驗測試,,該系統(tǒng)工作正常,,可實現(xiàn)以上各項功能。
參考文獻
[1] 馬響.基于Java語言在Web開發(fā)的知識探討[J].信息技術與信息化,,2015,,13(15):169-171.
[2] 蘇祥林,陳文藝,,閆灑灑.基于樹莓派的物聯(lián)網(wǎng)開放平臺[J].電子科技,,2015,28(9):35-37.
[3] 崔陽,,張維華.一種基于Arduino的智能家居控制系統(tǒng)[J].計算機技術與應用,,2014,40(4):123-125.
[4] PANSARE J R,,BANSAL M.A system to recognize dynamic hand gestures using hidden markov model to control windows applications[J].International Journal of Computer Applications,,2013,,62(15):169-171.
[5] SU C J,CHIANG C Y.Kinect-enabled home-based rehabilitation system using dynamic time warping and fuzzy logic[J].Applied Soft Computing,,2014(22):652-666.
[6] FABRIZIO P,,SERGIO B.An open source framework for hand pose and gesture recognition using kinect[J].Visual Computer,2014(30):1107-1122.
[7] 朱國剛,,曹林.基于Kinect傳感器骨骼信息的人體動作識別[J].計算機仿真,,2014,31(12):329-333.
[8] 王梅,,盧熙昌.基于人體動作識別的服務機器人手臂運動控制[J].工業(yè)控制計算機,,2015,28(9):59-62.
[9] 戰(zhàn)蔭偉,,于芝枝.基于Kinect角度測量的姿勢識別算法[J].傳感器與微系統(tǒng),,2014,33(7):129-132.
[10] 陳翰雄,,黃雅云,,劉宇,等.基于Kinect的空中手勢跟蹤識別的研究與實現(xiàn)[J].電視技術,,2015,,39(21):91-94.
[11] 蔡菁,程雷,,王紅霞.基于Kinect的疲勞駕駛綜合監(jiān)測系統(tǒng)研究[J].計算機工程與科學,,2015,37(12):2380-2385.
[12] 薛亮,,張繼飛.基于IOS的智能家居安防系統(tǒng)移動端設計[J].計算機技術與自動化,,2016,35(2):89-92.
作者信息:
黨宏社,,侯金良,,張 超
(陜西科技大學 電氣與信息工程學院,陜西 西安710021)