概述

ROS介紹

ROS是是用於機器人的一種次級作業系統。它提供類似作業系統所提供的功能,包含硬體抽象描述、底層驅動程式管理、共用功能的執行、程式間的訊息傳遞、程式發行包管理,它也提供一些工具程式和庫用於獲取、建立、編寫和執行多機整合的程式。對ROS進行分級可分為計算圖級、檔案系統級、社群級。其中計算圖級主要描述程式如何執行;檔案系統級決定程式檔案如何組織和構建;社群級負責程式的分散式管理。計算圖是ROS處理資料的一種點對點的網路形式。程式執行時,所有程序以及他們所進行的資料處理,將會通過一種點對點的網路形式表現出來。這一級主要包括幾個重要概念:節點(node)、訊息(message)、主題(topic)、服務(service)。
具體見 http://wiki.ros.org/

訊飛語音介紹

訊飛開放平臺作為全球首個開放的智慧互動技術服務平臺,致力於為開發者打造一站式智慧人機互動解決方案。使用者可通過網際網路、移動網際網路,使用任何裝置、在任何時間、任何地點,隨時隨地享受訊飛開放平臺提供的“聽、說、讀、寫……”等全方位的人工智慧服務。目前,開放平臺以“雲+端”的形式向開發者提供語音合成、語音識別、語音喚醒、語義理解、人臉識別、個性化彩鈴、移動應用分析等多項服務。
相比其他的語音sdk,科大訊飛提供了多個平臺的sdk,適合各個領域的開發與應用。並且提供了開放語義的平臺和完善和開發者平臺,能夠很方便對機器人的對話進行自定義。

硬體條件

  • intel minnow board 開發板 (當然一般膝上型電腦也可以)
  • 科大訊飛五麥環形陣列評估版(也可用軟體sdk方法實現喚醒,後面會介紹)

環境準備

  • 安裝好ubuntu 14.04 LTS
  • 搭建好一個catkin工作空間
  • 安裝mplayer播放器(用於音訊播放)
    • 命令 sudo apt-get install mplayer
  • 可選軟體
    • 安裝ssh服務端(主要方便遠端命令列除錯)
    • 安裝x11vnc(主要方便遠端桌面除錯)
    • 安裝samba(主要方便檔案的傳輸與共享)
  • 註冊有訊飛開發平臺賬號
    • 建立了app
    • 下載相關sdk的linux版本(包括離線命令字識別,離線語音合成,申請開發雲語義,語音喚醒)
    • 編譯執行官方demo測試sdk能使用以後,將離線命令字識別包中的lib/libmsc.so複製到/usr/lib目錄下,這個libmsc.so包含了所有的api函式。

整體節點框圖

image

工作過程

  • 五麥陣列硬體監聽到特定的關鍵字後通過串列埠傳送喚醒訊號給平臺,wakeup節點監聽串列埠,喚醒後傳送一個主題為xfwakeup的訊息,此訊息包含喚醒的角度資訊。(此節點也可以裡利用訊飛的語音喚醒sdk以軟體方式實現,後續會介紹)
  • xfasr節點訂閱了xfwakeup訊息,訊息來到後,xfasr節點就開始一邊取樣聲音訊號,一邊進行識別,但又識別結果或者設定時間到達後,停止錄音。若識別成功,則將返回的結果的json格式傳送到xfunderstand主題上。
    若沒有識別結果,這傳送失敗提示語到xfsaywords主題上。
  • xftts訂閱了xfsaywords主題,並負責將此主題出現的訊息的字串轉換為音訊檔案,然後呼叫mplayer播放器播放。xftts還訂閱了xfplaywave的主題,用於播放指定路徑或者網址的檔案
  • explain節點訂閱xfunderstand主題,功能是對識別結果進行解析,併發出相應的控制指令到control_cmd主題上,同時將應答語句傳送到xfsayword主題,以便xftts節點進行轉換播放。此節點採用python語言編寫,方便隨時修改和升級

主要工作

  1. 將自己的喚醒字資原始檔下載到環形陣列板卡中,並實現板卡串列埠與平臺串列埠的連線,在c語言中編寫相應的驅動。(筆者在這取樣的是mraa庫)
  2. 編寫xfasr節點,能做到一邊錄音一邊識別,識別到結果後自動停止錄音。這裡筆者是花了很多時間的,主要是在音效卡的驅動上,最後採用的alsa錄音。
  3. 編寫xftts節點,簡單講官方的demo改改就可以實現,播放時筆者利用裡mplayer播放器,使用其被動模式,與管道通訊的方法,實現了隨時播放也可被打斷,並且穩定性高。
  4. explain節點就是將識別結果的json資料轉換為字典變數,然後進行進一步解析和處理。

本系列結構

本系列為ROS+科大訊飛語音=讓你的機器人能聽會說,
主要分為環境搭建與準備篇,說話篇,識別篇,喚醒篇,語義解釋篇五部分。
筆者的所有原始碼 將在相關篇中全部列出,並且會上傳到筆者的github倉庫儲存
git倉庫地址 https://github.com/zhouge94/Cute_Six_ROS_Balance (已經上傳)