王曉華, 要鵬超, 廣夏桐, 王文杰, 張 蕾
(西安工程大學(xué) 電子信息學(xué)院,陜西 西安 710048)
機(jī)器人語音控制系統(tǒng)中,通常包含了大量語音資料的語音軟件包,并相應(yīng)地形成控制模型,控制者的控制命令在經(jīng)過語音識別模塊的處理后,被匹配到相關(guān)的控制模型上,機(jī)器人控制器就能夠下達(dá)指令指揮機(jī)器人完成作業(yè)任務(wù)[1,2]。然而在工業(yè)生產(chǎn)現(xiàn)場中,控制命令一般字?jǐn)?shù)簡短,相對應(yīng)的控制模型只是生產(chǎn)中的幾個動作。因而,常用語音包的內(nèi)容冗余,語音處理以及查找識別就會影響命令執(zhí)行效率或者增加系統(tǒng)功能開支。研究者一般應(yīng)用語音處理與識別知識,自己設(shè)計語音控制系統(tǒng),基于單片機(jī)的機(jī)器人語音控制系統(tǒng),處理性能較低、識別效果差[3];基于數(shù)字信號處理(digital signal processing,DSP)以及ARM等平臺的語音識別系統(tǒng)需要移植,過程復(fù)雜,實(shí)現(xiàn)難度較大[4]。如何高效地處理語音命令被機(jī)器人準(zhǔn)確識別是語音控制是否高效的標(biāo)準(zhǔn)。
本文設(shè)計了一種基于機(jī)器人操作系統(tǒng)(robot operating system,ROS)的移動機(jī)器人語音控制系統(tǒng),對獲取的語音命令進(jìn)行預(yù)加重處理,提升語音命令信號高頻信息;采用加窗方法避免分幀時頻譜泄露;采用基于Fisher比的Bark小波包變換的方法有效提取特征參數(shù),利用隱馬爾科夫模型(hidden Markov model,HMM)算法進(jìn)行語音識別,識別結(jié)果發(fā)送給移動機(jī)器人后,移動機(jī)器人便能夠按照人的語音命令執(zhí)行相應(yīng)的動作。
預(yù)處理過程包括語音的采樣、預(yù)加重、加窗分幀以及端點(diǎn)檢測[5]。預(yù)加重能夠消除采樣語音信號在低頻段的噪聲干擾,圖1為語音控制命令“前進(jìn)”預(yù)加重前后的頻譜圖,可看出預(yù)加重后語音命令信號的頻譜在高頻部分得到了提升。
圖1 語音命令‘前進(jìn)’預(yù)加重前后的頻譜
為防止預(yù)加重后的語音信號進(jìn)行分幀操作有效提取特征時導(dǎo)致信號的頻譜泄露,進(jìn)行了加窗處理
(1)
端點(diǎn)檢測的正確性直接影響語音識別的準(zhǔn)確率。本文使用短時能量與短時過零率相結(jié)合的雙門限檢測法[6],對語音信號進(jìn)行端點(diǎn)檢測。如圖2所示,為語音控制命令‘前進(jìn)’的端點(diǎn)檢測結(jié)果。
圖2 語音命令‘前進(jìn)’的端點(diǎn)檢測結(jié)果
傳統(tǒng)的梅爾頻率倒譜系數(shù)(Mel frequency cepstrum co-efficient,MFCC)[7]法只反映語音特征參數(shù)的靜態(tài)特性。為有效的解決此問題[8],本文采用基于Fisher比的Bark小波包變換算法進(jìn)行語音特征提取,具體步驟如下:
1)將獲得的每幀語音信號進(jìn)行Bark尺度小波包變換,求出每組頻帶的小波包系數(shù);
2) 計算第n幀第m個頻帶能量
(2)
式中Wn(m,k)為一幀語音的小波包系數(shù);Nm為第m頻帶中小波包系數(shù)個數(shù);
3)計算DTC倒譜,將每組頻帶能量通過DTC,再進(jìn)行計算可得到小波包倒譜系數(shù)
(3)
4)Fisher的計算,F(xiàn)isher準(zhǔn)則是將特征參數(shù)向量投影到最佳方向而獲得最大的類間距離,計算公式為
(4)
5)Fisher比選擇,特征參數(shù)中加入動態(tài)特征可提高系統(tǒng)的識別性能,由式(4)計算出12維小波包倒譜系數(shù)和12維一階差分動態(tài)特征中的每維Fisher比結(jié)果,如圖3所示,從小波包倒譜系數(shù)和一階差分參數(shù)中分別選取Fisher比最大的6組,并組成12維的特征參數(shù),即為本文提取的語音命令的特征參數(shù)。
圖3 一階差分參數(shù)和小波包倒譜系數(shù)的各維Fisher比
HMM[9]是對語音信號的時間序列結(jié)構(gòu)所建立的統(tǒng)計模型,由5個模型參數(shù)定義為M={T,M,π,A,B},其中,T為隱馬爾可夫模型中的狀態(tài)數(shù);M為每個狀態(tài)的觀察符號數(shù);π為初始狀態(tài)概率分布,π=[πi],其中,πi=P[q1=i],1≤i≤N;A為狀態(tài)轉(zhuǎn)移概率分布,A=[aij],其中,aij=P[qt+1=j|qt=i],1≤i≤N,1≤j≤N;B為觀察符號的概率分布,B=[bj(k)],其中,bj(k)=[ot=vk|qt=j],1≤k≤M,1≤j≤N。
語音命令識別過程,分為訓(xùn)練和識別兩部分。訓(xùn)練時,對所有的語音控制命令分別提取特征參數(shù),并以此為參數(shù)模板,為每個語音命令建立HMM聲學(xué)模型。識別時,對待識別的語音控制命令提取特征參數(shù),并組成特征矢量,作為觀察序列O={o1,o1,…,oT},計算該組觀察序列在每個HMM下的輸出概率,選擇模型的最大輸出概率所對應(yīng)的語音控制命,作為識別結(jié)果。
本文設(shè)計的移動機(jī)器人語音控制系統(tǒng)由語音識別部分和機(jī)器人控制部分組成,系統(tǒng)的總體結(jié)構(gòu)如圖4所示。
圖4 系統(tǒng)的整體框圖
語音識別部分主要由語音命令的預(yù)處理、特征提取、語音的訓(xùn)練和識別四部分組成。麥克風(fēng)采集的語音控制命令進(jìn)行采樣、預(yù)加重、加窗分幀以及端點(diǎn)檢測并特征提取后,對每個語音命令訓(xùn)練HMM聲學(xué)模型,建立起語音命令庫,控制命令識別通過比較語音庫中每個語音指令的HMM參數(shù)模型所輸出概率的大小作為識別結(jié)果。
機(jī)器人控制部分由ROS、機(jī)器人控制系統(tǒng)、I/O通信接口三部分組成。在上位機(jī)安裝機(jī)器人操作系統(tǒng),下位機(jī)搭建機(jī)器人的控制系統(tǒng),上位機(jī)通過串口與下位機(jī)建立通信,將識別結(jié)果發(fā)送給機(jī)器人控制系統(tǒng),機(jī)器人控制系統(tǒng)接收機(jī)器人操作系統(tǒng)發(fā)送的語音命令,并把語音命令通過I/O通信接口轉(zhuǎn)化為控制信號,控制移動機(jī)器人前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)運(yùn)動。
使用C++語言分別編寫前述語音識別過程代碼,形成語音控制系統(tǒng)所需的語音采集軟件包、語音處理軟件包、語音識別算法軟件包、機(jī)器人控制軟件包,編寫節(jié)點(diǎn)即可調(diào)用相應(yīng)的語音軟件包。應(yīng)用ROS提供的程序接口進(jìn)行g(shù)cc編譯,并移植到ROS相對應(yīng)的模塊中,通過ROS的通信機(jī)制將各個獨(dú)立的模塊串接起來,完成整個語音控制系統(tǒng)的設(shè)計。各節(jié)點(diǎn)間通信的鏈接關(guān)系,如圖5所示。
圖5 ROS系統(tǒng)下語音控制系統(tǒng)的節(jié)點(diǎn)鏈接
圖5中,方框為消息,橢圓為節(jié)點(diǎn),矩形為話題。節(jié)點(diǎn)/audio_capture來獲取通過麥克風(fēng)采集的語音控制信號,并發(fā)布消息到/microphone話題;節(jié)點(diǎn)/wakeup_node訂閱/microphone話題,檢測輸入的語音控制信號是否為有效的語音信號,來啟動語音識別系統(tǒng),然后,將有效語音控制信號作為消息發(fā)送到/asr_topic話題;節(jié)點(diǎn)/asr_node訂閱/asr_topic話題,把檢測到的有效語音控制信號發(fā)送到語言庫進(jìn)行匹配,并發(fā)布該消息到/command_topic話題;節(jié)點(diǎn)/command_node訂閱/command_topic話題,經(jīng)過語音匹配和處理,判斷機(jī)器人應(yīng)該執(zhí)行哪個命令,并把該消息發(fā)布到/move_topic話題;節(jié)點(diǎn)/voice_node訂閱/move_topic話題,接收語音控制命令并發(fā)送給機(jī)器人,從而控制機(jī)器人運(yùn)動。
本文硬件平臺采用擁有Inter雙核處理器的個人電腦(PC)和turtlebot移動機(jī)器人,軟件平臺采用Ubuntu14.04系統(tǒng),并安裝支持Indigo版本的ROS系統(tǒng),實(shí)現(xiàn)對移動機(jī)器人的語音控制。
為了驗證移動機(jī)器人的語音控制功能,本文利用ROS提供的虛擬機(jī)器人進(jìn)行仿真測試,編寫ros_voice.bringup.launch文件,啟動語音采集、語音檢測、語音識別、機(jī)器人控制等節(jié)點(diǎn)和Turtlesim虛擬機(jī)器人。通過獲取的語音控制指令“前進(jìn)”、“左轉(zhuǎn)”、“后退”和“右轉(zhuǎn)”來控制虛擬機(jī)器人,虛擬機(jī)器人的運(yùn)動效果如圖6所示。
圖6 仿真環(huán)境下的語音控制機(jī)器人
為了驗證本系統(tǒng)的可行性,對Turtlebot移動機(jī)器人的語音控制效果進(jìn)行測試, 訓(xùn)練數(shù)據(jù)來自于安靜環(huán)境下10人的(7男3女)語音,以8 000 Hz為采樣率,16 bit為量化。語音命令包括前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止等。每個命令錄音約2 s,錄20次為訓(xùn)練數(shù)據(jù)并保存到語音命令庫中。測試數(shù)據(jù)隨機(jī)選取5人(3個男生,2個女生)對移動機(jī)器人語音指令前進(jìn)、左轉(zhuǎn)、后退、右轉(zhuǎn)、停止,進(jìn)行50次測試,測試結(jié)果如表1所示。
表1 不同人群測試下的識別準(zhǔn)確率 %
由表1可知,由于每個人的發(fā)音不同,導(dǎo)致識別率不一樣,但平均識別率仍在94 %以上,能夠滿足機(jī)器人的語音控制要求。為了進(jìn)一步驗證本系統(tǒng)的有效性,將本文設(shè)計的語音控制系統(tǒng)與微軟公司開發(fā)的 Microsoft Speech SDK[10]語音識別系統(tǒng),分別對Turtlebot移動機(jī)器人的語音控制效果進(jìn)行50次測試,測試結(jié)果如表2所示。
表2 不同系統(tǒng)下的語音識別結(jié)果
由表2可知:本文設(shè)計的基于ROS的語音控制系統(tǒng)和傳統(tǒng)的語音識別包的控制系統(tǒng),識別率分別為95.6 %,94 %,識別時間分別為255.6,273.5 ms,表明本文設(shè)計的語音控制系統(tǒng)具有一定的實(shí)時性和有效性。
本文在Turtlebot移動機(jī)器人平臺上,實(shí)現(xiàn)了基于ROS的移動機(jī)器人語音控制系統(tǒng),實(shí)驗結(jié)果表明:系統(tǒng)對非特定人的語音指令有較好的分辨能力,且對用戶語音命令的反應(yīng)速度有明顯的提高,系統(tǒng)結(jié)構(gòu)簡單、成本低、穩(wěn)定性好,能夠滿足對移動機(jī)器人實(shí)時控制的要求,具有良好的開發(fā)運(yùn)用前景。