廖春藍
(廣州番禺職業技術學院,廣東廣州 511400)
2021年12 月,工業和信息化部、國家發展和改革委員會、科學技術部等十五個部門聯合發布了《“十四五”機器人產業發展規劃》,指出機器人的研發、制造和應用是衡量一個國家科技創新的重要標志。黨中央、國務院高度重視機器人產業的發展,將機器人納入國家科技創新重點領域,大力推動機器人研發創新和產業化應用[1]。無論是迎賓機器人、教育機器人,還是養老助殘機器人、家務機器人,這些服務機器人要服務人類完成某項工作,就必須具備與人交流的能力,即“聽”和“說”的能力。因此,語音交互是服務機器人必不可少的一項功能。
機器人操作系統(Robot Operating System,ROS)是一個面向機器人的開源元操作系統,遵守BSD開源許可協議。ROS屬于建立在傳統操作系統上的次級操作系統,并為其提供一個結構化的通信層。它提供了一系列類似傳統操作系統的功能,例如硬件抽象、設備驅動、庫函數、可視化、消息傳遞和軟件包管理等,以幫助軟件開發者創建機器人的應用軟件[2]。ROS強大的功能使得開發者能夠比較容易地進行語音交互工程部署,實現迎賓機器人跟人類的交流并按照人類的命令完成某項任務。ROS具有點對點設計、多語言支持、架構精簡、集成度高、工具包豐富、免費開源等特點。
傳統的人機交互一般通過圖形的方式進行強視覺弱邏輯的交互,也被稱為GUI(Graphic User Interface)。而語音交互(Voice User Interface,VUI)則是通過語音的方式進行人機交互,強邏輯而無視覺(或者弱視覺)。VUI通過語音傳遞所有足夠的信息,承載認知、邏輯、情緒等等一切元素,這才是智能語音交互的核心所在[3]。
語音交互系統是迎賓機器人的核心模塊之一,它使得機器人具有像人一樣“能聽會說、有問必答”的交互能力,是實現迎賓機器人跟人類交流的關鍵環節。首先,迎賓機器人身上裝載的語音輸入設備(例如麥克風陣列模塊)采集用戶的語音,完成音頻的錄入、采樣及編碼。語音識別環節完成語音信息到機器可識別的文本信息的轉化。語言處理環節根據語音識別轉換后的文本字符或命令進行邏輯判斷后完成相應的操作處理。最后,語音合成環節完成文本信息到聲音信息的轉換,并將語音信號輸出反饋給人類。語音交互系統框圖如圖1所示。

圖1 語音交互系統框圖
在迎賓機器人工作過程中,當人類對機器人下達語音命令時,迎賓機器人首先會“聽懂”人的語音,在進行語音信號的識別和處理之后,機器人會“回答”人類的提問,并按照人類的指令完成某項任務,這就是語音交互控制系統的功能所在。
迎賓機器人的語音交互系統主要由硬件和軟件兩部分構成。硬件部分主要由麥克風陣列模塊、揚聲器和相關接口電路組成,軟件部分主要是基于ROS的程序控制。
迎賓機器人選用科大訊飛的麥克風陣列模塊實現語音采集,它是語音交互系統的核心硬件。
麥克風陣列模塊又被稱為麥克風陣列語音板,它采用平面環形分布結構。麥克風陣列模塊是一種包含一定數量的聲學傳感器(一般為麥克風),能對聲場的空間特性進行采樣并處理的系統。在機器人上裝載麥克風陣列模塊,迎賓機器人就能“聽見”人類的語音指令。
如圖2所示,麥克風陣列模塊在電路板外圍平均安置了6個麥克風,按照圖示的順時針順序從0~5進行編號,可以實現360°等效拾音。麥克風陣列模塊的語音喚醒分辨率為1°,并且具備抑制背景噪聲和混響、信號提取與分離等功能。

