文獻(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)出門孩子獨(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ī)器人的主控芯片采用樹莓派,,樹莓派(Raspberry Pi)是只有信用卡大小的卡片式電腦。它配備一枚1.24 GHz的4核ARM架構(gòu)Cortex-A53處理器,,SD卡作為儲(chǔ)存媒體,,主板周圍有4個(gè)USB接口和一個(gè)網(wǎng)口[2],利用USB接口可直接與Arduino相連,。樹莓派內(nèi)置無(wú)線WiFi模塊,,可與服務(wù)器進(jìn)行無(wú)線通信。樹莓派PWM輸出能力有限,,利用2片Arduino共同產(chǎn)生8路PWM控制機(jī)械臂的8個(gè)舵機(jī)[3],。Arduino是一款便捷靈活、方便上手的開源電子原型平臺(tái),,它搭載Atmel ATmega328處理器,,有14路數(shù)字輸入輸出端口。一片Arduino可同時(shí)產(chǎn)生6路PWM信號(hào),,并且Arduino開發(fā)軟件提供標(biāo)準(zhǔn)的串口通信協(xié)議,,可直接與樹莓派通信。樹莓派通過(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è)可見光RGB攝像頭和2個(gè)紅外攝像頭,使傳感器能夠采集彩色影像和3D深度圖像[4]。采集圖像時(shí),,Kinect傳感器通過(guò)紅外激光點(diǎn)陣反饋圖像信息到2個(gè)紅外攝像頭中,,對(duì)操作者的X、Y,、Z坐標(biāo)進(jìn)行3D掃描定位,。此外,通過(guò)可見光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)行開發(fā),,用Java語(yǔ)言編程,,所以將計(jì)算好的動(dòng)作模板保存到TXT文本中。本設(shè)計(jì)中下半身需要識(shí)別的動(dòng)作包括:前進(jìn)一檔,、前進(jìn)二檔,、前進(jìn)三檔、后退一檔,、后退二檔,、后退三檔、停止,、機(jī)器人夾爪的張開與閉合,。將下半身骨骼數(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ī)器人的控制芯片為樹莓派,,樹莓派的操作系統(tǒng)是開源的Linux系統(tǒng),,采用Python語(yǔ)言進(jìn)行編程。首先利用Socket無(wú)線通信把樹莓派作為客戶端連接到服務(wù)器,,開啟客戶端并將其連接到服務(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è)定閾值比較決定是否報(bào)警,。
本設(shè)計(jì)利用安卓開發(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)速,;可以利用雙腿的分開程度控制機(jī)械夾爪的開合,。實(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開發(fā)的知識(shí)探討[J].信息技術(shù)與信息化,2015,,13(15):169-171.
[2] 蘇祥林,,陳文藝,閆灑灑.基于樹莓派的物聯(lián)網(wǎng)開放平臺(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)