四旋翼無人機(jī),即四軸飛行器,在各種應(yīng)用中發(fā)揮的作用日趨重要,但這方面的設(shè)計(jì)仍然相當(dāng)復(fù)雜,需綜合機(jī)械、電子和軟件子系統(tǒng)方面的知識(shí)。雖然設(shè)計(jì)人員有能力學(xué)習(xí)掌握所需的知識(shí),但無人機(jī)開發(fā)套件可以為他們提供一個(gè)良好的開端,集合了無人機(jī)飛行理論和實(shí)踐經(jīng)驗(yàn)累積所需的所有元素。
本文介紹了STMicroelectronics開發(fā)套件,該套件可為開發(fā)人員提供易于組裝的小型四軸飛行器無人機(jī),同時(shí)也充分展示了所有多旋翼飛行器必備的復(fù)雜飛行控制系統(tǒng)。
四軸飛行器動(dòng)力學(xué)
就最常見的形式而言,四軸飛行器為航空攝影、現(xiàn)場(chǎng)檢測(cè)、監(jiān)控等眾多應(yīng)用提供了相當(dāng)穩(wěn)定的平臺(tái)。與固定翼飛機(jī),甚至可變螺距直升機(jī)不同,由于小型高效直流電機(jī)的廣泛應(yīng)用,固定螺距多旋翼無人機(jī)的設(shè)計(jì)相對(duì)簡(jiǎn)單,且易于構(gòu)建。
這些無人機(jī)的機(jī)械簡(jiǎn)單性和空氣動(dòng)力學(xué)穩(wěn)定性,主要源自各旋翼間的協(xié)調(diào)配合以控制各種動(dòng)作,而不像飛機(jī)利用飛行表面控制,或如直升機(jī)利用主旋翼和尾槳的配合。
在四軸飛行器中,位于機(jī)身對(duì)角線上的一對(duì)電機(jī)旋轉(zhuǎn)方向相同,而與另一對(duì)電機(jī)的旋轉(zhuǎn)方向相反。若四個(gè)電機(jī)的轉(zhuǎn)速相同,無人機(jī)則可上升、下降或懸停。如果某對(duì)對(duì)角電機(jī)比另一對(duì)電機(jī)轉(zhuǎn)速快,則無人機(jī)發(fā)生偏航,保持在同一水平面繞重心旋轉(zhuǎn)(圖 1,左)。
圖 1:無人機(jī)通過不同的轉(zhuǎn)速組合操控動(dòng)作,例如偏航動(dòng)作(左)時(shí)兩個(gè)對(duì)角電機(jī) (M2, M4) 同時(shí)加速;或一個(gè)對(duì)角電機(jī) (M2) 加速,同時(shí)另一對(duì)角電機(jī) (M4) 減速,從而完成更復(fù)雜的俯仰、滾轉(zhuǎn)動(dòng)作(右)。(圖片來源:STMicroelectronics)
如果前(或后)旋翼電機(jī)轉(zhuǎn)速發(fā)生變化,無人機(jī)就會(huì)像固定翼飛機(jī)上升或下降飛行一樣,機(jī)頭上升或下降。若左或右旋翼作出類似調(diào)節(jié),將導(dǎo)致無人機(jī)滾轉(zhuǎn),即繞中心線旋轉(zhuǎn)。通過調(diào)節(jié)對(duì)角電機(jī)或單個(gè)電機(jī)的相對(duì)速度,無人機(jī)可輕松實(shí)現(xiàn)更復(fù)雜的飛行姿態(tài)(俯仰、偏航和滾轉(zhuǎn)的組合)(圖 1,右)。發(fā)燒友公眾號(hào)回復(fù)資料可以免費(fèi)獲取電子資料一份記得留郵箱地址。
無人機(jī)的飛行控制系統(tǒng)負(fù)責(zé)調(diào)節(jié)適當(dāng)?shù)碾姍C(jī)轉(zhuǎn)速,實(shí)現(xiàn)所需的飛行姿態(tài),從而完成所需操作。
例如在實(shí)踐中,不僅在轉(zhuǎn)彎時(shí),即使在水平飛行期間,控制系統(tǒng)也需要不斷調(diào)節(jié)電機(jī)轉(zhuǎn)速,以校正諸如風(fēng)、熱流或湍流的擾動(dòng)力。即使在室內(nèi)操縱小型無人機(jī),飛行控制系統(tǒng)也需要測(cè)量無人機(jī)的實(shí)際姿態(tài)和所需姿態(tài)之間的差值。
對(duì)于工程師而言,利用誤差信號(hào)校正電機(jī)轉(zhuǎn)速是常見的控制回路反饋問題,可以通過比例-積分-微分 (PID) 控制器來解決。而所剩的唯一概念挑戰(zhàn)則是確定測(cè)量無人機(jī)姿態(tài)的方法,不過使用高精度智能傳感器數(shù)據(jù)來做歐拉角計(jì)算,即可輕松解決這一問題。
歐拉角可表示物體相對(duì)于某個(gè) xyz 參考坐標(biāo)系的 XYZ 坐標(biāo)系方向,這兩個(gè)坐標(biāo)平面相交于直線 N(圖 2)。而歐拉角的定義為:
- α:x 軸與 N 之間的夾角
- ?:z 軸與 Z 軸之間的夾角
- γ:N 與 X 軸之間的夾角
圖 2: 歐拉角 (α, ?, γ) 描述了旋轉(zhuǎn)坐標(biāo)系 (XYZ) 相對(duì)于固定參考坐標(biāo)系 (xyz) 的相對(duì)方向,兩個(gè)坐標(biāo)平面相交于直線 N。(圖片來源:Wikimedia Commons CC BY 3.0)
對(duì)于飛行控制系統(tǒng),物體坐標(biāo)系和參考坐標(biāo)系直接對(duì)應(yīng)為無人機(jī)的當(dāng)前方向 (XYZ) 及所需姿態(tài) (xyz)。而歐拉角則表示無人機(jī)所需的軸向旋轉(zhuǎn)以實(shí)現(xiàn)所需姿態(tài)。盡管多年來用于確定當(dāng)前方向的原始數(shù)據(jù)一直由機(jī)械陀螺儀提供,但高精度微機(jī)電系統(tǒng) (MEMS) 加速計(jì)和陀螺儀的出現(xiàn),使該方法甚至可以應(yīng)用于輕小型無人機(jī)。
如今,各種形狀和大小的無人機(jī)都依賴基于傳感器的姿態(tài)和航向參考系統(tǒng) (AHRS),該系統(tǒng)可為歐拉角計(jì)算提供位置信息。而歐拉角用于為 PID 控制器提供誤差信號(hào),PID 控制器則管理電機(jī)轉(zhuǎn)速以實(shí)現(xiàn)所需飛行操作。挑戰(zhàn)在于在移動(dòng)平臺(tái)上使用軟件實(shí)現(xiàn)該方法,該平臺(tái)必須能夠完成計(jì)算并以所需的速度和精度來調(diào)整電機(jī)。
STMicroelectronics 的 STEVAL-DRONE01 小型無人機(jī)套件及相關(guān)軟件提供了該方法的工作示例,可作為探索無人機(jī)飛行控制系統(tǒng)細(xì)節(jié)的基礎(chǔ)。
小型無人機(jī)套件整裝待“飛”
STEVAL-DRONE01 套件囊括了構(gòu)建小型四軸飛行器所需的所有組件。除了塑料機(jī)身外,該套件還包括四個(gè) 8.5 x 20 mm、3.7 V、8520 無鐵芯直流電機(jī),每個(gè)電機(jī)的推力約為 35 g,并且配備 65 mm 螺旋槳。電機(jī)和螺旋槳配成兩對(duì),可順時(shí)針和逆時(shí)針旋轉(zhuǎn)。與 3.7 V 鋰離子聚合物 (LiPo) 電池組裝后,無人機(jī)總重量(或空中總重量,AUW)小于 70 g,無人機(jī)操作時(shí)的最佳推力重量比約為 2:1。
然而,除了機(jī)械部件外,該套件的核心組件是 STMicroelectronics 的STEVAL-FCU001V1飛行控制器單元 (FCU) 電路板及相關(guān)軟件包,這些部件共同實(shí)現(xiàn)了上述飛行控制系統(tǒng)功能。FCU 電路板是高能效的復(fù)雜多傳感器系統(tǒng),具有低功耗藍(lán)牙 (BLE) 連接功能(圖 3)。
圖 3: STMicroelectronics 的 STEVAL-FCU001V1 飛行控制器單元是完整的電池供電多傳感器系統(tǒng),具有 BLE 連接和直流電機(jī)驅(qū)動(dòng)功能。(圖片來源:STMicroelectronics)
該電路板配備基于 32 位Arm?Cortex?-M4 的 STMicroelectronicsSTM32F401微控制器,具有三個(gè)不同的 MEMS 傳感器,分別用于測(cè)量無人機(jī)定位和導(dǎo)航的不同特征,包括:
- STMicroelectronics 的LSM6DSLiNEMO 慣性測(cè)量裝置 (IMU),集成了 AHRS 功能所需的加速計(jì)和陀螺儀
- STMicroelectronics 的LIS2MDL磁力儀,為實(shí)現(xiàn)方向檢測(cè)功能提供數(shù)據(jù)
- STMicroelectronics 的LPS22HD壓力傳感器,用于提供垂直定位數(shù)據(jù),分辨率為 8 cm
在傳感器輸入端,F(xiàn)CU 的 STM32F401 微控制器通過共享 SPI 總線與各傳感器連接。在電機(jī)輸出端,微控制器的 TIM4 通用定時(shí)器提供脈沖寬度調(diào)制 (PWM) 信號(hào),用于控制 STMicroelectronics 的STL6N3LLH6MOSFET 功率晶體管的柵極,以驅(qū)動(dòng)無人機(jī)的直流電機(jī)。
FCU 提供兩個(gè)選項(xiàng)用于接收用戶控制命令:用戶可以在智能手機(jī)上,通過藍(lán)牙連接板載 STMicroelectronics 的SPBTLE-RF模塊來控制無人機(jī),該模塊包括該公司推出的BlueNRG-MS收發(fā)器,提供最佳功耗的藍(lán)牙堆棧?;蛘撸脩艨梢允褂没跇?biāo)準(zhǔn)無線電控制 (RC) PWM 的遙控器。最后,對(duì)于電池和電源管理,該電路板包括 STMicroelectronics 的STC4054鋰離子電池充電器 IC 和LD39015低壓差 (LDO) 穩(wěn)壓器。
如圖 3 所示,F(xiàn)CU 還支持與外部電子速度控制器 (ESC) 的連接,例如 STMicroelectronics 的STEVAL-ESC001V1。ESC 允許系統(tǒng)驅(qū)動(dòng)更穩(wěn)定的三相電機(jī),使得 FCU 可以應(yīng)用于承載能力較大的四軸飛行器設(shè)計(jì)。
為簡(jiǎn)化飛行準(zhǔn)備和控制,該套件預(yù)先配置為通過 STMicroelectronics 的STDroneAndroid 移動(dòng)應(yīng)用程序來使用藍(lán)牙連接選項(xiàng)。該應(yīng)用程序設(shè)計(jì)為虛擬遙控器,可為用戶提供簡(jiǎn)單的飛行控制界面,具有控制圖標(biāo)和兩個(gè)虛擬操縱桿(圖 4)。
圖 4: STMicroelectronics 的 STDrone Android 移動(dòng)應(yīng)用程序?yàn)橛脩籼峁┨摂M遙控器,可操作由該公司的 STEVAL-DRONE01 開發(fā)套件構(gòu)建的小型無人機(jī)。(圖片來源:STMicroelectronics)
組裝后,無人機(jī)操作員可以在移動(dòng)設(shè)備上使用 STDrone 應(yīng)用程序啟動(dòng)和控制無人機(jī)。起飛前,操作員需將無人機(jī)放置在平坦表面上,觸摸應(yīng)用程序的“校準(zhǔn)”圖標(biāo)直至圖標(biāo)變?yōu)榫G色,則表示校準(zhǔn)已完成。為了安全起見,無人機(jī)電機(jī)最初會(huì)通過軟件禁用,要求用戶在應(yīng)用程序中點(diǎn)擊另一個(gè)圖標(biāo)來“裝載”無人機(jī)。此時(shí),應(yīng)用程序用戶界面的功能則類似于遙控器,允許用戶移動(dòng)虛擬操縱桿,以調(diào)整無人機(jī)的電機(jī)轉(zhuǎn)速和飛行姿態(tài)。
盡管超輕型 STMicroelectronics 無人機(jī)的質(zhì)量和功率不足以進(jìn)行廣泛的戶外應(yīng)用,但是操作員如需在戶外操作小型無人機(jī),則需要了解無人機(jī)在預(yù)定操作區(qū)域的飛行限制。操作小型無人機(jī)可能不需要操作許可證,或?yàn)檫@類小型無人機(jī)注冊(cè)。不過,操作員仍需要遵守相關(guān)要求。
具體飛行要求包括:保持視距,最大高度不得超過 400 ft;避開禁飛區(qū),例如美國(guó)規(guī)定為機(jī)場(chǎng) 5 ml 范圍內(nèi),英國(guó)規(guī)定為 1 km 范圍內(nèi);避免在體育賽事或緊急行動(dòng)場(chǎng)地附近進(jìn)行操作等。無人機(jī)操作員可以使用移動(dòng)應(yīng)用程序,例如美國(guó)聯(lián)邦航空管理局的B4UFLY應(yīng)用程序,或英國(guó)國(guó)家空中交通管理局 (NATS) 的Drone Assist(無人機(jī)助手)應(yīng)用程序,這些應(yīng)用程序都可根據(jù)用戶的 GPS 定位提供當(dāng)?shù)乜沼蛳拗频南嚓P(guān)信息。
飛行控制軟件
對(duì)于工程師而言,STMicroelectronics 無人機(jī)套件的 FCU 具有一大亮眼功能,即相關(guān)軟件包,STMicroelectronics 將其保存在開源的github 存儲(chǔ)庫中。該應(yīng)用程序基于 STMicroelectronics 的 STM32Cube 框架,建立在藍(lán)牙堆棧中間件和底層驅(qū)動(dòng)層之上。驅(qū)動(dòng)層使用 STM32Cube 硬件抽象層 (HAL) 和 STEVAL-FCU001V1 板級(jí)支持包 (BSP) 處理硬件交互的細(xì)節(jié)。驅(qū)動(dòng)層包括所有上述 FCU 電路板設(shè)備的驅(qū)動(dòng)程序。
該應(yīng)用程序的軟件架構(gòu)圍繞三個(gè)獨(dú)立模塊構(gòu)建,這些模塊分別用于遙控、位置確定和 PID 控制(圖 5):
- 遙控模塊處理來自 STDrone 移動(dòng)應(yīng)用程序或 RC 遙控器的輸入,從應(yīng)用程序采集數(shù)據(jù)值或轉(zhuǎn)換遙控器 PWM 數(shù)據(jù),然后將數(shù)據(jù)值轉(zhuǎn)換為所需飛行姿態(tài)的歐拉角。
- 位置確定模塊從 LSM6DSL IMU 采集加速計(jì)和陀螺儀數(shù)據(jù),用于歐拉角計(jì)算所需的 AHRS 位置測(cè)定值,從而確定無人機(jī)的當(dāng)前飛行姿態(tài)。雖然來自 LIS2MDL 磁力儀和 LPS22HD 壓力傳感器的數(shù)據(jù)也會(huì)得到采集,但截止本文撰寫時(shí),這些數(shù)據(jù)不適用于現(xiàn)有軟件版本中的無人機(jī)飛行控制計(jì)算。
- PID 控制模塊使用所需姿態(tài)歐拉角與當(dāng)前姿態(tài)歐拉角之間的差值來完成位置誤差計(jì)算。該模塊采用傳統(tǒng) PID 控制方法,使用誤差信號(hào)調(diào)節(jié)各電機(jī)轉(zhuǎn)速,使無人機(jī)實(shí)現(xiàn)所需姿態(tài)。
圖 5: STMicroelectronics 小型無人機(jī)飛行控制軟件功能圍繞獨(dú)立的模塊構(gòu)建,分別用于處理遙控輸入(藍(lán)色框,標(biāo)記(1))、位置確定(紅色框,(2))和 PID 控制(深藍(lán)色框,(3))。隨后 PID 控制驅(qū)動(dòng)四軸飛行器的四個(gè)電機(jī)。(圖片來源:STMicroelectronics)
使用這種功能架構(gòu),無人機(jī)應(yīng)用程序?qū)⑦@些模塊整合到所需工作流中,從而將用戶操作命令轉(zhuǎn)換為執(zhí)行這些操作所需的電機(jī)轉(zhuǎn)速調(diào)整(圖 6)。盡管整體功能比較復(fù)雜,但更新飛行控制參數(shù)的主循環(huán)相對(duì)簡(jiǎn)單。
圖 6: STMicroelectronics 小型無人機(jī)飛行控制軟件實(shí)現(xiàn)一個(gè)連續(xù)讀取傳感器數(shù)據(jù)的工作流,更新無人機(jī)的當(dāng)前飛行姿態(tài),調(diào)整無人機(jī)四個(gè)電機(jī)的轉(zhuǎn)速,從而達(dá)到飛行所需的推力,實(shí)現(xiàn)俯仰、滾轉(zhuǎn)和偏航的動(dòng)作組合。(圖片來源:STMicroelectronics)
調(diào)用初始化硬件和軟件系統(tǒng)等一系列例程后,應(yīng)用程序主例程 main.c 進(jìn)入無限循環(huán)(清單 1)。在主循環(huán)中,更新過程調(diào)用一系列例程來執(zhí)行上述飛行控制核心算法。
復(fù)制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); ...} ...}
在此循環(huán)中,微控制器的 TIM9 通用定時(shí)器用作事件標(biāo)志以控制更新速率。發(fā)生更新計(jì)時(shí)器的事件時(shí),主循環(huán)調(diào)用 AHRS 更新例程 ahrs_fusion_ag(),該例程使用來自加速計(jì) (acc_ahrs) 和陀螺儀 (gyro_ahrs) 的最新數(shù)據(jù),執(zhí)行更新涉及的傳感器融合計(jì)算。然后,QuaternionToEuler() 例程使用該結(jié)果數(shù)據(jù)(四元數(shù)形式)來計(jì)算無人機(jī)當(dāng)前飛行姿態(tài)的歐拉角。
此時(shí),如果已啟用藍(lán)牙 (#ifdef REMOCON_BLE),應(yīng)用程序主循環(huán)將使用藍(lán)牙采集所需飛行姿態(tài)的相關(guān)數(shù)據(jù);如果已啟用外部 RC 遙控器,則應(yīng)用程序?qū)⑹褂眠b控器采集相關(guān)數(shù)據(jù)。而代碼更新對(duì)應(yīng)傳統(tǒng) RC 遙控器數(shù)據(jù)的四個(gè)變量:gRUD(方向舵位置,即偏航)、gAIL(副翼位置,即滾轉(zhuǎn))、gELE(升降舵位置,即俯仰)和 gTHR(節(jié)流閥位置)。采集了這些數(shù)據(jù)后,主循環(huán)使用例程 GetTargetEulerAngle() 來計(jì)算所需飛行姿態(tài)的歐拉角,以執(zhí)行無人機(jī)操作員的命令。不過在執(zhí)行計(jì)算之前,主循環(huán)這部分的功能對(duì)無人機(jī)操作員而言至關(guān)重要。若出于任何原因?qū)е滤{(lán)牙連接失敗,代碼將停止電機(jī)。顯然,這將致使無人機(jī)即刻不受控制地下降。然而有個(gè)簡(jiǎn)單卻意義重大的軟件擴(kuò)展,可能會(huì)使用 LIS2MDL 磁力儀和 LPS22HD 壓力傳感器數(shù)據(jù),在停止電機(jī)前,使無人機(jī)飛回起始點(diǎn),并控制下降速度以平穩(wěn)降落。
最后,主循環(huán)調(diào)用例程 FlightControlPID_OuterLoop(),更新 PID 控制器的目標(biāo)值。此外,F(xiàn)lightControlPID_innerLoop() 則屬于回調(diào)操作的一部分,旨在中斷 TIM9 定時(shí)器事件。TIM9 定時(shí)器事件頻率設(shè)定為 800 Hz。每次中斷時(shí),回調(diào)例程讀取傳感器,篩選原始數(shù)據(jù),更新與變量 acc_ahrs 和 gyro_ahrs 相關(guān)的先進(jìn)先出 (FIFO) 緩沖器。這兩個(gè)變量在上述主循環(huán)中均已提及?;卣{(diào)例程使用無人機(jī)當(dāng)前飛行姿態(tài)的更新數(shù)據(jù),調(diào)用 FlightControlPID_innerLoop(),重新計(jì)算各電機(jī)的 PWM 值。最后,回調(diào)例程調(diào)用 set_motor_pwm(),為微控制器的 PWM 輸出賦值,并結(jié)束更新過程。
開發(fā)人員可以使用各種工具鏈修改開源軟件包,輕松探索其他飛行控制方案。這些工具鏈包括適用于 ARM 的 IAR Embedded Workbench、適用于 STM32 的 KEIL RealView 微控制器開發(fā)套件,以及 STMicroelectronics 推出基于 Windows 的免費(fèi)版System Workbench for STM32集成開發(fā)環(huán)境 (IDE)。在對(duì)修改過的代碼進(jìn)行編譯后,開發(fā)人員可以使用 STMicroelectronics 的ST-LINK/V2在線調(diào)試器和編程器,或連接 STMicroelectronics 的STM32 Nucleo開發(fā)板與套件隨附的 JTAG 串行線調(diào)試 (SWD) 適配器板,將固件加載到 FCU 中。
總結(jié)
在航空攝影、現(xiàn)場(chǎng)檢測(cè)、監(jiān)控等眾多應(yīng)用中,多旋翼無人機(jī)因機(jī)械設(shè)計(jì)頗為簡(jiǎn)單而深受青睞。這些無人機(jī)使用智能傳感器為控制算法提供數(shù)據(jù),采用復(fù)雜的飛行控制軟件,支持穩(wěn)定操作,并能快速響應(yīng)無人機(jī)操作員的操作命令。
雖然開發(fā)人員可以自行尋找并組裝所需的機(jī)械、電氣和軟件組件,但 STMicroelectronics 推出的全面小型無人機(jī)開發(fā)套件,使其能夠更輕松地引入小型無人機(jī)的設(shè)計(jì)和操作。通過探索甚至修改相關(guān)的開源飛行控制軟件,開發(fā)人員可以快速獲取多旋翼無人機(jī)飛行動(dòng)力學(xué)和控制算法方面的經(jīng)驗(yàn)。
-
PID
+關(guān)注
關(guān)注
35文章
1472瀏覽量
85475 -
無人機(jī)
+關(guān)注
關(guān)注
229文章
10420瀏覽量
180117 -
四軸飛行器
+關(guān)注
關(guān)注
55文章
206瀏覽量
51136
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論