本系列文章教你如何使用 App Inventor 來直接控制樂高EV3機器人,也是為了與 MIT App Inventor 的機器人教案來暖身。本期專題是常見的按鈕控制,點選畫面上的各個按鈕就可以控制機器人前進後退與左右轉彎,還能搭配滑桿( slider) 來即時控制馬達轉速。使用我們所開發的元件的話,樂高EV3機器人端不用編寫程式就可以回應來自手機的指令。有接觸過App Inventor的師長朋友們,歡迎下載原始碼加入更多有趣的功能。
EV3元件是由CAVEDU Jerry Lin 領軍開發,於2016年納入 MIT App Inventor 正式元件
基礎雙輪機器人
請將機器人組成如下圖的雙輪機器人,或任何類似的配置皆可。本範例的機器人不需使用任何感測器,只要用兩個馬達製作出雙輪機器人即可。本範例中是將馬達接在EV3主機的輸入端B與C。請確認EV3主機的藍牙已啟動,接著將EV3主機與Android手機進行藍牙配對,完成之後就可以把機器人放到一邊了。啟動藍牙之後,你可以從EV3主機的螢幕左上角看到藍牙的符號。
Designer頁面
這是相當直觀的頁面,有一個 Connect 下拉式選單來選擇要連線的藍牙裝置(EV3),還有一個 Disconnect 按鈕來斷開藍牙連線。
有五個按鍵來控制機器人的前後左右四個動作,以及 Stop 按鍵讓機器人停下來。另一方面您可以左右拖拉滑桿來控制馬達轉速 (0~100)。您可以根據這樣架構來加入更多按鈕喔!
Blocks頁面
接下來依序介紹程式的各個功能:
STEP1 登入畫面:
首次進入程式的畫面如圖1a, 這時只有「Connect」下拉式選單可以按,其他所有按鈕都無法操作。點選選單後進入藍牙裝置清單(圖1b),請找到剛剛配對完成的EV3 主機名稱(本範例為EV3),點選之後就會由Android裝置對EV3主機發起藍牙連線。順利連線成功的話,「Connect」選單會變成不可按的狀態,其他按鈕則都可按。
STEP2 程式初始化:
首先宣告一個 power 變數來代表馬達轉速,初始值為100,在程式中我們會藉由滑桿來控制這個變數,進而決定馬達轉速。
在點選連線清單之前(ListPickerConnect的BeforePicking事件),需先將清單內容指定為Android裝置上的藍牙配對清單。點選之後(ListPickerConnect的AfterPicking事件),會先測試連線是否成功,成功則將「Connect」下拉式選單設為不可點選,其他所有按鈕皆為可點選(圖2)。
STEP3 前進與後退按鈕:
畫面上的各個按鈕,都是使用我們自定義的 Ev3Motors 元件的 RotateSyncInDuration (同步轉動指定時間)指令,差異只在於 turnRatio(轉向比例) 與 馬達轉速 (power變數值)。以前進按鈕(ButtonF)來說,我們所指定的參數依序為 power、2000(ms),0 (代表兩輪速差為0) 以及 true (指令結束時煞車)
如果是後退(ButtonB)的話,只要把 power 變數值乘上-1 就可以讓馬達反向轉動,這樣機器人就得以後退(圖4)。
STEP4 左轉、右轉與停止按鈕:
左轉(ButtonL)與右轉(ButtonR)按鈕也是相同的概念,只是在此我們將 turnRatio 設為 -200 (左轉) 與 200 (右轉) 來決定機器人的轉彎效果, turnRatio 的絕對值愈大代表轉彎的效果愈明顯。最後按下停止(ButtonS)按鈕(圖5)。
STEP5 滑桿控制馬達轉速:
拉動滑桿時,就會根據滑桿指針位置( thumbPosition) 來決定 power 變數值 (0~100)。如圖6。
STEP6 斷線:
按下「Disconnect」按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使畫面上的各個元件恢復到程式一開始時的狀態(圖7)。
操作
實際執行的時候,請先確認EV3已經開機且藍牙也啟動了。接著在你的Android裝置上點選畫面中的「Connect」選單,會進到如圖1b的藍牙清單畫面,點選你所要的EV3主機名稱並連線成功後,即可按鈕控制機器人。在App Inventor官方推出EV3的元件之前,你也可以用這樣的方法來直接控制樂高EV3機器人喔!
延伸閱讀:Lego EV3 Direct Command
這是為什麼 EV3 端可以不用寫程式也能理解外部送來的指令的原因。
我們的EV3元件就是幫您把這些事情都做好了,盡情使用吧!
Direct Command是樂高公司所提供的一種通訊格式。在機器人端不需要任何程式的情況下,只要建立通訊(USB、藍牙與 Wi-Fi)後對EV3主機發送位元陣列,就能達到諸多控制效果。因此不限於智慧型手機,只要是能夠與樂高機器人進行無線通訊(藍牙或Wi-Fi)的裝置,都能以此架構來通訊。不過請注意:NXT的無線通訊方式只有藍牙。
有了Direct command,只要與EV3藍牙配對,不需要任何程式就可以經由手機遙控機器人端,這樣的好處在於你不需要維護兩份程式碼。另外,手機端與機器人端的程式應該都是不同的程式語言,這樣也會增加開發上的難度。你可以使用將本程式的架構修改成姿態控制(orientation sensor)、觸碰點控制、語音控制等,讓你的機器人更豐富。根據樂高官方文件, 你可以使用Direct Command做到的重要功能有:
• 啟動/停止主機上指定檔名的程式。
• 控制馬達啟動、停止、轉向、電力與角度上限。
• 取得感測器值與狀態
首先,我測了「LEGO EV3 Tutorial: Tilt-to-Drive(https://docs.google.com/document/d/1KZF1785Kan2ZKHY90114lIXzhn-5SOX3g21h03fHRnA/edit)」,使用手機和EV3配完对後執行此app,發現它在按下藍牙选項清單時清單未出現。(不管是使用原作者附的apk,或者自己把aia打包,情況都相同)
接著,我回頭把上述的app重新做一次,情況也是一樣
請問还有什麼地方要設定嗎?
李老師,年後來CAVEDU實機測試一下吧,這份google doc 是 MIT 的人幫我們寫的簡易測試報告
我剛用tilt的app再測是ok的
但控制會Lag