[Robocon雜誌專欄]輕鬆使用Android 裝置控制樂高機器人:語音辨識機器人

原文登載於泛科學與 Robocon雜誌國際中文版

CAVE 在2013 年也順利地完成了 6 篇的Android / 樂高機器人應用專欄, 請來 [App Inventor 中文學習網] 來看看所有的專題, 還可以下載原始碼唷

2222

Android 手機整合了許多Google 服務,除了常用的地圖之外,另一項好用的功能就是語音辨識,透過語音辨識來控制機器人也是樂趣十足呢。本期專欄中,您將可對手機說出「go」、「back」、「left」以及「right」等四個語音指令,讓機器人執行前進、後退與左右轉等共四種動作。有接觸過App Inventor 的師長朋友們,歡迎從App Inventor 中文學習網下載原始碼回去加入更多有趣的功能。

Google 語音辨識服務

只要是Android 手機或平板,都可直接使用Google 的語音辨識功能,甚至在Google 的Chrome 瀏覽器中,只要您的電腦接上麥克風,也能擁有這項貼心的服務。使用Google 語音辨識功能時,是將您的聲音資料送到Google 伺服器,再回傳判斷結果,所以都要用到網路。也正因為如此,App Inventor的SpeechRecognizer 元件不需設定任何屬性。將來如果您有興趣,可以嘗試用Java 程式語言去寫正規的Androidapp 來呼叫Google 語音辨識服務,就會發現它實際上是根據辨識結果的關聯性由高到低回傳一整個陣列,例如我們說「right」,辨識結果可能會是「right、night、nine⋯」等念起來很類似的字。

App Inventor 直接省略這個步驟只回傳第一筆資料,也就是關聯性最高的那筆資料,對初學者來說是相當合理又簡便的做法。

本期專題將使用App Inventor 中的SpeechRecognizer 元件來呼叫Google語音辨識服務,程式中定義了四個指令來控制機器人的動作。我們使用了SpeechRecognizer1.GetText 指令(圖1a),它會啟動Google 語音辨識服務並進行辨識,辨識完成後會自動啟動SpeechRecognizer1.AfterGettingText事件(圖1b),並將辨識結果以result這個參數回傳。

圖1a SpeechRecognizer 元件的執行語音辨識指令。

 

圖1b 辨識完成後自動啟動本事件,並回傳結果。

開始玩機器人

請把NXT 機器人組裝好,並將左側馬達接在NXT 的輸出端B ,右側則是輸出端C( 註1)。請確認NXT 主機的藍牙是啟動的,接著將NXT 主機與Android 手機進行藍牙配對(註2),完成之後就可以把機器人放到一邊了。啟動藍牙之後您可以從NXT 主機的螢幕左上角看到藍牙的符號。

接下來依序介紹程式的各個功能:

STEP1 登入畫面:
首次進入程式的畫面如圖2a , 只有「NXT 裝置清單/ 連線」按鈕可以按,其它所有按鈕都無法操作。點選「NXT 裝置清單/ 連線」按鈕後進入藍牙裝置清單(圖2b),請找到剛剛配對完成的NXT 主機名稱(本範例為abc),點選之後就會由Android 裝置對NXT 主機發起藍牙連線。順利連線成功的話,「NXT 裝置清單/ 連線」按鈕(圖2c)。

圖2a 程式首次執行的畫面。
圖2b 點選連線按鈕後進入藍牙裝置清單。
圖2c 連線成功後才可進行相關操作。

 

STEP2 程式初始化:
在點選連線清單之前(ListPickerConnect 的BeforePicking 事件),需先將清單內容指定為Android 裝置上的藍牙配對清單(圖3a)。點選之後則先測試連線是否成功,成功則將「點我語音辨識」與「斷線」按鈕設為可點選(圖3b)。

圖3a 指定藍牙配對裝置清單。

 

圖3b 連線成功後啟動相關元件。

 

STEP3 按鈕啟動Google語音辨識服務:
按下「點我語音辨識」之後,會透過SpeechRecognizer1.GetText 指令來呼叫Google 的語音辨識服務, 本指令不需要設定任何參數(圖4)。

圖4 按鈕呼叫Google 語音辨識服務。

STEP4 語音辨識完成事件:
對著畫面上的麥克風講完話之後,會自動啟動SpeechRecognizer1.AfterGettingText 事件, 並回傳一個result 參數代表辨識結果。我們先將辨識結果顯示在手機螢幕的黃色Label 上, 接著判斷result 是否等於指定文字,並以此要求機器人執行對應的動作。圖5a 中, 辨識結果等於「go」的話,會讓機器人以80% 的電力前進10 公分。完整的事件內容總共包含了四個if 判斷結構,代表四個不同的狀況(圖5b),您可以根據需求來加入更多語音指令。

圖5a 如果辨識結果為go ,讓機器人直走。

 

007b

圖5b 語音辨識事件中完整程式碼。

 

STEP5 斷線:
按下「斷線」按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使畫面上的各個元件恢復到程式一開始時的狀態(圖6)。

圖6 按下「斷線」按鈕時中斷藍牙連線。

操作

實際執行的時候,請先確認NXT已經開機且藍牙也啟動了。接著在您的Android 裝置上點選畫面中的「NXT 裝置清單/ 連線」按鈕,會進到如圖2b的藍牙清單畫面,點選您所要的NXT主機名稱並連線成功後,就能對手機說話來控制機器人啦(圖7)!

圖7a 語音辨識畫面。
圖7b 辨識結果:go 前進。
圖7c 辨識結果:left 左轉。

辨識過程中,請保持字正腔圓口齒清晰,並注意不要處在太嘈雜的環境裡操作,不然語音辨識的效果會打點折扣。圖8 就是把right 辨識為light ,這樣機器人就沒反應啦!

圖8 錯誤的辨識結果。

本範例介紹了如何對著手機說出特定的字詞, 藉由Google 語音辨識服務來控制機器人。期待您從本期專欄的內容來激盪出更多有趣的火花。今年的六篇專欄您都喜歡嗎?請繼續關注CAVE 的機器人專欄唷!

 

歡迎大家由以下連結或掃描以下的QRCode 來下載本程式。

本程式已上架Google play,請到Google Play 搜尋「CAVE 教育團隊」就找得到我們的樂高機器人系列app 了。請在App Inventor 中文教學網上直接下載本範例的App Inventor 原始檔與apk 安裝檔。

註1: 想學如何開發App Inventor 程式嗎? 請到AppInventor 中文學習網與我們一同學習。
註2: 將Android 手機設定為可安裝非Google Play 下載的程式以及讓手機與樂高NXT 主機連線等說明請參考連結
註3: 與NXT 連線後如果出現[Error 402] 之錯誤訊息請不必理會,程式依然能正確執行。

文章原文刊載於《ROBOCON》國際中文版2013/11月號

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *