VMX智慧移動平台教學 – 單元(四) 馬達控制與上帝視角運動模式

一、前言

VMX智慧移動平台教學一到三單元中我們介紹了硬體配置、開發環境設定(Java、C++),這一單元我們將進入程式設計的部分。本單元主題為馬達控制與上帝視角運動模式,我們將會介紹最基本的馬達控制方法,並且了解麥克納姆輪基本運動原理,結合陀螺儀感測器,取得當前車身旋轉角度,並且透過計算,將X、Y向量依照角度做矩陣旋轉,達到上帝視角運動模式。

以下分成幾個小節說明:

二、基礎馬達控制方式

我們使用的馬達驅動板為StudicaTitan Quad馬達控制板,可直接透過API 建立馬達物件,下圖為Titan Quad 類別,透過類別帶入參數即可建立Titan Quad 物件。

使用namespace(命名空間,命名空間用來將程式碼組織成邏輯群組)為studica 底下的Titan Quad類別建立四顆馬達(左前、左後、右前、右後)物件,如下圖所示,建立物件時代入TitanQuad ID(預設為42)以及馬達編號(0~3)。

MOTOR_LF、MOTOR_LB、MOTOR_RF、MOTOR_RB分別為0~3。

馬達可透過Titan Quad物件的Set 方法控制轉速及方向,輸入範圍為-1~1,0為停止,如下圖所示。

三、麥克納姆輪運動原理

麥克納姆輪的設計原理是在車輪的外環中安裝了與軸心成45度角排列的輥子與地面接觸,轉動時摩擦力會產生與輪軸呈45度的反推力,這個斜向推力可以被分為縱向和橫向兩個向量。整個車體由兩對擁有輥子鏡像排列的麥克納姆輪所驅動,每個車輪各自會產生相應的向量,這些向量的「合力」決定了車體最終的活動狀態。通過調節各個車輪獨自的轉向和轉速,可以實現整個車體前行、橫移、斜行、旋轉及其組合等運動方式,如下圖 a~f 所示。

麥克納姆輪有多種安裝方式,我們採用O-長方形(O-rectangle)安裝方法,如下圖所示。

依照麥克納姆輪運動原理圖,就可以編寫出麥克納姆輪運動控制程式,如下圖所示:

四、上帝視角運動模式原理

有了基礎馬達控制與麥克納姆輪運動原理後,我們將接著介紹上帝視角運動原理,上帝視角又稱作第三人稱視角,操控者以旁觀者視角觀察場景與車體’平台動作,以往當操控者操縱桿向前推動時,車體不一定相對於場地向前移動,而是相對於平台車頭向前移動,這會使操控者需要在心中想像車頭向前所看到的畫面,依照想像的畫面或方位進行正確的控制,這樣的操控方式在車頭方位難以判別時(距離過遠或被障礙物遮擋)將會更難推測目前方位,對於初學者來說操控起來會更加困難。

上帝視角運動模式可以使車體相對於場地向前移動,操控者只需要專注車體相對於場地的方位,不再需要觀察車體目前車頭方位,達到更好的控制效果。

首先我們要先了解如何使用搖桿控制車體移動,以下將說明如何將搖桿讀到的數值分配到四顆輪子上。

使用下圖方法讀取搖桿數值(讀取範圍為-1~1,中心點為0):

  • xSpeed:左邊搖桿X向量(中心點0,向左為負,向右為正)
  • ySpeed:左邊搖桿Y向量(中心點0,向上為負,向下為正)
  • zSpeed:右邊搖桿X向量(中心點0,向左為負,向右為正)

分配到四顆輪上的方式如下:

上圖示範了一般的控制方式,接著我們將使用上帝視角運動模式操控車體,首先要取得陀螺儀目前的角度。

陀螺儀內建在Studica VMXPi控制器裡面,使用navX MXP 9軸IMU(3 軸加速度計、陀螺儀和磁力計),我們可以透過Kauai Labs提供的AHRS Library讀取各種IMU數值。

建立AHRS物件:

讀取目前旋轉角度:

接著我們需要將搖桿輸入的X、Y向量做矩陣旋轉,抵銷搖桿與車體實際的角度差。

矩陣旋轉公式(使用逆時針旋轉):

要定義一個矩陣旋轉方法,必須帶入目前二維平面座標,以及目前旋轉的角度,計算之後透過參照運算子將結果寫回x、y 座標,如下圖所示。

最後同樣將x、y向量依照麥克納姆輪運動原理代回到四顆輪上,並且輸出到馬達上即可實現上帝視角運模式,如下圖所示。

實際運作結果如下方影片,當我們將左邊搖桿往前推時車子將往前行走,將右邊搖桿往右推時車體將回往右旋轉,再次往前推時車體將會繼續以場地為方向往前。

五、小結

本篇文章中介紹了基礎馬達控制方式,了解如何呼叫馬達控制相關的方法,以及麥克納姆輪的基礎運動方式,並且讀取搖桿數值,將數值分配到四顆輪上;認識上帝視角的原理,讀取陀螺儀感測器數值,將平面直角座標做矩陣旋轉並將新座標重新分配給每個麥克納姆輪,實現上帝視角的運動模式。下一篇文章我們將介紹如何使用Shuffleboard 與VMX溝通,並且將基礎的控制模式以及這次的上帝視角運動模式同時寫入VMX中,讓使用者能夠快速透過Shuffleboard 選擇所要的運動模式。喜歡我們文章的夥伴們,請大家多多支持與分享我們的文章喔!