MIT App Inventor 視覺辨識範例 – 路牌辨識機器人(Lego EV3)

作者/攝影  曾吉弘
時間   2小時
成本
  •   Android手機 (>8000)
  •   樂高EV3機器人 (約12000)
難度

★★★★☆

材料表
  • Android手機
  • 樂高EV3機器人

延續先前的水果分類器教學,今天來和機器人結合吧。一樣使用 MIT App Inventor 的 Personal Image Classifier 網站來訓練以下三種路牌。請實際印出來並放在之後機器人要執行的環境中來行走,這樣效果會比較好。最後把訓練好的 .model 檔上傳到您的 App Inventor 專案中。離線視覺辨識app 就完成囉!

訓練神經網路

請參考本文  https://blog.cavedu.com/2019/08/27/app-inventor-image-classifier

 

樂高機器人

組裝範例,基本上就是雙輪器人搭配一個可以放手機的地方就可以囉。其實按照這樣的架構,除了樂高機器人以外,其他任何支援藍牙或 W-Fi的機器人平台 (Arduino / 7697 / microbit) 都可以依樣畫葫蘆。但有了EV3元件 (CAVEDU寫的喔) 就不需要寫 EV3 端的程式,可以節省很多時間了!

App Inventor結合其他物聯網開發板的文章請參考:http://www.appinventor.tw/iot

 

App Inventor端

請先與EV3配對完成,這樣才能在app 的 listpicker 中找到它。

Designer頁面設定

請由MIT App Inventor 網站下載 personalImageClassifier擴充檔,或由此下載 .aia原始檔。再匯入您的 App Inventor 專案即可。請注意,PIC元件無法像 Sound元件一樣,無法透過程式指令在執行過程中修改所使用的 model (Sound元件可以隨時修改其 Source 來源檔案)

本專案元件說明如下,您之後可以根據個人需要來修改介面配置:

  • personalImageClassifier 元件(本文後簡稱PIC元件),別忘了匯入喔
  • 一個 Listpicker 來選取已配對的藍牙裝置 (EV3)
  • 一個 中斷藍牙連線的按鈕
  • 一個 WebViewer 用來即時預覽相機的畫面
  • 切換前後鏡頭的按鈕 (ButtonSwitch)
  • 顯示結果用的標籤 (Label_Result)
  • BluetoothClient 元件:進行藍牙通訊
  • EV3Motor:控制馬達,請設定馬達為 BC (需搭配BluetoothClient 元件)
  • EV3Sound:使EV3主機發出聲音 (需搭配BluetoothClient 元件)

Blocks

STEP1   PIC元件相關設定

當PIC元件準備完成之後,把在PIC網站上訓練好的模型的 ModelLabel 顯示在Label 上。可以先檢查有沒有匯入錯的辨識模型檔。

STEP2 

如果PIC元件發生錯誤的話,把 errorCode 顯示出來

STEP3  EV3的藍牙連線設定

按下 ListPicker,選擇已配對好的EV3,連線成功的話就會讓 Clock 的 timer 啟動來辨識物體。斷線的則一如往常簡單,呼叫 BluetoothClient 的 Disconnect 指令就好。

EP4  連續辨識影像

水果辨識器的做法是按下按鈕才辨識一次,但在此希望機器人能連續辨識來做出對應的粽剁,所以改用 Clock。在此設定 clock 的 Timerinterval 為100,請根據實際狀況來調整這個參數,太快太慢都要拿捏一下。

STEP4  取得辨識結果與信心指數並控制機器人

在PIC元件的 GotClassification事件中,所回傳的 result 是 (類別名稱, 信心指數) 的清單,例如 (apple, 0.763)。信心指數原為 0~1之間的小數,在此 x 100 轉換為百分比。

在此先檢查信心指數 (value) 是否大於60,並進一步根據辨識結果來執行對應的動作。EV3motor 的 RotateSyncIndefinetly 可設定 power (馬達轉速) 與 turnRatio (轉彎百分比)turnRatio  設為 0 代表前進不轉彎,> 0 則代表右轉,一路到 100 就會變成原地右轉,但轉彎的效果會根據您機器人的架構而定。 < 0 則代表左轉。 如果您發現 turnRatio > 0 機器人卻左轉的話,請把左右馬達的電線對調即可。

注意,在此使用了 local variable 區域變數 (class, value),如果您覺得不太習慣的話,改用全域變數也可以。

執行畫面

開啟程式會直接開啟相機鏡頭並顯示於app中的 WebViewer元件,隨後會看到 ModelLabel (模型可分辨的影像類別)。點選 Listpicker 來選取您的EV3 (利如下圖中的 00:16:53:49:28:47),連線成功之後機器人就會開始移動。沒看到路牌就會前進,如果看到路牌就會執行對應的左轉、右轉與停止等動作,一起來玩玩看吧!

 

相關連結:

 

2 thoughts on “MIT App Inventor 視覺辨識範例 – 路牌辨識機器人(Lego EV3)

  1. says:

    老師您好:
    我在測試時,遇到了一個問題。
    請問為什麼當藍芽連線成功後,會啟動”clock啟用計時為真”,但手機video辨識畫面卻當機了…無法進行辨識。請問這是遭遇到了甚麼問題呢?

發佈留言

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