使用全功能套件來組裝、啟動、探索和開發迷你無人機
資料提供者:DigiKey 北美編輯群
2019-06-04
四旋翼無人機 (即四軸飛行器) 在許多應用中扮演的角色越來越重要,但其設計仍然很複雜,需結合有關機械、電子和軟體子系統的知識。雖然設計人員有能力學會該怎麼設計,但無人機開發套件結合所有必要元素,提供無人機飛行理論與實務的相關經驗,讓人搶得先機。
本文將介紹 STMicroelectronics 開發套件,此套件為開發人員提供一款易於組裝的迷你四軸飛行器無人機,並充分展現任何多旋翼飛行器背後錯綜複雜的飛行控制系統。
四軸飛行器動力學
以最常見的形式而言,四軸飛行器提供一個相當穩定的平台,可用於空拍、現場勘查和監視等多種應用。與固定翼飛機,甚至是具有可變俯仰旋翼的直升機不同,固定俯仰多旋翼無人機能使用多種小型的高效 DC 馬達,因此設計起來相對簡單且容易建造。
這些無人機的機械設計很簡潔,在空氣動力方面也很穩定,而這均源於其能協調使用旋翼來操控飛行動作,而不是像飛機一樣使用飛行翼面,或是像直升機一樣使用主旋翼和尾翼。
在四軸飛行器中,機身對角線上的一組馬達,會兩兩以相同方向轉動,另一組則會以相反方向轉動。若四個馬達都以同樣的速度旋轉,無人機便能上升、下降或是盤旋。若某組的旋轉速度比另一組快,無人機就會偏航,環繞其重心旋轉,同時維持在同一水平面上 (圖 1 左)。
圖 1:透過不同的旋翼速度組合來操控無人機,例如加速對角線馬達組 (M2、M4) 的兩個馬達來進行偏航操作 (左),或加速某個馬達 (M2) 並放慢其對角線上的馬達 (M4),以完成更複雜的俯仰翻滾操控 (右)。(圖片來源:STMicroelectronics)
若前 (或尾) 旋翼的速度發生變化,無人機會像固定翼飛機的上飛或下飛姿態一樣,向上或向下俯仰。若對左舷或右舷組進行類似的調整,會導致無人機環繞其中心線翻滾。若調整某對角線馬達組或某個馬達的相對速度,無人機則可輕鬆完成更為複雜的飛行姿態 (俯仰、偏航和翻滾組合) (圖 1 右)。
無人機的飛行控制系統負責為對應的旋翼修改速度,以實現所需的飛行姿態,完成所需的操控動作。
實際上,控制系統需要一直調整旋翼的速度,不只是在轉向的時候要調整,在水平飛行期間也要調整,以針對風力、熱力或亂流等擾動力進行修正。就算是在室內飛行的迷你無人機,飛行控制系統也必須能夠衡量無人機實際姿態與所需姿態之間的差異。
根據一些誤差訊號來修正旋翼速度,是工程師經常面臨的控制迴路回授問題,這個問題可利用比例積分微分 (PID) 控制器加以解決。唯一只剩下一個概念性難題,那就是設法測量無人機的飛行姿態,但如今只要使用高精確度的智慧型感測器來饋送歐拉角的計算結果,就能輕鬆解決這一問題。
歐拉角代表一個物體相對於某個 xyz 參考平面的 XYZ 平面方向,其中兩個平面會沿著線 N 相交 (圖 2)。歐拉角的定義為:
- α - x 軸與 N 之間的角度
- ß - z 軸與 Z 軸之間的角度
- γ - N 與 X 軸之間的角度
圖 2:歐拉角 (α、ß、γ) 描述旋轉座標系 (XYZ) 與固定參考座標系 (xyz) 的相對方向,兩者在線 N 相交。(圖片來源:Wikimedia Commons CC BY 3.0)
對於飛行控制系統來說,物體平面和參考平面直接對應於無人機的當前方向 (XYZ) 及其期望的飛行姿態 (xyz)。而歐拉角表示讓無人機達到所需姿態所需的軸向旋轉。多年來一直使用機械式陀螺儀提供的原始資料來確定當前方向,但高精確度微機電系統 (MEMS) 加速計和陀螺儀的出現,使得這個方法也能用於輕量型的迷你無人機。
如今,各種大小與形狀的無人機,都仰賴以感測器為基礎的姿態與航向參考系統 (AHRS),將位置資訊饋送到歐拉角的計算中。而歐拉角又可用於產生誤差訊號,供 PID 控制器管理馬達轉速,實現所期望的飛行操控。但利用軟體在行動平台上實作這個做法並不容易,此平台必須能以必要的速度及精確度來完成計算與馬達的修正。
STMicroelectronics 的 STEVAL-DRONE01 迷你無人機套件及其相關軟體,為此做法提供了可行的範例,有助於探索無人機飛行控制系統的細節資訊。
到手即飛式迷你無人機套件
STEVAL-DRONE01 套件內含打造小型四軸飛行器所需的所有元件。除了塑膠機身之外,套件中還有四個 8.5 x 20 mm 的 3.7 V 8520 無核心 DC 馬達,每個都能透過內附的 65 mm 螺旋槳提供大約 35 g 的推力。馬達與螺旋槳成對提供,共有兩對,已設定為以順時針和逆時針方向旋轉。裝上 3.7 V 鋰離子聚合物 (LiPo) 電池後即完成組裝。此時,無人機的總重 (即 AUW 升空重量) 不到 70 g,能提供大約 2:1 推力重量比 (此為無人機的首選推重比)。
不過,除了機械元件之外,此套件的核心要件為 STMicroelectronics 的 STEVAL-FCU001V1 飛行控制器單元 (FCU) 板及其相關軟體套件,兩者共同提供先前提到的飛行控制系統功能。此 FCU 板是一款精密、高能效的多感測器系統,且支援低功耗藍牙 (BLE) 連線能力 (圖 3)。
圖 3:STMicroelectronics 的 STEVAL-FCU001V1 飛行控制器單元是一款完全以電池供電的多感測器系統,具有 BLE 連線能力和 DC 馬達驅動功能。(圖片來源:STMicroelectronics)
該板採用搭載 32 位元 Arm® Cortex®-M4 的 STMicroelectronics STM32F401 微控制器打造而成,內含以下三種不同的 MEMS 感測器,用來測量與無人機定位及導航有關的不同特性:
- STMicroelectronics 的 LSM6DSL iNEMO 慣性量測單元 (IMU),整合了 AHRS 功能所需的加速計與陀螺儀
- STMicroelectronics 的 LIS2MDL 磁力計,提供了實作方向偵測功能所需的資料
- STMicroelectronics 的 LPS22HD 壓力感測器,提供了確定垂直位置所需的資料,解析度為 8 cm
在感測器的輸入端,FCU 的 STM32F401 微控制器會透過共用的 SPI 匯流排與每個感測器連接。在馬達的輸出端,微控制器的 TIM4 一般用途計時器則提供脈寬調變 (PWM) 訊號,以控制 STMicroelectronics 的 STL6N3LLH6 MOSFET 功率電晶體的閘極 (此電晶體會驅動無人機的 DC 馬達)。
FCU 提供兩種方式來接收使用者控制命令,使用者可以使用板載的 STMicroelectronics SPBTLE-RF 模組,從智慧型手機上透過藍牙連線來控制無人機;模組內含該公司的 BlueNRG-MS 收發器,具有功率經過最佳化的完整藍牙堆疊。或者,使用者可以採用標準無線電控制 (RC) PWM 型搖控控制台。最後,對於電池及電源管理,該板提供 STMicroelectronics 的 STC4054 鋰離子電池充電器 IC 和 LD39015 低壓降 (LDO) 穩壓器。
如圖 3 所示,FCU 還可連接外部電子速度控制器 (ESC),例如 STMicroelectronics 的 STEVAL-ESC001V1。ESC 可讓系統驅動更為可靠的三相馬達,進而將 FCU 用於功能更為強大的四軸飛行器設計中。
為了簡化飛行的準備與控制,該套件已預設為透過 STMicroelectronics 的 STDrone Android 行動應用程式來使用藍牙連線選項。這款應用程式設計成虛擬遙控控制台,為使用者提供簡單的飛行控制介面,其具有控制圖示和兩個虛擬搖桿 (圖 4)。
圖 4:STMicroelectronics 的 STDrone Android 行動應用程式為使用者提供虛擬的遙控控制台,可操作以該公司 STEVAL-DRONE01 開發套件打造的迷你無人機。(圖片來源:STMicroelectronics)
組裝後,無人機的操作者可在行動裝置上,使用 STDrone 應用程式來啟動和控制無人機。在起飛之前,操作者需要將無人機放在平坦的表面上,並輕觸應用程式的校正圖示,直到圖示變成綠色,則表示完成校正。為了安全起見,無人機的馬達一開始會透過軟體停用,使用者必須輕觸另一個應用程式圖示,無人機才會準備就緒。此時,應用程式使用者介面的功能類似於遙控控制台,使用者可移動虛擬搖桿,來調整無人機的旋翼速度與飛行姿態。
雖然超輕型 STMicroelectronics 無人機在質量及動力上不足以支援廣泛的戶外應用,但如果無人機的操作者有可能會在戶外操作迷你無人機,則需要清楚無人機在該操作區域的飛行限制。迷你無人機的操作者可能無需取得證照,或註冊此類超小型無人機,但還是需要遵守相關飛行要求。
這些飛行要求包括維持視線、最大高度不得超過 400 英呎、避免飛入禁飛區 (例如美國為機場的 5 英哩內距離,英國為 1 公里內距離),以及避免在運動賽事或緊急活動附近操作等等。無人機的操作者可以使用多種行動應用程式,如美國聯邦航空總署的 B4UFLY 應用程式,或英國國家飛航服務公司 (NATS) 的 Drone Assist 應用程式。這些應用程式都會根據使用者的 GPS 位置,提供有關當地空域限制的資訊。
飛行控制軟體
STMicroelectronics 無人機套件的 FCU 提供相關的軟體套件,這對工程師來說很有吸引力。STMicroelectronics 在開源的 github 儲存庫中維護此套件。該應用程式採用 STMicroelectronics 的 STM32Cube 架構打造而成,分佈在藍牙堆疊中介軟體以及底層的驅動程式層上。驅動程式層使用 STM32Cube 硬體抽象層 (HAL) 和 STEVAL-FCU001V1 板支援套件 (BSP),來處理硬體互動的細節,包括先前所述之 FCU 板元件的驅動程式。
該應用程式的軟體架構圍繞三個不同的模組構建,分別用於遙控、位置測定以及 PID 控制 (圖 5):
- 遙控模組處理來自 STDrone 行動應用程式或 RC 遙控控制台的輸入訊號,其從該應用程式收集資料值或轉換遙控控制台 PWM 資料,然後將這些值轉譯為歐拉角,實現所期望的飛行姿態。
- 位置測定模組從 LSM6DSL IMU 收集加速計與陀螺儀的資料,以估算 AHRS 位置,計算出無人機當前飛行姿態所需的歐拉角。雖然還會從 LIS2MDL 磁力計以及 LPS22HD 壓力感測器收集資料,但直到目前撰文為止,現有的軟體版本尚未將這些資料用於無人機飛行控制的計算中。
- PID 控制模組使用所需姿態與當前姿態的歐拉角差值,來完成位置誤差計算。此模組透過傳統的 PID 控制方法,使用該誤差訊號來調整每個馬達的速度,實現所需的飛行姿態。
圖 5:STMicroelectronics 迷你無人機飛行控制軟體圍繞獨立的模組打造其功能,包括處理遙控輸入 (藍色方塊 (1))、位置測定 (紅色方塊 (2)),以及 PID 控制 (深藍色方塊 (3))。隨後,PID 控制會驅動四軸飛行器的四個馬達。(圖片來源:STMicroelectronics)
在此功能架構下,無人機應用程式將這些模組整合於所需工作流程中,從而將使用者的操控指令轉譯成馬達速度調整作業,最終執行這些操控動作 (圖 6)。雖然整體的功能性很複雜,但更新飛行控制參數所用的主迴圈相當簡單。
圖 6:STMicroelectronics 迷你無人機飛行控制軟體實作有工作流程來持續讀取感測器資料,以更新無人機當前的飛行姿態,並調整無人機四個馬達的速度,實現所需的飛行姿態,包括推進、俯仰、翻滾與偏航。(圖片來源:STMicroelectronics)
在進行一系列的軟硬體系統初始化調用後,主應用程式常式 main.c 進入無限迴圈 (清單 1)。在這個主迴圈中,更新過程使用一系列的調用,來執行先前描述的核心飛行控制演算法。
複製while (1)
{
...if (tim9_event_flag == 1)
{ // Timer9 event: frequency 800Hz
tim9_event_flag = 0;
...// AHRS update, quaternion & true gyro data are stored in ahrs
ahrs_fusion_ag(&acc_ahrs, &gyro_ahrs, &ahrs);
// Calculate euler angle drone
QuaternionToEuler(&ahrs.q, &euler_ahrs);
#ifdef REMOCON_BLE
gRUD = (joydata[2]-128)*(-13);
gTHR = joydata[3]*13;
gAIL = (joydata[4]-128)*(-13);
gELE = (joydata[5]-128)*13;
/* joydata[6]: seek bar data*/
/* joydata[7]: additional button data
first bit: Takeoff (0 = Land, 1 = Takeoff)
second bit: Calibration When it changes status is active
third bit: Arming (0 = Disarmed, 1 = Armed) */
gJoystick_status = joydata[7];
if ((gJoystick_status&0x04)==0x04){
rc_enable_motor = 1;
fly_ready = 1;
BSP_LED_On(LED2);
}
else {
rc_enable_motor = 0;
fly_ready = 0;
}
if (connected){
rc_connection_flag = 1; /* BLE Remocon connected flag for enabling motor output */
SendMotionData();
SendBattEnvData();
SendArmingData();
}
else{
rc_connection_flag = 0;
gTHR=0;
rc_enable_motor = 0;
fly_ready = 0;
BSP_LED_Off(LED1);
BSP_LED_Off(LED2);
}
if (joydata[7]&0x02){
rc_cal_flag = 1;
BSP_LED_On(LED1);
}
#endif
#ifdef REMOCON_PWM
...#endif
// Get target euler angle from remote control
GetTargetEulerAngle(&euler_rc, &euler_ahrs);
...FlightControlPID_OuterLoop(&euler_rc_fil, &euler_ahrs, &ahrs, &pid);
...}
...}
在此迴圈中,微控制器的一般用途 TIM9 計時器將用作事件標示,來控制更新率。當發生更新計時器事件時,主迴圈調用 AHRS 更新常式 ahrs_fusion_ag(),使用來自加速計 (acc_ahrs) 和陀螺儀 (gyro_ahrs) 的最新資料,來執行更新所涉及的感測器融合計算。隨後,QuaternionToEuler() 常式使用產生的資料 (為四元數形式) 來計算無人機當前飛行姿態的歐拉角。
在主迴圈的這個階段,應用程式會使用藍牙資料 (若已啟用藍牙) (#ifdef REMOCON_BLE) 或外部 RC 遙控控制台 (若已啟用),收集所需飛行姿態的資料。程式碼會更新四個變數,這些變數分別映射傳統的 RC 遙控台資料,包括 gRUD (方向舵位置,即偏航)、gAIL (副翼位置,即翻滾)、gELE (升降舵位置,即俯仰) 和 gTHR (節流閥位置)。收集該資料後,迴圈使用 GetTargetEulerAngle() 常式,依照無人機操作員的命令,計算出所需飛行姿態的歐拉角。但在進行計算前,此迴圈部分展示了一個對無人機操作者非常重要的功能。若因任何原因而無法連上藍牙,程式碼會關閉馬達 (這意味著無人機勢必會立刻失控下墜)。一個平凡但卻重要的軟體延伸模組,可能會利用 LIS2MDL 磁力計和 LPS22HD 壓力感測器資料,以在關閉馬達之前,讓無人機以受控的方式降落至其起飛點。
最後,主迴圈調用 FlightControlPID_OuterLoop(),為 PID 控制器更新目標值。而在回調與 TIM9 計時器事件相關的中斷時,FlightControlPID_innerLoop() 會作為一連串運算的一部分來獨立執行,該計時器事件的頻率被編程為 800 Hz。每次中斷時,回調常式都會讀取感測器、過濾原始資料,並更新與前文所述之主迴圈變數 acc_ahrs 和 gyro_ahrs 有關的先進先出 (FIFO) 緩衝器。利用這個無人機當前飛行姿態的更新資料,回調常式調用 FlightControlPID_innerLoop() 為每個馬達計算新的 PWM 值。回調函數透過調用 set_motor_pwm(),將微控制器的 PWM 輸出設為新的值,完成更新過程。
開發人員可使用一系列工具修改該開源軟體套件,來輕鬆探索其他飛行控制情境,這些工具包括 IAR Embedded Workbench for ARM、適用於 STM32 的 KEIL RealView 微控制器開發套件,以及 STMicroelectronics 自有的免費 Windows 型 System Workbench for STM32 整合式開發環境 (IDE)。在編譯修改過的程式碼後,開發人員可以使用 STMicroelectronicsST-LINK/V2 線上除錯器與編程器,或使用連接到 JTAG 序列線除錯 (SWD) 轉接板的 STMicroelectronics STM32 Nucleo 開發板 (附於套件內),將韌體載入到 FCU 中。
結論
多旋翼無人機採用簡易的機械設計,因此已廣泛用於空拍、現場勘查、監視及許多其他應用。這些無人機透過智慧型感測器所饋送的控制演算法,採用先進的飛行控制軟體,能支援穩定的操作,並快速回應無人機操作者的操控命令。
雖然開發人員可以自行尋找並組裝所需的機械、電氣和軟體元件,但 STMicroelectronics 提供的全方位迷你無人機開發套件,能更輕鬆地完成迷你無人機的設計與操作。開發人員可以探索,甚至修改相關的開源飛行控制軟體,快速獲得有關多旋翼無人機飛行動力學和控制演算法的經驗。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。