伊莉討論區

標題: 用App Inventor 直接控制樂高EV3 機器人: 翻轉控制 [打印本頁]

作者: k6305791130    時間: 2015-4-12 10:03 AM     標題: 用App Inventor 直接控制樂高EV3 機器人: 翻轉控制

什麼是Direct Command?為什麼需要它?

根據樂高官方文件, 您可以使用Direct Command做到的重要功能有:

• 啟動/停止主機上指定檔名的程式。
• 控制馬達啟動、停止、轉向、電力與角度上限。
• 取得感測器值與狀態

其餘功能,請參考官方文件(註1)。

開始玩機器人

本範例的機器人與2013 年1 月號的「翻轉控制」專欄是一樣的,只是由NXT 換成EV3 機器人而已。機器人不須加裝任何感測器,只要用兩顆馬達組裝成雙輪機器人即可。本範例是將馬達接在EV3 主機的輸入端A 與B。請確認EV3 主機的藍牙已啟動,接著將EV3 主機與Android 手機進行藍牙配對(註3),完成之後就可以把機器人放到一邊了。啟動藍牙之後,您可以從EV3主機的螢幕左上角看到藍牙的符號。

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

STEP1 登入畫面:

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

[attach]108163997[/attach]圖1a 程式首次執行的畫面。
圖1b 點選連線按鈕後進入藍牙裝置清單。
圖1c 連線成功後的畫面。


STEP2 程式初始化:

在點選連線清單之前(ListPicker_EV3 清單選取器的BeforePicking 事件),需先將清單內容指定為Android裝置上的藍牙配對清單(圖2a),其中connected 這個布林變數是用來指示現在手機是否已和機器人成功連線。

[attach]108163988[/attach]圖2a 指定藍牙配對裝置清單。


點選之後, 會先測試連線是否成功,成功則將「EV3 裝置/ 連線」按鈕設為不可點選,「斷線」等按鈕設為可點選(圖2b)。

[attach]108163989[/attach]圖2b 連線成功後啟動相關元件。


STEP3 直接控制副程式start與stop:

直接控制的奧妙之處在於直接對EV3 發送位元陣列, 只要按照樂高官方文件(註1)的說明,以正確的格式來發送資料即可。以 start 副程式來說, 它可接受兩個參數:port/ speed。您可以看到每次呼叫它時, 都會初始化一個名為 data 的空清單,以本範例來說,每一個清單元素代表一個位元組長度的內容。格式為:(13, 0, 0, 0, 128, 0, 0, 165,
0, port , 129, speed , 166 ,0, port),如圖3a。這當然需要您去查找官方文件中各個欄位所代表的意義。在此我們是將port 與 speed 用變數來控制, 代表所要控制的馬達與其轉速。最後透過BluetoothClient 元件將整個data 清單經由藍牙發送給EV3 機器人即可。

[attach]108163990[/attach]圖3a start 副程式。


到了stop 副程式,資料格式當然也有所改變。我們還用一個if 判斷式去檢查stop 參數是否為true , 如果是則在data 清單最後加入1 ,反之則加入0。這樣發送出去之後就能控制機器人是否要停止動作(圖3b)。

[attach]108163991[/attach]圖3b stop 副程式。


藉由這樣的架構,當您要改用姿態控制、觸碰點控制、語音控制時,整體架構是不變的,差別只在於如何修改speed 變數值而已。

STEP4 姿態感測器:

當手機的姿態發生變化時,就會自動呼叫它的姿態改變(OrientationChanged) 事件, 並會把XYZ 的軸向變化以pitch、roll 與azimuth 這三個事件變數呈現, 供我們取用。由圖4a 可知, 我們要透過X 軸向傾斜來控制機器人前進,Y 軸向傾斜來控制左右轉彎等。在本範例中我們使用另外一個Angle 參數(回傳一個角度代表手機往哪個方向傾斜)求出兩顆馬達的轉速。

[attach]108163992[/attach]圖4a Android 手機軸向示意圖。


在此有兩個重要的變數angle 與power:angle 代表手機的傾斜角度,這是由姿態感測器的Angle 參數再減去45 所決定,45 代表座標軸的偏移量。接著是power 變數,這是一個介於0 ∼ 1 之間的小數,代表手機的傾斜程度,數字愈大代表愈斜。power 變數值是由姿態感測器的Magnitude 變數再乘上200 所決定,200 是一個調控用的參數,數字愈大,代表在同樣的傾斜度下,機器人會跑得愈快,但是也更敏感而不好操控。樂高EV3 機器人的馬達電力範圍為100(正向全速旋轉)到-100(反向全速旋轉),數值超過上下限則就限制在100 或-100 ,如圖4b。

[attach]108163993[/attach]圖4b 姿態感測器的姿態改變事件(上半)。


這四個重要的參數(pitch、roll、左馬達轉速與右馬達轉速)都會更新在畫面中間的四個Label 標籤元件上。先呼叫一次 stop 副程式,讓馬達先短暫停頓。接著呼叫兩次start 副程式,分別傳入「port =1;speed = cos(angle x power)」與「port =2;speed= sin( angle x power)」這組參數,代表根據姿態感測器的姿態變化量,進行三角函數運算結果,來決定左右馬達的轉速。

最後,把夾角與左右輪轉速捨去小數點之後(round 指令),將計算結果更新在Screen 的狀態列上,如圖4c。

[attach]108163994[/attach]圖4c 姿態感測器的姿態改變事件(下半)。


STEP5 斷線:

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

操作

實際執行的時候,請先確認EV3 已經開機且藍牙也啟動了。接著在您的Android 裝置上點選畫面中的「EV3裝置/ 連線」按鈕, 會進到如圖1b的藍牙清單畫面,點選您所要的EV3主機名稱並連線成功後,試著把手機左右搖晃看看。朝前方傾斜,機器人就會前進,傾斜愈多,機器人跑得愈快(圖5a)。左右傾斜的話則是控制機器人左轉或右轉(圖5b)。在App Inventor 官方推出EV3 的元件之前,您也可以用這樣的方法來直接控制樂高EV3 機器人喔!

[attach]108163995[/attach]圖5a 手機朝前方傾斜43 度,X 軸向姿態發生變化(pitch),機器人朝前方移動,左右馬達電力(38, 39)。


[attach]108163996[/attach]圖5b 手機朝左方傾斜44 度,Y 軸向姿態發生變化(roll),機器人原地左轉,左右馬達電力(-37, 41)。


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

註1:樂高EV3 直接控制指令的相關文件請參閱此網頁:http://botbench.com/blog/2014/02 ... sdk-docs-available/

註2: 想學如何開發App Inventor 程式嗎? 請到App Inventor 中文學習網(http://www.appinventor.tw)與
我們一同學習。

註3: 與EV3 連線後如果出現「Error 402」之錯誤訊息請不必理會,程式依然能正確執行。







歡迎光臨 伊莉討論區 (https://www07.eyny.com/) Powered by Discuz!