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