EV3 Tutorial(5)Move Steering 與 Move Tank 馬達控制


操作機器人的過程中,做台小車讓它能隨想法前進、後退、左轉、右轉是最基本的,前進、後退很簡單,只要讓兩個輪子同樣轉速正轉或逆轉就可以了,單純使用 Large Motor 分別控制兩個馬達就可以達到,不過,對於同時控制兩個馬達,可以使用 Move Steering 或 Move Tank
會比較方便。

使用 Move Steering

在〈EV3 Tutorial(4)Block 自訂與管理〉中使用過 Move Steering,這個 Block 可以則直接控制兩個馬達,Steering 設為 0 時,兩個馬達會以同樣方向與轉速運作,你可以使用其他選項來控制同時正轉或逆轉。

那麼轉彎呢?既然名為 Move Steering,表示使用它來控制車輛轉彎的話,方式是掌舵是類似的,EV3 主機會依 Steering 的數值設定,幫你分配兩個馬達的得到的 Power 設定值,以 Power 及 Rotations 為正值的情況來說,設定為 0 時,兩個馬達會以同樣的 Power 設定值轉動,此時 Steering 的箭頭圖示也會是直線:

使用 Move Steering

Steering 設定為 2550 之間時,上圖中,C 馬達得到的 Power 會小於 B 馬達,同樣時間內,C 馬達轉動的圈數就會小於 B 馬達,這時就會產生右轉的效果,設定為 50 時,C 馬達得到的 Power 設定值是 0,也就是會停止不動,只有 B 馬達會轉動,如果你設計的車子兩輪間距,差不多是 EV3 主機的寬度,這時「差不多」是以右輪為圓心轉一個直角(Steering 圖示也會呈現直角狀態,不過摩擦力的關係,實際上轉動會小於 90 度):

使用 Move Steering

當 Moving Steering 設定超過 50,C 馬達得到的 Power 設定值為負值,也就是會逆轉,設定越接近 100,C 馬達得到的 Power 設定值負值越大,這時就會如 Steering 圖示,以一個更小的圓轉動超過 90 度:

使用 Move Steering

簡單來說,設定為 100 時,C 馬達的轉動方向開始與 B 馬達相反,而轉圈數相同,如果你設計的車子兩輪間距,差不多是 EV3 主機的寬度,這時「差不多」會達到以兩輪間中點為圓心、原地旋轉差不多 180 度的效果(摩擦力的關係,實際上轉動會小於 180 度):

使用 Move Steering

依此規則,以 Power 及 Rotations 為正值的情況來說,0 ~ 100 的設定範圍下,就是 B 全力正轉,而 C 從全力正轉到全力逆轉的過程,反之,0 ~ -100 的設定範圍下,就是 C 全力正轉,而 B 從全力正轉到全力逆轉的過程。

在 Rotations 設定為 1 的情況下,如果設定為 Steering 設定為 25,C 馬達差不多只轉半圈,設定為 50 時不轉,設定為 75 時逆轉半圈,設定為 100 時逆轉一圈。

瞭解 Move Steering 的運作,主要是在需要精確控制轉動時使用,這會比盲目測試各種數值來希望有符合角度、轉動半徑的結果來得實際一些,畢竟你設計的車子兩輪間距,不一定會「差不多」是 EV3 主機的寬度。

想精確控制就需要一點數學了,來出個小題目,想讓車子能像下圖轉動個四分之一圓,你要怎麼設計呢(基本上是兩輪圓周長分別與內圓與外圓軌跡長度的關係)?

使用 Move Steering

你可能會有各種轉動需求,試著解解這題,對其他轉動需求要如何計算就會有幫助。

使用 Move Tank

Move Steering 藉由調整 Steering 的值,讓 EV3 去分配兩個馬達得到的 Power 設定值,有時你希望獨立地控制兩個馬達的 Power 設定值,這時可以使用 Move Tank:

使用 Move Tank

我是沒開過坦克,不過猜想坦克也可以獨立地控制兩邊輪子的轉動吧!因此這個元件才取名為 Move Tank。

如果 Rotations 或 Degree 都是正值,馬達的 Power 設定值為正,就會以 Rotations 或 Degree 設定的值正轉,Power 設定值為負就是逆轉了,如果 B、C 馬達的 Power 設定值各為 10025,而 Degree 設定為 360,那 B 馬達會轉約 360 度,而 C 馬達會轉約 90 度,也就是分配到的比率正是 100 : 25,使用 Rotations 設定時,也是類似的推算。

上面的題目,當然也可以使用 Move Tank 來達到目的,你可以試著算算看,不過來看看另一個題目,想讓車子以兩輪間距中點為圓心來原地右轉 n 度,該怎麼計算?

使用 Move Tank

在 B 與 C 的 Power 功率值一正一負而絕對值相同下,例如 50、-50,算出來的公式是得讓 Move Tank 接受 n * R / r 的值(基本上是其中一輪的圓周長與 n 度下畫出來的圓周長關係)。

當然,最好的方式,就是將這類轉動自訂 Block,這樣你要轉幾度,就只要設定 n 值就可以了:

使用 Move Tank

在圖型化程式設計的環境中,彈性不見得是最重要的考量,盡量讓程式畫面簡潔會是重點,要多使用適當的註解,輔助程式流程的意圖。

使用 Move Tank

灰色註解文字,可以在 EV3 開發環境右上點選「Comment」圖示來新增,藍色註解方塊,則可以在藍色的 Advanced Block 區新增。