2017-06-19

聲控mBot 機器人 - 使用App Inventor 2 (mBot with Voice Control by App Inventor 2)

看到有人在『mBot 機器人 mBlock 教學問答』臉書社團提問如何聲控mBot機器人,

想到我曾經發過一篇文章介紹如何利用App Inventor 2 撰寫應用程式,在手機平板透過藍牙遙控mBot。(請參考探奇文章:App Inventor 2 控制 mBot

再加上前一陣子Makeblock公司推出新版的mBot App Inventor 函式庫(Ver 1.9),邱老師當然想挑戰看看,利用 App Inventor 2 寫一個 App,以聲音控制mBot。


其實整個聲控計畫的想法很單純,利用現成的Google 語音辨識,將辨識出來的口語命令對應到相對的mBot機器人指令。


首先設計使用介面,將需要的按鍵,文字框拖放到主畫面。


mBot的函式庫需要自行從Extension輸入URL網址匯入,語音辨識 SpeechRecognizer 則是從Media類別拖拉出來(如下圖)


這兩個函式庫都是隱藏不可見的,所以會列在主畫面的下方。


全部程式很簡單,設置按鍵按下後的動作。


以下面這張圖說明程式操作流程:
1. 按下按鍵,藍牙連接mBot。(Call MBot1.ConnectToRobot)
2. 藍牙連接成功後(When MBot1.Connected),mBot亮綠燈(Call MBot1.SetRGBLEDColor),另外還加上一個蜂鳴器發聲指令(Call MBot1.PlayNote),提醒玩家藍牙已經連接,不過發聲指令似乎沒有作用。



 3. 按下按鍵,啟動語音辨識程序。Call SpeechRecognizer1.GetText
4. 根據語音辨識結果,將這個字串( SpeechRecognizer1.Result)與口語命令單字比較,若是相同,就執行相對應的mBot機器人命令。

改版之後的mBot 函式庫1.9,新增了一些指令,藍牙連接也比較簡單,在這裡直接連接藍牙,不用從清單選擇連線對象。

(或許太過簡單,偶爾藍牙連線會失敗,導致App閃退(確實原因暫時不明))

藍牙連線寫得很完整,如果藍牙沒有開啟,會自動開啟藍牙。還會像Makeblock App,主動要求你將手機平板靠近mBot機器人。
  
 
連線中,

連線成功時,畫面會像下圖顯示mBot的藍牙地址 Mac Address

為了維持藍牙正常連接,我還特地增加停止藍牙連線的按鍵,斷線後會告知『No device Connected』

 
連線之後的操作很簡單,按下『語音辨識』按鍵,出現Google語音視窗,對這手機說出命令單字,目前有『前進、後退、停止、紅燈、藍燈、綠燈』6個命令,也就是6個If指令。


說出指令,辨識完成,會將剛才的口語辨識結果寫在螢幕畫面。

橫向螢幕也ok,需要Android 4.0以上才能執行(?)


示範影片如下:


這個程式非常陽春,還可以擴充許多東西。

語音辨識的結果需要完整句子,比較不容易出錯,Google會自動根據前後文調整字句,這樣辨識度會更高。再利用字串處理,挑出關鍵字,控制能力會更好。

不過語音辨識反應速度較慢,所以我特別製作一個Stop按鍵,萬一出現語音辨識錯誤或失敗,還可以手動緊急停止mBot。

我已經將Apk及aia檔案放在『mBot 機器人 mBlock 教學問答』臉書社團的檔案庫,

歡迎大家下載安裝。下一步或許就去繳交Google Play Developer註冊費,將App上架。

你有什麼好主意呢?歡迎討論!