肖家立, 劉俊華, 陳東偉, 周肖樹(shù), 黃哲
(北京理工大學(xué) 珠海學(xué)院, 珠海 519088)
隨著社會(huì)的發(fā)展,我國(guó)人口結(jié)構(gòu)逐漸快速老化,且子女因?qū)W習(xí)工作忙碌而無(wú)暇照顧老人,因此如何保障老人的生理和心理需求值得人們研究。雖然機(jī)器人的發(fā)展迅速,但是對(duì)于家庭服務(wù)方面仍然不足以滿足人們的需求,特別是在生理健康指標(biāo)的監(jiān)測(cè)和情感識(shí)別方面,具有情感交互的服務(wù)型機(jī)器人是一個(gè)突破口。將健康監(jiān)測(cè)與情感交互結(jié)合在機(jī)器人身上可以成為實(shí)現(xiàn)空巢老人監(jiān)護(hù)的工具,并結(jié)合云平臺(tái)、網(wǎng)絡(luò)可以有效解決空巢老人的生理以及心理需求[1-2]。機(jī)器人本身的計(jì)算能力有限,而人工智能技術(shù)往往需要大數(shù)據(jù)和分布式運(yùn)算的支持,云平臺(tái)的存在, 大大提高了機(jī)器人的運(yùn)行處理速度,很大程度上降低了機(jī)器人的壓力。為此,我們研發(fā)了面向空巢老人的健康情感服務(wù)云端機(jī)器人原型系統(tǒng)。通過(guò)面向空巢老人的健康情感服務(wù)云端機(jī)器人原型系統(tǒng)能夠?qū)崿F(xiàn)語(yǔ)言交互使其能夠成為家庭的成員陪伴老人聊天、玩游戲、聽(tīng)音樂(lè)等,同時(shí)它能夠服務(wù)于老人,能夠幫助老人搬運(yùn)簡(jiǎn)單的物品。
面向空巢老人的健康情感服務(wù)云端機(jī)器人原型系統(tǒng)機(jī)器人端,項(xiàng)目基于ROS (Robot Operating System)框架,ROS是一種分布式的處理框架,并集成了很多軟件和算法,提高了機(jī)器人代碼的復(fù)用率,是現(xiàn)今發(fā)展最快,應(yīng)用最廣的主流機(jī)器人操作系統(tǒng)[3]?;?ROS 框架的機(jī)器人可以通過(guò)其豐富的社區(qū)資源加快開(kāi)發(fā)的速度,并且憑借其松耦合的特點(diǎn)可以使更多傳感器可以被使用在其中,豐富其功能,而且也不用過(guò)于擔(dān)心因開(kāi)發(fā)語(yǔ)言而帶來(lái)的編碼轉(zhuǎn)換問(wèn)題。
整個(gè)機(jī)器人系統(tǒng)包括以下幾個(gè)部分、1.機(jī)器人、2.生理數(shù)據(jù)采集設(shè)備、3.技能家電設(shè)備、4.后臺(tái)數(shù)據(jù)轉(zhuǎn)發(fā)及管理。機(jī)器人利用攝像頭、生理數(shù)據(jù)采集傳感器等來(lái)采集老人的心情、血氧、呼吸等生理數(shù)據(jù),然后通過(guò)進(jìn)一步的處理判定生理數(shù)據(jù)的范圍,再根據(jù)這些生理數(shù)據(jù)做出相應(yīng)的反饋例如語(yǔ)音播報(bào)采集結(jié)果,匯報(bào)通知親人,溫馨提醒等。同時(shí)機(jī)器人可以接入智能家居控制模塊。機(jī)器人通過(guò)監(jiān)聽(tīng)環(huán)境中的語(yǔ)音控制進(jìn)行判斷,當(dāng)接收到控制家電命令后將控制命令發(fā)送到后臺(tái)服務(wù)器。服務(wù)器接收到控制命令再轉(zhuǎn)發(fā)至目標(biāo)智能設(shè)備中。整個(gè)系統(tǒng)的整體框架圖,如圖1所示。
圖1 系統(tǒng)框架圖
系統(tǒng)硬件部分:本項(xiàng)目中機(jī)器人底盤使用了成形的ROS機(jī)器人底盤Kobuki,實(shí)現(xiàn)基本的機(jī)器人運(yùn)動(dòng)。機(jī)器視覺(jué)則使用Kinect來(lái)獲取圖像信息進(jìn)而實(shí)現(xiàn)避障、構(gòu)建地圖、物體識(shí)別等[4]。機(jī)器人控制部分則使用筆記本來(lái)進(jìn)行數(shù)據(jù)處理以及轉(zhuǎn)發(fā)等。理療數(shù)據(jù)采集方面使用的是低成本醫(yī)療設(shè)備,實(shí)現(xiàn)對(duì)相關(guān)數(shù)據(jù)的采集,同時(shí)實(shí)現(xiàn)將數(shù)據(jù)傳送至后臺(tái)服務(wù)器上,或者傳輸至移動(dòng)終端。設(shè)備圖,如圖2所示。
圖2 設(shè)備圖
服務(wù)機(jī)器人系統(tǒng)是基于Linux下的ROS(Robot Operating System)來(lái)實(shí)現(xiàn)的。其中機(jī)器人內(nèi)部則由以下幾個(gè)模塊組成:底盤運(yùn)動(dòng)及定位導(dǎo)航模塊、機(jī)器視覺(jué)模塊、語(yǔ)音交互模塊、界面交互模塊。機(jī)器人的各個(gè)模塊獨(dú)立運(yùn)行,但卻又相互相成,每個(gè)模塊將各種的環(huán)境信息進(jìn)行采集然后再通過(guò)發(fā)送給控制模塊,控制模塊通過(guò)各種環(huán)境信息進(jìn)行最終判斷做出反應(yīng),如圖3所示。
語(yǔ)音交互模塊結(jié)合科大訊飛的語(yǔ)言功能包技術(shù),本項(xiàng)目中使用了語(yǔ)音識(shí)別、以及圖靈機(jī)器人的語(yǔ)義識(shí)別、語(yǔ)音合成等功能模塊。配合了ROS機(jī)器人操作系統(tǒng),將3個(gè)功能結(jié)合起來(lái),并且使用離線與在線功能結(jié)合使整個(gè)語(yǔ)音交互系統(tǒng)更加靈活,以及可控性更加方便。整個(gè)語(yǔ)音系統(tǒng)的框架圖如圖4所示。
連續(xù)語(yǔ)音聽(tīng)寫節(jié)點(diǎn),使用ALSA編程調(diào)用系統(tǒng)麥克風(fēng)設(shè)備監(jiān)聽(tīng)環(huán)境聲音,在監(jiān)聽(tīng)過(guò)程中會(huì)判斷會(huì)話斷點(diǎn)。當(dāng)檢測(cè)到斷點(diǎn),即在連續(xù)說(shuō)話過(guò)程中停止說(shuō)話,程序會(huì)結(jié)束監(jiān)聽(tīng),并上傳監(jiān)聽(tīng)得到的音頻文件,等待服務(wù)器返回結(jié)果。服務(wù)器返回音頻文件轉(zhuǎn)換成文字的結(jié)果(字符串)。最后把結(jié)果通過(guò) ROS的話題節(jié)點(diǎn)功能,送往下一個(gè)對(duì)應(yīng)圖靈語(yǔ)義理解節(jié)點(diǎn)的話題[5]。
關(guān)鍵函數(shù):
調(diào)用麥克風(fēng)實(shí)現(xiàn)錄音、斷點(diǎn)檢測(cè)、上傳音頻和得到服務(wù)器返回結(jié)果的功能函數(shù)
static void demo_mic(const char* session_begin_params){}
對(duì)系統(tǒng)麥克風(fēng)設(shè)備初始化,涉及 alsa 編程內(nèi)容
errcode = sr_init(&iat, session_begin_params, SR_MIC, &recnotifier);
啟動(dòng)系統(tǒng)麥克風(fēng)設(shè)備,開(kāi)始錄音,觸發(fā)回調(diào)函數(shù) on_speech_begin() 顯示并記錄當(dāng)前狀態(tài)為開(kāi)始會(huì)話階段
errcode = sr_start_listening(&iat);
圖靈語(yǔ)義理解節(jié)點(diǎn) ( nlu 節(jié)點(diǎn))
當(dāng)接收到 asr 節(jié)點(diǎn)往本節(jié)點(diǎn)的話題發(fā)消息時(shí),會(huì)觸發(fā)本節(jié)點(diǎn)的回調(diào)函數(shù),開(kāi)啟該節(jié)點(diǎn)的功能----向服務(wù)器發(fā)送 HTTPPOST 請(qǐng)求,上傳話題收到的結(jié)果。然后等待服務(wù)器返回 JSON 結(jié)果。收到返回內(nèi)容后,對(duì) JSON 字符串進(jìn)行解析,取得結(jié)果,達(dá)到理解句意或得到固定問(wèn)題的答案。
關(guān)鍵函數(shù)
//回調(diào)函數(shù) nluCallback(),顯示收到內(nèi)容并調(diào)用自定義函數(shù) HttpPostRequest()進(jìn)行 HttpPost 請(qǐng)求void nluCall-back(const std_msgs::String::ConstPtr& msg)
圖3 軟件框架圖
圖4 語(yǔ)音模塊框架圖
訊飛語(yǔ)音合成節(jié)點(diǎn) (tts 節(jié)點(diǎn))
當(dāng)接收到 nlu 節(jié)點(diǎn)往本節(jié)點(diǎn)的話題發(fā)消息時(shí),會(huì)觸發(fā)本節(jié)點(diǎn)的回調(diào)函數(shù) topicCallback(),實(shí)現(xiàn)語(yǔ)音合成并報(bào)讀合成好的 wav 音頻文件
關(guān)鍵函數(shù)
void makeTextToWav( const char* text , const char* filename )
傳入合成文本內(nèi)容和文件目錄,設(shè)定訊飛開(kāi)發(fā)文檔提供的合成音頻的參數(shù)(合成發(fā)音人、音頻采樣率、語(yǔ)速、音量、音調(diào)等)
傳入合成文本內(nèi)容、文件合成到的目標(biāo)目錄和合成參數(shù)來(lái)合成音頻
int text_to_speech(const char* src_text, const char* des_path, const char* params)如圖5所示。
圖5 語(yǔ)音模塊測(cè)試圖
該模塊使用了Kinect作為圖像采集基礎(chǔ)。使用OpenNI接口提取攝像頭中捕獲的彩色圖像信息、點(diǎn)云數(shù)據(jù)、灰度圖等,然后將這些圖像信息打包成消息通過(guò)話題發(fā)布到ROS中為其他節(jié)點(diǎn)模塊提供數(shù)據(jù)源。然而在ROS中圖片的傳輸并不是簡(jiǎn)單的將圖片直接發(fā)送出去,而是利用ROS中的cv_bridge來(lái)講圖片轉(zhuǎn)化成消息類型之后再發(fā)布到話題中。其他節(jié)點(diǎn)便可以接收該話題,同樣的再用cv_bridge轉(zhuǎn)化回圖片格式之后就可以進(jìn)行顯示或者是處理了。
/*圖像發(fā)布函數(shù)*/
int img_publish()
//將CV_bridge轉(zhuǎn)化為ROS圖像消息
void toImageMsg(sensor_msgs :: Image&ros_image)const ;
人臉檢測(cè)節(jié)點(diǎn)獲取到圖片之后進(jìn)行人臉檢測(cè),檢測(cè)圖片中是否存在人臉,然后將人臉保存起來(lái)并將其與系統(tǒng)中的人臉進(jìn)行比對(duì)實(shí)現(xiàn)人臉識(shí)別。同時(shí)利用Face++中的人臉特征信息來(lái)獲取老人的微笑值進(jìn)而根據(jù)老人的心情來(lái)做出相應(yīng)的回應(yīng)。
//人臉檢測(cè), 將圖片與人臉特征進(jìn)行對(duì)比獲取圖片中人臉在圖標(biāo)的坐標(biāo)
def detect(img, cascade):
路徑規(guī)劃及定位導(dǎo)航實(shí)現(xiàn)地圖構(gòu)建,通過(guò)利用構(gòu)建完成的地圖進(jìn)行避障、定位導(dǎo)航、路徑規(guī)劃功能。其中,構(gòu)建地圖以及避障功能需要機(jī)械視覺(jué)模塊提供的PLC點(diǎn)云數(shù)據(jù)。該模塊接收到的PCL數(shù)據(jù)后將數(shù)據(jù)進(jìn)行轉(zhuǎn)換得到坐標(biāo)數(shù)據(jù)。然后再通過(guò)TF轉(zhuǎn)換通知機(jī)器人現(xiàn)實(shí)中的物體與機(jī)器人之間的距離[6]。再根據(jù)實(shí)際情況進(jìn)行構(gòu)建地圖、避障等。而路徑規(guī)劃和定位導(dǎo)航則是利用建立好的地圖來(lái)獲取地圖中環(huán)境情況,然后再通過(guò)給定地圖中的點(diǎn)進(jìn)行路徑規(guī)劃以及定位到航。
在構(gòu)建地圖的過(guò)程中,使用了TF進(jìn)行傳感器坐標(biāo)的轉(zhuǎn)換。因?yàn)闄C(jī)器人的控制中心不一定是在傳感器上,所以要把傳感器的數(shù)據(jù)轉(zhuǎn)換成在控制中心上的坐標(biāo)信息,從而實(shí)現(xiàn)數(shù)據(jù)通信[7-8]。如圖6所示。
傳感器獲取的數(shù)據(jù)是在Kinect的坐標(biāo)系統(tǒng)中的,但是系統(tǒng)控制時(shí)只能以base_link為中心,所以要根據(jù)兩者的位置關(guān)心進(jìn)行坐標(biāo)變換,并使用MOVE_BASE路徑規(guī)劃功能包進(jìn)行實(shí)現(xiàn)[9]。
人家交互界面模塊主要負(fù)責(zé)機(jī)器人與用戶之間的進(jìn)行交互信息。同時(shí)還可集成各種游戲提供用戶體驗(yàn)例如象棋、俄羅斯方塊、連連看等簡(jiǎn)單游戲。通過(guò)人機(jī)交互模塊還可以實(shí)現(xiàn)將老人的生理數(shù)據(jù)顯示給老人查看。同時(shí)還可以捕獲攝像頭的信息進(jìn)行拍照、互動(dòng)等。
在人機(jī)界面交互模塊中,我們使用了移植性較高的Qt進(jìn)行開(kāi)發(fā),配合ROS插件能夠自由的接收機(jī)器人發(fā)布的各種消息[10]。同時(shí)利用Qt中成熟的發(fā)展技術(shù)可以簡(jiǎn)單的融合各種軟件如音樂(lè)播放器、游戲等等,如圖7所示。
圖7 界面設(shè)計(jì)-查看攝像頭
本項(xiàng)目將機(jī)器人開(kāi)發(fā)技術(shù)、物聯(lián)網(wǎng)技術(shù)、人工智能技術(shù)、圖像處理技術(shù)等多項(xiàng)前沿的IT技術(shù)進(jìn)行整合,綜合實(shí)現(xiàn)信息之間的高效地連接,進(jìn)而為人們提供多樣化的生活類的綜合服務(wù)。由于本項(xiàng)目定位為家庭類服務(wù)機(jī)器人的設(shè)計(jì)與實(shí)現(xiàn),因此在項(xiàng)目最終成果及主要研究力量都放在機(jī)器人終端交與及硬件開(kāi)發(fā)上。因此,在多機(jī)器人交互調(diào)度、智能學(xué)習(xí)、行為大數(shù)據(jù)分析等問(wèn)題將在下一次迭代中修正和完善,并引入Big Data及Deep Learning等技術(shù)實(shí)現(xiàn)智能學(xué)習(xí),從而為老人提供更多服務(wù)和幫助。