東南大學(xué)成賢學(xué)院 陳永圣 周龍翔 馬尹琪
經(jīng)歷了新冠疫情,我們發(fā)現(xiàn)社區(qū)服務(wù)中存在著明顯不足。所以我們想通過(guò)機(jī)器人來(lái)解決其中的一些問題,即設(shè)計(jì)一款可以實(shí)現(xiàn)一些社區(qū)服務(wù)的機(jī)器人。本篇研究文章先是敘述了研究的背景,闡明了研究的可行性與創(chuàng)新性——我們著重介紹了運(yùn)動(dòng)控制和溫度測(cè)量及附加拓展功能的原理以及語(yǔ)音交互技術(shù)在機(jī)器人上的實(shí)現(xiàn)過(guò)程。實(shí)驗(yàn)采用的機(jī)器人為turtlebot2,基于ROS系統(tǒng)去完成頂端的操作——最后能實(shí)現(xiàn)社區(qū)服務(wù)這一全面的功能。
2020年初突如其來(lái)的新冠疫情如放大鏡一般顯現(xiàn)出日常生活中社區(qū)服務(wù)存在的問題,病毒的強(qiáng)傳染性讓抗疫期間的社區(qū)服務(wù)變得困難重重,以及還有外界天氣等因素的影響,社區(qū)服務(wù)成了一大問題,即社區(qū)服務(wù)缺少人力與及時(shí)性。同時(shí),老年化現(xiàn)在愈發(fā)地嚴(yán)重,社區(qū)服務(wù)就顯得十分重要。
就這樣,如何設(shè)計(jì)一款在社區(qū)服務(wù)中發(fā)揮作用的機(jī)器人成了我們研究的課題。
基于Turtlebot2機(jī)器人為載體,利用ROS系統(tǒng)去集成一系列的功能,目的是構(gòu)造出社區(qū)服務(wù)機(jī)器人能夠在實(shí)際生活中能夠替代人做一些工作以及避免一些隱患。
ROS是一種有高度靈活性的機(jī)器人軟件編寫架構(gòu),提供了一種發(fā)布-訂閱式的通信框架用以簡(jiǎn)單、快速地構(gòu)建分布式計(jì)算系;ROS提供了大量的工具組合方式用以配置、啟動(dòng)、自檢、調(diào)試、可視化、登錄、測(cè)試、終止分布式計(jì)算系統(tǒng);ROS提供了廣泛的文件庫(kù)實(shí)現(xiàn)以機(jī)動(dòng)性、操作控制、感知為主的機(jī)器人功能;ROS系統(tǒng)的支持與發(fā)展依靠著一個(gè)強(qiáng)有力的社區(qū)。豐富的功能及其強(qiáng)大的技術(shù)支持,使得ROS在項(xiàng)目研究中占據(jù)主要地位。
運(yùn)動(dòng)控制模塊主要是在Linux及Python的基礎(chǔ)上去對(duì)ROS系統(tǒng)進(jìn)行編程命令控制。模塊分布圖如圖1所示。
圖1 模塊分布圖
運(yùn)動(dòng)控制的視覺基礎(chǔ)是SLAM算法,動(dòng)作基礎(chǔ)是Kobuki移動(dòng)機(jī)器人。應(yīng)用SLAM算法、RGBD相機(jī)和RVIZ等仿真工具軟件,控制和完善機(jī)器人的運(yùn)動(dòng)路徑及其運(yùn)動(dòng)細(xì)節(jié)。機(jī)器人每個(gè)部分的工作數(shù)據(jù)由其對(duì)應(yīng)的節(jié)點(diǎn)發(fā)布、訂閱,數(shù)據(jù)的具體內(nèi)容與格式可以自行設(shè)定。運(yùn)用RVIZ等仿真軟件與官方提供的Stage模型,鍵入操作指令來(lái)控制機(jī)器人在目標(biāo)地圖中運(yùn)動(dòng),建立基本的地圖模型后便可在仿真軟件下進(jìn)行模擬導(dǎo)航。導(dǎo)航所用的Gapping功能包同樣可用于地圖的創(chuàng)建。ROS系統(tǒng)中Gmapping功能包與SLAM算法共同作業(yè),建立一套完整的導(dǎo)航包工具,完成在目標(biāo)點(diǎn)之間的自主路徑規(guī)劃的導(dǎo)航工作。圖2所示為ROS系統(tǒng)中導(dǎo)航包的相關(guān)節(jié)點(diǎn)示意圖。
圖2 ROS整體導(dǎo)航包的布局圖
語(yǔ)音交互模塊我們項(xiàng)目團(tuán)隊(duì)則是利用了訊飛語(yǔ)音的一個(gè)開源的數(shù)據(jù)庫(kù),借助訊飛已有的語(yǔ)音技術(shù)來(lái)做二次開發(fā)。語(yǔ)音交互也是基于我們之前的運(yùn)動(dòng)控制模塊,對(duì)運(yùn)用的場(chǎng)景場(chǎng)地進(jìn)行建模后,我們?cè)诔绦蛑性O(shè)置定點(diǎn)位置的坐標(biāo),每個(gè)位置點(diǎn)設(shè)置了對(duì)應(yīng)的響應(yīng)指令,借助電腦的麥克風(fēng)捕捉到聲音指令,接著識(shí)別里面的觸發(fā)命令的關(guān)鍵詞,識(shí)別成功后就開始按著建模的地圖進(jìn)行運(yùn)動(dòng)到達(dá)目標(biāo)點(diǎn),到達(dá)后turtlebot2機(jī)器人會(huì)發(fā)出響應(yīng)來(lái)表明已經(jīng)到達(dá)目的地。
第一步機(jī)器人位置的初始化,首先編寫腳本來(lái)進(jìn)行初始化位置,然后加入到啟動(dòng)rviz的launch文件中,再啟動(dòng)launch文件測(cè)試結(jié)果,這樣的測(cè)試避免了人工擺放產(chǎn)生的隨機(jī)誤差。第二步是對(duì)科大訊飛SDK的使用,測(cè)試語(yǔ)音的合成。首先試驗(yàn)由訊飛開放平臺(tái)發(fā)布的samples樣例程序,檢驗(yàn)語(yǔ)音包是否可以正常使用,其次修改程序中的代碼,添加回調(diào)函數(shù)使其處于監(jiān)聽狀態(tài),無(wú)須主動(dòng)喚醒,最后便是在程序中添加導(dǎo)航點(diǎn)的坐標(biāo)及其相應(yīng)的觸發(fā)指令。第三步測(cè)試語(yǔ)音合成的情況。程序中可以定義合成聲音的屬性,方便我們?nèi)ピO(shè)置更為親民的語(yǔ)音;同時(shí)檢測(cè)坐標(biāo)位置,當(dāng)機(jī)器人運(yùn)動(dòng)到目的地時(shí),程序自動(dòng)合成語(yǔ)音提示目標(biāo)點(diǎn)已到達(dá),確保良好的使用體驗(yàn)。
每個(gè)模塊的通信皆是基于ROS系統(tǒng)的節(jié)點(diǎn)間通訊,編寫相應(yīng)的節(jié)點(diǎn),發(fā)布消息,訂閱目標(biāo)節(jié)點(diǎn)發(fā)布的消息,程序以此為判斷依據(jù),從而做出相應(yīng)的動(dòng)作?;诖耍覀兺瓿闪藢?duì)于語(yǔ)音交互功能的制作,并且由于訊飛SDK包的使用,在語(yǔ)音識(shí)別與合成方面的質(zhì)量得到保證。
溫度測(cè)量模塊我們運(yùn)用了GY-906-DAA(醫(yī)用級(jí))傳感器,溫度傳感器使用的芯片為MLX90614。我們?cè)跇漭衫镞\(yùn)行測(cè)溫程序,可以用C++或者Python去實(shí)現(xiàn)程序編寫。實(shí)現(xiàn)對(duì)1m以內(nèi)的物體進(jìn)行測(cè)溫同時(shí)測(cè)出環(huán)境的溫度,可將處理之后的數(shù)據(jù)在終端顯示,也可以上傳至云端。
拓展功能的主體也是樹莓派,外接所需的傳感器并編寫Python或者C++程序,實(shí)現(xiàn)機(jī)器人的拓展功能,豐富其所能提供的社區(qū)服務(wù)。使用DHT11傳感器測(cè)量環(huán)境的溫濕度,使用HX711模塊用于檢測(cè)機(jī)器人的載重。以上傳感器便是機(jī)器人的附加編寫Python或者C++代碼,具體的代碼可以參考網(wǎng)上的博客或者相關(guān)的書籍。
在整個(gè)項(xiàng)目設(shè)計(jì)制作過(guò)程中,碎片化學(xué)習(xí)相關(guān)知識(shí)給我們帶來(lái)了很多樂趣。如何在ROS系統(tǒng)下編寫相關(guān)節(jié)點(diǎn),并試驗(yàn)代碼,實(shí)現(xiàn)我們想要的功能,一步步地實(shí)現(xiàn)我們的目標(biāo),每一個(gè)成功都給我們帶來(lái)了莫大的喜悅。
更重要的是,我們?nèi)绾稳ゲ粩鄡?yōu)化。在實(shí)踐過(guò)程中,我們水平有限,覺得在各個(gè)模塊中都有優(yōu)化的空間,例如我們?cè)谡Z(yǔ)音交互模塊中可以增添一個(gè)喚醒節(jié)功能所需的器件,實(shí)現(xiàn)附加功能還需對(duì)樹莓派進(jìn)行GPIO口的設(shè)置以及點(diǎn),用于觸發(fā)指令的功能,減輕機(jī)器人工作能耗。