圖2 科大訊飛麥克風陣列模塊
科大訊飛麥克風陣列模塊利用多個麥克風在不同位置點對聲源進行測量,由于聲音信號到達不同麥克風的時間有不同程度的延遲,利用TDOA(Time Difference of Arrival)算法對測量得到的聲音信號進行處理,由此獲得聲源點相對于麥克風的到達方向和距離等信息,因而具備聲源定位的功能[4]。在環形分布的麥克風內側安置的一圈共12個均勻分布的LED燈就是用于實時顯示聲源方向的。此外,麥克風陣列語音板上配置了一個參考信號接口,可以讀取回聲并進行處理,實現回聲消除功能。
基于科大訊飛的軟件開發工具包SDK,迎賓機器人的語音交互系統開發了ROS語音功能包,該功能包放置在工程文件夾中。ROS語音功能包含交互相關的多個功能包,主要包含以下三個:離線語音識別包、離線語音合成包和在線語音合成包[5]。
離線語音識別包(xf_mic_asr_offline)可以讓迎賓機器人通過配置文件而具有良好的語音識別能力。該功能包作為與麥克風陣列模塊相關的所有接口的服務端,提供包括喚醒角度、降噪音頻、燈光控制、離線命令詞識別等功能。其提供與麥克風相關的多個接口,其文件目錄如圖3所示。

圖3 離線語音識別包目錄
離線語音合成包(xf_mic_tts_offline)能夠實現離線的語音合成,讓迎賓機器人能夠說出中文。離線語音合成包合成的引擎在SDK中,可以在無網絡的情況下使用,功能包目錄如圖4所示。

圖4 離線語音合成包目錄
迎賓機器人的語音交互控制思路如下:在5 m范圍內,當賓客用“小威小威”這個喚醒詞呼喊迎賓機器人時,迎賓機器人內部程序進入回調函數,調用相應的服務來獲取等待識別的語句。若識別成功,迎賓機器人會“回答”一句“在呢”。當賓客繼續說出“你是誰”“你來自哪里”等語句時,機器人會根據關鍵詞進行相應的回答。當賓客說出“向前走”“向后走”等語句時,迎賓機器人會以一定的速度移動。若識別失敗則不做任何操作,等待下一次的喚醒操作。
在裝載有麥克風陣列模塊的迎賓機器人上通過編寫Python程序,實現了對迎賓機器人的語音交互與控制,具體流程如下:
(1)安裝音頻播放庫。
利用如下指令為迎賓機器人安裝音頻播放庫:
$sudo apt-get install sox
$sudo apt-get install mplayer
(2)啟動語音合成。
新建一個終端,利用指令roslaunch啟動語音合成節點:
$ roslaunch xf_mic_asr_offline xf_mic_tts_offline.launch
(3)啟動語音識別。
新建一個終端,利用指令roslaunch啟動語音識別節點:
$ roslaunch xf_mic_tts_offline xf_mic_asr_offline.launch
語音識別節點正常啟動后,迎賓機器人會說一句:“語音模塊啟動成功,請喚醒。”在這里,可以通過指令rosservice list和rostopic list查看當前所有活躍的服務和話題。
(4)運行語音交互節點。
在Python程序所在目錄下新建一個終端,輸入python yuyin.py,運行語音交互節點。當終端顯示語音交互節點成功連接語音合成和語音識別服務器后,賓客就可以跟機器人對話了。
(5)獲取語音識別結果和任務控制。
新建一個終端,輸入下面的命令,獲取語音識別結果和任務控制:
$roslaunchxf_mic_asr_offlineget_asr_result.launch
(6)啟動機器人基礎功能包。
新建一個終端,輸入下面的命令,啟動迎賓機器人的基礎功能包,可以通過它控制迎賓機器人移動:
$roslaunch vkbot_bringup minimal.launch
(7)發布機器人移動的速度信息。
新建一個終端,輸入下面的命令,獲取語音識別結果的節點將會發布機器人速度信息:
$rostopic info/cmd_vel_mux/input/teleop
在正常啟動語音模塊后,迎賓機器人播報“語音模塊啟動成功,請喚醒”。機器人在聽到賓客呼喊喚醒詞“小威小威”時,會回答一句“在呢”。賓客問:“你是誰?”迎賓機器人會回答:“我是迎賓機器人小威。”
當賓客在喚醒詞后繼續說“向前走”時,迎賓機器人會以一定的速度前進。程序成功運行后,終端顯示信息如圖5所示。終端輸出的“前”,表示迎賓機器人識別到賓客說話的關鍵詞是“前”。終端輸出的“0.300000 0.000000”是機器人X方向和Y方向的速度值,即機器人以0.3 m/s的速度向前走。

圖5 終端顯示
本文設計的基于ROS的迎賓機器人具有較好的語音交互功能,能夠順暢地與賓客進行語音交流,并且能夠按照賓客的語音指令完成相應的工作任務。利用ROS可以方便快捷地進行服務機器人的語音交互工程部署,這種設計方法具有典型性和實用性,可以推廣到服務機器人的其他復雜項目開發中,具有一定的參考價值和廣闊的應用前景。