曹博宣,寧成林,何銳泓,黃成龍,林宇桐
(南方醫(yī)科大學(xué) 生物醫(yī)學(xué)工程學(xué)院,廣州 510515)
聲音定位技術(shù)是通過聲學(xué)傳感裝置接收聲波,再利用電子裝置將聲音信號進行轉(zhuǎn)化處理,以此實現(xiàn)對聲源進行定位的技術(shù)。現(xiàn)代科技的日漸發(fā)展使聲音定位技術(shù)越來越受到重視[1]。這項技術(shù)也逐漸走進到日常生活當(dāng)中,例如視覺追蹤,攝像機式的眼睛可以定位到聲源處;電視會議中通過接收發(fā)言者的語音信號,自動使攝像頭對準(zhǔn)發(fā)言者等[2]。
本文基于聲音探測的定位原理,制作了利用聲音探測定位的實際應(yīng)用裝置。
聲源定位表現(xiàn)在兩個方面,一是確定聲源方位,二是確定聲源距離,在本應(yīng)用中,先采用TDOA定位方法確定并測量聲源方位角度,再采用超聲波測距方法確定聲源距離使樹莓派機器人運動至聲源方位。
TDOA是一種利用時間差進行定位的方法,通過測量聲音信號到達(dá)監(jiān)測站的時間,可以確定聲源的距離。利用聲源到多個監(jiān)測站的距離(以監(jiān)測站為中心,距離為半徑作圓),就能確定聲源的位置。通過比較聲音信號到達(dá)多個監(jiān)測站的時間差,就能做出以監(jiān)測站為焦點、距離差為長軸的雙曲線,雙曲線的交點就是信號的位置[3],如圖1和圖2所示。
圖1 TDOA定位示意圖
圖2 雙曲線交會定位示意圖
TDOA是基于多站點的定位系統(tǒng),因此要對信號進行定位必須有3個以上的監(jiān)測站進行同時測量。本裝置使用六麥環(huán)形MIC陣列,每個麥克風(fēng)即是一個監(jiān)測站點,共有六個麥克風(fēng)接收聲音信號。
設(shè)(x,y)為聲源坐標(biāo),(xi,yi)為第i個聲音接收模塊的坐標(biāo)。聲源和接收之間的距離為:
令Riy表示聲源模塊第i個接收模塊的距離差,則雙曲線定位中聲源(x,y)和接收(xi,yi)有如下關(guān)系:
求解上述非線性方程組要用到Chan算法[4],該算法是具有解析表達(dá)式解的非遞歸的雙曲線方程組解法,該算法的特點是計算量小,且不用設(shè)定初值,在視距環(huán)境下及噪聲服從高斯分布的信道環(huán)境下,定位精度高。該算法適合計算機運算。而且當(dāng)聲音接收模塊為4個及以上時,該算法可利用所有TDOA測量值并取得更好的定位結(jié)果。綜上所述,Chan是一種比較適合本系統(tǒng)的算法[5]。
當(dāng)有4個聲音接收模塊時,TDOA測量值數(shù)目多于未知量數(shù)目,因此,初始非線性方程組應(yīng)首先轉(zhuǎn)換為線性方程組,然后采用加權(quán)最小二乘(WLS)算法得到一個初始解,再利用第一次得到的移動用戶終端估計位置坐標(biāo)及附自U變量等已知約束條件進行第二次WLS估計,就能得到改進的估計位置[6],令Za=[ZTp,R]T,則:
誤差向量為ψ=h-Gaz0a。
第一次WLS所得:
第二次WLS所得式:
其中,zρ=[x,y]T
至此可以解出兩組坐標(biāo)值,舍去值為負(fù)的那一組,剩下的即為最終坐標(biāo)值。
上述TDOA算法已寫入麥克風(fēng)陣列固件中,當(dāng)麥克風(fēng)陣列被喚醒后可以直接投入使用并識別聲源。
1.3.1 超聲波測距介紹
超聲波測距是一種不受物體自身色度和光線因素影響的非接觸檢測技術(shù)。與其他檢測儀器相比,它更環(huán)保,更抗熱、潮、粉末、高溫氧化等惡劣環(huán)境,具有維護少、高環(huán)保、牢靠性高、壽命長等特點[7-9]。
超聲波測距即將超聲波沿固定角度利用超聲波發(fā)射器進行發(fā)射,在發(fā)射初始時刻同步計數(shù)器進行時間的記錄。傳播超聲波的途中一旦遇到阻礙,迅速回傳。計時也會在接收器接收超聲波時終止。通過測試時間再換算出測試距離[10]。
本裝置使用的HC-SR04超聲波模塊,測試距離不大于4 m,測量精度可達(dá)到0.01 cm。
1.3.2 超聲波和激光測距算法
首先已知超聲波在25℃下的空氣中的傳播速度為340 m/s。
根據(jù)計時器記錄的時間t,可以計算出發(fā)射點距障礙物的距離s,即:
測距模塊就是基于這一原理實現(xiàn)測距的,一般稱之為時間差測距法。
圖像組件的激光測距原理與超聲波測距原理是一樣的。測距的公式表示為:
式中,C為超聲波在空氣中的傳播速度;T為測量距離傳播的時間差。
上述超聲波測距算法已寫入機器人中,。
硬件裝置主要由四大組件組成:定向組件、測距組件、圖像組件、人形機器人。定向組件包括六麥環(huán)形MIC陣列,實現(xiàn)角度測量和人形機器人的定向功能;測距組件包括HC-SR04超聲波模塊,實現(xiàn)距離測量功能;圖像組件包括N10激光雷達(dá),實現(xiàn)機器人周圍環(huán)境二維圖像的繪制;人形機器人實現(xiàn)人臉識別功能。定向組件、測距組件和圖像組件分別與人形機器人實行電連接。通過計算機終端控制三個組件,控制過程由計算機語言驅(qū)動。系統(tǒng)主要部件連接示意圖如圖3所示。
圖3 系統(tǒng)主要部件連接示意圖
科大訊飛六邊形環(huán)形MIC陣列利用TDOA算法能識別前方360°的聲音信號(角度分辨率為1°),具備定向降噪收音功能,可開發(fā)語音定位控制功能。將其與機器人進行電連接,通過在終端編寫程序控制該組件,從而在終端輸出角度測量值,實現(xiàn)機器人對音源方位的判斷和聲源角度方位的測量。麥克風(fēng)陣列實物圖如圖4所示。
圖4 麥克風(fēng)板的實物圖
HC-SR04超聲波測距模塊可提供2~400 cm的非接觸式距離感測功能,測距精度可高達(dá)到3 mm[8]。實物圖如圖5所示。
圖5 超聲波模塊實物圖
輪趣科技的N10系列激光雷達(dá)能夠?qū)χ車?60°環(huán)境進行二維掃描探測。雷達(dá)內(nèi)部使用無線供電和光通信,測量重頻為4.5 kHz。探測精度達(dá)到±3 cm,最大量程12 m,適用于機器人、無人機的精確定位和避障的應(yīng)用場合。實物圖如圖6所示。
圖6 N10激光雷達(dá)實物圖
TonyPi智能視覺人形機器人以樹莓派4B為主控,采用Python語言和C++編程。搭載高清晰度廣角攝像頭,可后期開發(fā)人臉識別、顏色識別、視覺巡線等功能。將其與六麥環(huán)形MIC陣列、超聲波模塊和N10激光雷達(dá)電連接構(gòu)成總體裝置,通過在終端編寫程序控制機器人,使機器人在收到聲音信號后能夠定向運動至聲源方位,實現(xiàn)對聲源的精確定位。同時需要注意機器人與控制終端應(yīng)連接相同局域網(wǎng)才能使用該裝置。機器人實物圖如圖6所示。
圖7 機器人實物圖
六麥環(huán)形MIC陣列可接收信號范圍在其所在的三維空間內(nèi),但是其處于水平狀態(tài)時探測效果最好(即MIC陣列所在平面與xoy平面平行)。
超聲波模塊采用回聲測距,為保證測距精準(zhǔn)性,其發(fā)射出的超聲波應(yīng)與xoy平面平行,這樣測得距離為與聲源的水平距離。
N10激光雷達(dá)通過測量調(diào)制激光的發(fā)射與返回時間差來測量物體與雷達(dá)的相對距離,可以得到量程內(nèi)周圍360度環(huán)境的二維平面信息。
最終組裝完成實物圖如圖8所示。
圖8 實物裝置圖
硬件準(zhǔn)備:
手扶機器人,使其基本站立(機器人開機前姿勢為半蹲,各關(guān)節(jié)是松弛的)。然后將機器人背面底部的樹莓派擴展板開關(guān)由“OFF”推動到“ON”。
網(wǎng)絡(luò)環(huán)境配置:
直連模式;操作為開啟機器人,使操作終端連接機器人產(chǎn)生的“HW”開頭的無線局域網(wǎng),該局域網(wǎng)沒有密碼限制,操作終端可以直接連接,操作終端連接的局域網(wǎng)見圖9中紅色方框。
圖9 機器人產(chǎn)生的無線局域網(wǎng)
局域網(wǎng)模式;首先,建立記事本文件如圖10所示。
圖10 實現(xiàn)局域網(wǎng)模式連接需建立的記事本文件
其中hotspot name為個人局域網(wǎng)名稱,password為局域網(wǎng)密碼。
關(guān)閉該文件,將文件后綴從.txt改為.conf,將此文件復(fù)制到機器人儲存文件的目錄中,修改后文件與文件目錄如圖11所示。
圖11 修改后的記事本文件與文件目錄
另外開啟一個局域網(wǎng),使操作終端與機器人同時連接于該局域網(wǎng)下,連接成功后可顯示操作終端與機器人的IP地址,如圖12所示。
圖12 局域網(wǎng)連接成功后設(shè)備參數(shù)
本文中操作采取局域網(wǎng)模式,因能連接外網(wǎng),工作調(diào)試時更為方便。
表1 功能文件準(zhǔn)備及文件路徑
為了定位聲源,應(yīng)用程序通過init.launch文件開啟機器人節(jié)點,通過終端輸入喚醒詞激活麥克風(fēng)陣列使其調(diào)用voice_control.cpp文件,實現(xiàn)語音喚醒麥克風(fēng)陣列的功能。并由CMakeLists.txt文件實現(xiàn)C++并行執(zhí)行python文件的功能,其中python文件包括Chaoshengbo.py(實現(xiàn)超聲波模塊測距)、action.py(實現(xiàn)機器人動作組)、FaceDetect.py(實現(xiàn)人臉識別)。同時并行開啟雷達(dá)節(jié)點,執(zhí)行l(wèi)sn10.launch(開啟雷達(dá)實現(xiàn)圖像繪制),在終端打開RVIZ輸出雷達(dá)點云圖。聲源定位應(yīng)用流程圖如圖13所示。
圖13 聲源定位應(yīng)用程序流程圖
開啟電腦,打開vncviewer軟件,輸入機器人的IP地址以連接樹莓派機器人并進入虛擬機。
打開虛擬機終端,在其中輸入roslaunch xf_mic_asr_offline mic_init.launch指令開啟麥克風(fēng)陣列初始化節(jié)點。
初始化節(jié)點后,超聲波測距模塊和麥克風(fēng)陣列模塊自動開啟,如圖14所示。
圖14 測量模塊啟動成功
輸入麥克風(fēng)語音陣列喚醒詞來激活麥克風(fēng)陣列;喚醒詞是麥克風(fēng)陣列錄入的可修改的語音關(guān)鍵詞,用于喚醒激活系統(tǒng)。本文中操作設(shè)置喚醒詞為“羅伯特轉(zhuǎn)過來”。激活麥克風(fēng)陣列后,檢驗麥克風(fēng)陣列對聲源定位的準(zhǔn)確性以及機器人對聲源進行轉(zhuǎn)向的靈敏度,以機器人自身面對方向為0°基準(zhǔn)給出聲源的角度方位。機器人轉(zhuǎn)至聲源所在的方位后自動執(zhí)行chaoshengbo.py,測量聲源與機器人的距離;待機器人行至聲源時,運行FaceDetect.py文件,實現(xiàn)人臉識別功能,并能與聲源做出相應(yīng)的交互,如鞠躬、揮手等動作;麥克風(fēng)喚醒激活與測量數(shù)據(jù)返回,如圖15所示。
圖15 測量數(shù)據(jù)和人機互動結(jié)果
打開一個虛擬機終端,在其中輸入roslaunch lsn10 lsn10.launch指令開啟雷達(dá)節(jié)點。
另外打開一個虛擬機終端,在其中輸入rviz指令,如圖16所示。
圖16 使用rviz指令繪制二維圖像
輸入rviz指令后,雷達(dá)星云圖自動打開。為了在雷達(dá)星云圖上更好地體現(xiàn)現(xiàn)實場景,測試過程中設(shè)計了2個實際場景,機器人實物圖與雷達(dá)星云圖對照如圖17、圖18以及圖19、圖20所示。
圖17 機器人實物場景1
圖18 雷達(dá)星云圖1
圖19 機器人實物場景2
圖20 雷達(dá)星云圖2
數(shù)據(jù)測量過程中,將實驗者視作聲源,實驗者說出喚醒詞“羅伯特,轉(zhuǎn)過來”啟動裝置,機器人接收到聲音信號后進行語音回復(fù)“讓我看看你在哪”。隨后進行角度測量與距離測量,在終端輸出測量結(jié)果;輸出結(jié)果后,機器人定向運動至聲源所在方位(即實驗者所在方位),并與聲源做出交互動作。測量演示圖如圖21所示。
圖21 測量演示圖
首先,按照前文硬件準(zhǔn)備的操作來開啟機器人,實驗者說出喚醒詞“羅伯特轉(zhuǎn)過來”來開啟麥克風(fēng)。
開機成功后,固定機器人,使其面對方向作為基準(zhǔn) 0°。
設(shè)備調(diào)試完畢后,實驗者站在一定的角度方位說出喚醒詞,此角度為角度實際值θ。機器人收到指令后向聲源方位轉(zhuǎn)向,以機器人最終朝向為角度測量值β。機器人轉(zhuǎn)向動作結(jié)束后啟動人臉識別模式,以自身朝向方位為0°基準(zhǔn),頭部攝像頭分別向左右兩邊轉(zhuǎn)動15°以搜索聲源,檢測到聲源后做出動作與聲源進行交互。
角度測量在三維空間中的重現(xiàn)如圖22所示。
圖22 角度測量在三維空間中的重現(xiàn)圖
角度測量數(shù)據(jù)如表2所示。
表2 測量角度數(shù)據(jù)
圖22中y軸數(shù)據(jù)為角度測量值,x軸數(shù)據(jù)為角度實際值。紅色直線為函數(shù)y=x,藍(lán)色散點為測量數(shù)據(jù)。
圖23 角度測量值和角度實際值的擬合
首先開啟機器人,實驗者在終端輸入指令來開啟超聲波模塊。開機成功后固定機器人,以固定后位置作為基準(zhǔn)零點。
設(shè)備調(diào)試完畢后,以機器人與實驗者間距作為距離實際值d,實驗者逐漸遠(yuǎn)離機器人。實驗者在移動過程中距離實際值d也隨之改變,測量結(jié)果實時在終端顯示,用水平尺測量實驗者和機器人距離作為實際值d,終端輸出數(shù)據(jù)為測量值L。
距離測量在三維空間中演示如圖24所示。
圖24 三維空間中的距離測量演示圖
距離測量數(shù)據(jù)如表3所示。
表3 測量距離數(shù)據(jù)
圖25中y軸數(shù)據(jù)為距離測量值,x軸數(shù)據(jù)為距離實際值。紅色直線為函數(shù)y=x,藍(lán)色散點為測量數(shù)據(jù)。
圖25 距離測量值和距離實際值的擬合
(1)角度測量誤差:
最大誤差≈42.86%,最小誤差≈0%。
這里誤差過大有兩個原因:
①數(shù)據(jù)測量過程中偏差定義為“實際值-測量值”,誤差定義為“偏差/實際值”。經(jīng)過多次測量得出統(tǒng)計性結(jié)論,偏差在0°~7°左右。由誤差定義可知,當(dāng)實際值越小,即使只有1°的偏差,也會造成較大誤差。
②由于機器人的單次轉(zhuǎn)動具有一定分辨率限制,機器人對角度的分辨率最小值為10°(即機器人單次轉(zhuǎn)動最小角度為10°)。由于六麥環(huán)形陣列的麥克風(fēng)平面布局限制,在其指向30°以內(nèi)角度測量的誤差較大。并且會因為終端調(diào)整機器人參數(shù)或不同地面摩擦因數(shù)改變而產(chǎn)生一定的誤差,而機器人對于大角度的轉(zhuǎn)動不是一次完成的,每次轉(zhuǎn)動如若有1°~2°的誤差,累計轉(zhuǎn)動多次后誤差會導(dǎo)致誤差積累,但與10°內(nèi)角度測量相比較已有顯著的誤差改善。
為了探究清楚測量誤差與實際角度之間的關(guān)系,給出了測量誤差與測量角度之間的散點圖(如圖26所示),并在實際角度30°內(nèi)進一步做出數(shù)據(jù)測量,角度進一步測量數(shù)據(jù)如表4所示。
圖26 測量誤差和角度實際值的散點圖
表4 實際角度30°以內(nèi)的測量數(shù)據(jù)
經(jīng)過多次測量得出統(tǒng)計數(shù)據(jù),30°以內(nèi)的測量值誤差較大,參考意義不大,因此將測量數(shù)據(jù)中30°以內(nèi)的數(shù)據(jù)拋除后得到相對誤差如下:最大誤差≈4.35%,最小誤差≈0%。
雖然相對誤差仍然較大,但由于機器人在完成轉(zhuǎn)向動作后,以轉(zhuǎn)向后自身朝向方位為0°基準(zhǔn),頭部攝像頭分別向左右兩邊轉(zhuǎn)動15°搜索聲源。所以仍然可以實現(xiàn)聲源的精確定位,實際應(yīng)用中影響收效甚微。
(2)距離測量誤差:最大誤差≈3.5%,最小誤差≈0%。
該裝置距離檢測誤差較小,但由于裝置發(fā)射超聲波為直線傳播,所以檢測聲源需與裝置處于同一平面內(nèi),這是該裝置的一點局限性。
本裝置以樹莓派機器人為搭建平臺,結(jié)合六麥環(huán)形陣列、超聲波模塊和N10激光雷達(dá)分別實現(xiàn)方位判斷、距離測量、繪制圖像功能,測量數(shù)據(jù)誤差較小。
(1)六麥環(huán)形MIC陣列一般應(yīng)該豎直放置,但豎直放置方法只能識別機器人面朝方向180°的聲音方位,無法識別身后聲音。而本裝置中將陣列水平放置,使裝置能夠精準(zhǔn)判斷以自身為圓心、半徑4 m、360°以內(nèi)的聲音方位,使得應(yīng)用性增強。
(2)對樹莓派機器人進行深度開發(fā),使其在判斷聲音方位后再進行人臉識別,進一步聲源定位,并在定位后做出動作和對話,增強了人機互動效果。
(3)將雷達(dá)與機器人相結(jié)合,能夠返回以自身為圓心、半徑12 m、360°以內(nèi)的二維空間圖像,可開發(fā)地震救援、資源勘探等功能。在實際應(yīng)用上具有更多可能性。