四旋翼無人機,即四軸飛行器,在各種應用中發揮的作用日趨重要,但這方面的設計仍然相當復雜,需綜合機械、電子和軟件子系統方面的知識。雖然設計人員有能力學習掌握所需的知識,但無人機開發套件可以為他們提供一個良好的開端,集合了無人機飛行理論和實踐經驗累積所需的所有元素。
本文介紹了STMicroelectronics開發套件,該套件可為開發人員提供易于組裝的小型四軸飛行器無人機,同時也充分展示了所有多旋翼飛行器必備的復雜飛行控制系統。
四軸飛行器動力學
就最常見的形式而言,四軸飛行器為航空攝影、現場檢測、監控等眾多應用提供了相當穩定的平臺。與固定翼飛機,甚至可變螺距直升機不同,由于小型高效直流電機的廣泛應用,固定螺距多旋翼無人機的設計相對簡單,且易于構建。
這些無人機的機械簡單性和空氣動力學穩定性,主要源自各旋翼間的協調配合以控制各種動作,而不像飛機利用飛行表面控制,或如直升機利用主旋翼和尾槳的配合。
在四軸飛行器中,位于機身對角線上的一對電機旋轉方向相同,而與另一對電機的旋轉方向相反。若四個電機的轉速相同,無人機則可上升、下降或懸停。如果某對對角電機比另一對電機轉速快,則無人機發生偏航,保持在同一水平面繞重心旋轉(圖 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 控制器提供誤差信號,PID 控制器則管理電機轉速以實現所需飛行操作。挑戰在于在移動平臺上使用軟件實現該方法,該平臺必須能夠完成計算并以所需的速度和精度來調整電機。
STMicroelectronics 的 STEVAL-DRONE01 小型無人機套件及相關軟件提供了該方法的工作示例,可作為探索無人機飛行控制系統細節的基礎。
小型無人機套件整裝待“飛”
STEVAL-DRONE01 套件囊括了構建小型四軸飛行器所需的所有組件。除了塑料機身外,該套件還包括四個 8.5 x 20 mm、3.7 V、8520 無鐵芯直流電機,每個電機的推力約為 35 g,并且配備 65 mm 螺旋槳。電機和螺旋槳配成兩對,可順時針和逆時針旋轉。與 3.7 V 鋰離子聚合物 (LiPo) 電池組裝后,無人機總重量(或空中總重量,AUW)小于 70 g,無人機操作時的最佳推力重量比約為 2:1。
然而,除了機械部件外,該套件的核心組件是 STMicroelectronics 的STEVAL-FCU001V1飛行控制器單元 (FCU) 電路板及相關軟件包,這些部件共同實現了上述飛行控制系統功能。FCU 電路板是高能效的復雜多傳感器系統,具有低功耗藍牙 (BLE) 連接功能(圖 3)。
圖 3: STMicroelectronics 的 STEVAL-FCU001V1 飛行控制器單元是完整的電池供電多傳感器系統,具有 BLE 連接和直流電機驅動功能。(圖片來源:STMicroelectronics)
該電路板配備基于 32 位Arm?Cortex?-M4 的 STMicroelectronicsSTM32F401微控制器,具有三個不同的 MEMS 傳感器,分別用于測量無人機定位和導航的不同特征,包括:
- STMicroelectronics 的LSM6DSLiNEMO 慣性測量裝置 (IMU),集成了 AHRS 功能所需的加速計和陀螺儀
- STMicroelectronics 的LIS2MDL磁力儀,為實現方向檢測功能提供數據
- STMicroelectronics 的LPS22HD壓力傳感器,用于提供垂直定位數據,分辨率為 8 cm
在傳感器輸入端,FCU 的 STM32F401 微控制器通過共享 SPI 總線與各傳感器連接。在電機輸出端,微控制器的 TIM4 通用定時器提供脈沖寬度調制 (PWM) 信號,用于控制 STMicroelectronics 的STL6N3LLH6MOSFET 功率晶體管的柵極,以驅動無人機的直流電機。
FCU 提供兩個選項用于接收用戶控制命令:用戶可以在智能手機上,通過藍牙連接板載 STMicroelectronics 的SPBTLE-RF模塊來控制無人機,該模塊包括該公司推出的BlueNRG-MS收發器,提供最佳功耗的藍牙堆棧。或者,用戶可以使用基于標準無線電控制 (RC) PWM 的遙控器。最后,對于電池和電源管理,該電路板包括 STMicroelectronics 的STC4054鋰離子電池充電器 IC 和LD39015低壓差 (LDO) 穩壓器。
如圖 3 所示,FCU 還支持與外部電子速度控制器 (ESC) 的連接,例如 STMicroelectronics 的STEVAL-ESC001V1。ESC 允許系統驅動更穩定的三相電機,使得 FCU 可以應用于承載能力較大的四軸飛行器設計。
為簡化飛行準備和控制,該套件預先配置為通過 STMicroelectronics 的STDroneAndroid 移動應用程序來使用藍牙連接選項。該應用程序設計為虛擬遙控器,可為用戶提供簡單的飛行控制界面,具有控制圖標和兩個虛擬操縱桿(圖 4)。
圖 4: STMicroelectronics 的 STDrone Android 移動應用程序為用戶提供虛擬遙控器,可操作由該公司的 STEVAL-DRONE01 開發套件構建的小型無人機。(圖片來源:STMicroelectronics)
組裝后,無人機操作員可以在移動設備上使用 STDrone 應用程序啟動和控制無人機。起飛前,操作員需將無人機放置在平坦表面上,觸摸應用程序的“校準”圖標直至圖標變為綠色,則表示校準已完成。為了安全起見,無人機電機最初會通過軟件禁用,要求用戶在應用程序中點擊另一個圖標來“裝載”無人機。此時,應用程序用戶界面的功能則類似于遙控器,允許用戶移動虛擬操縱桿,以調整無人機的電機轉速和飛行姿態。
盡管超輕型 STMicroelectronics 無人機的質量和功率不足以進行廣泛的戶外應用,但是操作員如需在戶外操作小型無人機,則需要了解無人機在預定操作區域的飛行限制。操作小型無人機可能不需要操作許可證,或為這類小型無人機注冊。不過,操作員仍需要遵守相關要求。
具體飛行要求包括:保持視距,最大高度不得超過 400 ft;避開禁飛區,例如美國規定為機場 5 ml 范圍內,英國規定為 1 km 范圍內;避免在體育賽事或緊急行動場地附近進行操作等。無人機操作員可以使用移動應用程序,例如美國聯邦航空管理局的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 控制器的目標值。此外,FlightControlPID_innerLoop() 則屬于回調操作的一部分,旨在中斷 TIM9 定時器事件。TIM9 定時器事件頻率設定為 800 Hz。每次中斷時,回調例程讀取傳感器,篩選原始數據,更新與變量 acc_ahrs 和 gyro_ahrs 相關的先進先出 (FIFO) 緩沖器。這兩個變量在上述主循環中均已提及。回調例程使用無人機當前飛行姿態的更新數據,調用 FlightControlPID_innerLoop(),重新計算各電機的 PWM 值。最后,回調例程調用 set_motor_pwm(),為微控制器的 PWM 輸出賦值,并結束更新過程。
開發人員可以使用各種工具鏈修改開源軟件包,輕松探索其他飛行控制方案。這些工具鏈包括適用于 ARM 的 IAR Embedded Workbench、適用于 STM32 的 KEIL RealView 微控制器開發套件,以及 STMicroelectronics 推出基于 Windows 的免費版System Workbench for STM32集成開發環境 (IDE)。在對修改過的代碼進行編譯后,開發人員可以使用 STMicroelectronics 的ST-LINK/V2在線調試器和編程器,或連接 STMicroelectronics 的STM32 Nucleo開發板與套件隨附的 JTAG 串行線調試 (SWD) 適配器板,將固件加載到 FCU 中。
總結
在航空攝影、現場檢測、監控等眾多應用中,多旋翼無人機因機械設計頗為簡單而深受青睞。這些無人機使用智能傳感器為控制算法提供數據,采用復雜的飛行控制軟件,支持穩定操作,并能快速響應無人機操作員的操作命令。
雖然開發人員可以自行尋找并組裝所需的機械、電氣和軟件組件,但 STMicroelectronics 推出的全面小型無人機開發套件,使其能夠更輕松地引入小型無人機的設計和操作。通過探索甚至修改相關的開源飛行控制軟件,開發人員可以快速獲取多旋翼無人機飛行動力學和控制算法方面的經驗。
-
PID
+關注
關注
35文章
1472瀏覽量
85513 -
無人機
+關注
關注
230文章
10437瀏覽量
180399 -
四軸飛行器
+關注
關注
55文章
206瀏覽量
51148
發布評論請先 登錄
相關推薦
評論