古 訓(xùn),彭曉珊
(貴陽(yáng)學(xué)院 電子與通信工程學(xué)院,貴州 貴陽(yáng) 550005)
旋翼式無(wú)人機(jī)按照旋翼數(shù)量可以劃分為單旋翼無(wú)人直升機(jī)以及多旋翼無(wú)人直升機(jī)。其中,單旋翼無(wú)人直升機(jī)通常由主旋翼、尾旋翼和機(jī)身組成,相較于多旋翼無(wú)人直升機(jī),具有更大的飛行機(jī)動(dòng)性、更強(qiáng)的負(fù)載能力與更長(zhǎng)的續(xù)航能力,但較為復(fù)雜的機(jī)械結(jié)構(gòu)增加了直升機(jī)的維護(hù)難度。多旋翼無(wú)人直升機(jī)通常由偶數(shù)螺旋槳和機(jī)身組成,相較于單旋翼無(wú)人直升機(jī),控制方式簡(jiǎn)單,易于維護(hù),可靠性強(qiáng)[1-2]。
20 世紀(jì)90 年代,隨著微機(jī)電設(shè)備的研究成熟與控制系統(tǒng)的發(fā)展,旋翼式無(wú)人機(jī)逐漸在民用和軍用上得到應(yīng)用[3]。同時(shí),由于其具有多變量、強(qiáng)耦合、高度非線性以及靜不穩(wěn)定的動(dòng)力學(xué)特性,使得針對(duì)旋翼式無(wú)人機(jī)的控制方法得到了廣泛的研究。如基于平衡點(diǎn)線性化模型的PID 控制方法[4]、LQR 控制[5]、H 無(wú)窮控制[6]等,以及基于非線性動(dòng)力學(xué)模型的滑??刂疲?]、自適應(yīng)控制[8]、反步控制[9]等。相比于線性控制方法,非線性控制方法綜合考慮無(wú)人機(jī)系統(tǒng)的建模不確定性、動(dòng)力學(xué)模型非線性因素以及外界未知擾動(dòng),因此具有較好的控制效果。但是,值得一提的是,上述文獻(xiàn)中,僅給出了系統(tǒng)的仿真效果或?qū)嶋H飛行效果。受制于傳感器噪聲、控制頻率、系統(tǒng)狀態(tài)可觀可測(cè)等因素,從控制算法的提出到部署到無(wú)人機(jī)實(shí)際飛行仍然較難快速實(shí)施。
針對(duì)這一問(wèn)題,文獻(xiàn)[10]中結(jié)合Matlab 與Flightgear 提出一種可視化半實(shí)物仿真平臺(tái),并通過(guò)仿真驗(yàn)證了所提出的半實(shí)物平臺(tái)的可靠性。文獻(xiàn)[11]中結(jié)合Matlab 與Gazebo 提出了一種仿真平臺(tái),并結(jié)合教學(xué)效果證明了該方案的優(yōu)越性。但是上述方案僅提出一種可行的半實(shí)物仿真方案,相較于實(shí)機(jī)飛行在算法穩(wěn)定性與控制可行性上仍有一定的差距。
因此,本文提出一種從仿真到實(shí)踐的通用研究方案。具體包括旋翼式無(wú)人機(jī)動(dòng)力學(xué)模型、基于Matlab/Simulink 的仿真驗(yàn)證、基于ArduPilot 開(kāi)源飛控的可視化仿真驗(yàn)證、基于Matlab/XPC 與ArduPilot 硬件在環(huán)仿真平臺(tái)算法驗(yàn)證以及實(shí)機(jī)飛行驗(yàn)證。相較于上述文獻(xiàn)中提到的仿真/半實(shí)物平臺(tái),本文提出的旋翼式無(wú)人機(jī)從仿真到實(shí)踐驗(yàn)證方案能夠較好地完成基于模型的非線性控制算法驗(yàn)證,并逐步部署到真機(jī)飛行中。
為方便后續(xù)敘述,首先提出兩個(gè)右手正交坐標(biāo)系。定義{I}={oI,x I,y I,zI}為慣性坐標(biāo)系,其中oI固定在大地表面,x I指向北方,y I指向東方,zI豎直向下指向地心。定義 {B}={oB,x B,y B,zB}為機(jī)體坐標(biāo)系,其中oB固定在機(jī)身重心,xB指向機(jī)身前向,yB指向機(jī)身右向,zB垂直機(jī)身指向下面。參考文獻(xiàn)[1,2],旋翼式無(wú)人機(jī)的運(yùn)動(dòng)學(xué)方程和姿態(tài)動(dòng)力學(xué)方程可以寫為:
其中,矢量p∈R3和v∈R3分別表示旋翼無(wú)人機(jī)在{I}下的位置和線速度,m表示旋翼無(wú)人機(jī)的質(zhì)量,g表示重力加速度,f表示旋翼無(wú)人機(jī)提供的總升力。矩陣σ∈R3×3表示旋翼無(wú)人機(jī)從機(jī)體坐標(biāo)系到慣性坐標(biāo)系的旋轉(zhuǎn)矩陣。矢量ω∈R3表示旋翼無(wú)人機(jī)在{B} 下的角速度,矩陣J∈R3×3表示旋翼無(wú)人機(jī)的系統(tǒng)慣性矩陣,矢量τ∈R3表示控制力矩,映射sk(ω)表示由矢量ω張成的反對(duì)稱矩陣,Δp∈R3和Δa∈R3表示由系統(tǒng)未建模動(dòng)態(tài)和外部未知擾動(dòng)組成的集總擾動(dòng)。
注 1:假設(shè)集總未知擾動(dòng)Δp和Δa有界。在實(shí)際飛行控制系統(tǒng)開(kāi)發(fā)過(guò)程中,難以避免引入未知擾動(dòng)。一般情況下,存在于自然界的未知擾動(dòng)總是有界的,因此這種假設(shè)是合理的。
注 2:公式(1)中給出的旋翼式無(wú)人機(jī)模型為廣義模型。具體到單旋翼和多旋翼無(wú)人機(jī),由于執(zhí)行結(jié)構(gòu)與動(dòng)力分配方式不同[1,8],其分配到執(zhí)行結(jié)構(gòu)的權(quán)重結(jié)果不同。在后續(xù)的仿真到實(shí)踐開(kāi)發(fā)流程中,由于采用開(kāi)源飛控,內(nèi)含針對(duì)不同旋翼類型的動(dòng)力分配方式,可以根據(jù)不同的機(jī)型選擇適配相應(yīng)的動(dòng)力分配方式。因此,在本文中不再單獨(dú)列出此部分內(nèi)容。
Matlab 是美國(guó)MathWorks 公司1984 年開(kāi)始出品的商業(yè)軟件,可用于數(shù)值矩陣運(yùn)算、圖像/語(yǔ)音處理、無(wú)線通信仿真、深度學(xué)習(xí)訓(xùn)練、控制工程仿真應(yīng)用等。其特點(diǎn)是如下:一是高效的數(shù)值計(jì)算能力;二是可以實(shí)現(xiàn)可視化、結(jié)構(gòu)化、模塊化編程;三是友好的用途編程界面與快速錯(cuò)誤定位功能;四是豐富可靠的應(yīng)用工具箱。
圖1 基于Matlab/Simulink 的旋翼無(wú)人機(jī)仿真流圖
基于Matlab 軟件的上述優(yōu)點(diǎn),針對(duì)公式(1)中旋翼式無(wú)人機(jī)的運(yùn)動(dòng)與動(dòng)力學(xué)模型,通過(guò)Matlab/Simulink 模塊中集成的豐富的矩陣運(yùn)算庫(kù)函數(shù),可以非常方便地實(shí)現(xiàn)前期的非線性控制算法驗(yàn)證。如圖2 所示,其優(yōu)點(diǎn)在于,開(kāi)發(fā)速度快,功能模塊齊全。編程使用語(yǔ)言為基于Matlab的m腳本化語(yǔ)言。
圖2 基于Matlab/Simulink 的旋翼無(wú)人機(jī)仿真模塊圖
從圖2 中可以看出,基于Matlab/Simulink 的旋翼無(wú)人機(jī)仿真以模塊可視化形式編寫,分別對(duì)應(yīng)用參考軌跡(Reference)模塊,控制器設(shè)計(jì)模塊(Controller),系統(tǒng)模型模塊(Helicopter Model)以及波形查看模塊(Scope)。在控制器設(shè)計(jì)/驗(yàn)證時(shí),可以根據(jù)不同模塊的功能快速定位需要修改的部分,完成對(duì)應(yīng)的代碼修改。
2.1 節(jié)完成了基于Matlab/Simulink 的算法驗(yàn)證仿真,但是其控制邏輯較為簡(jiǎn)單。一款可以應(yīng)用的無(wú)人機(jī)飛行控制軟件除包含有飛行控制算法外,還應(yīng)具備底層傳感器讀取、傳感器數(shù)據(jù)融合、控制邏輯的判斷與調(diào)度、失控保護(hù)策略、飛控實(shí)時(shí)信息存儲(chǔ)等多個(gè)模塊。因此,在部署到實(shí)際飛行之前,有必要針對(duì)所設(shè)計(jì)的飛行控制算法完成“基于完整約束的飛控軟件”仿真調(diào)試。
本文中推薦兩款較為優(yōu)秀的開(kāi)源飛控軟件 :1)由開(kāi)源基金Dronecode 管理的PX4(又名AutoPilot)飛控軟件,該軟件代碼采用的是BSD 協(xié)議,最早由蘇黎世聯(lián)邦理工學(xué)院的計(jì)算機(jī)視覺(jué)與幾何實(shí)驗(yàn)室的一個(gè)軟硬件項(xiàng)目PIXHAWK 演變而來(lái)。2)長(zhǎng)期開(kāi)源項(xiàng)目ArduPilot,該軟件代碼采用的是GPLv3 協(xié)議,最早由無(wú)人機(jī)商業(yè)公司3DR Robot開(kāi)源而來(lái)。經(jīng)過(guò)多年的發(fā)展,兩款飛控軟件均有較好的發(fā)展,維護(hù)更新迭代較快,且均配備有較為完善的開(kāi)發(fā)指導(dǎo)流程。本文以ArduPilot 為例進(jìn)行說(shuō)明。
ArduPilot 支持多種旋翼式無(wú)人機(jī)飛行控制,包含有直升機(jī)、四旋翼、六旋翼、八旋翼、共軸雙槳多旋翼等[12]。其飛行模式包含有Stabilize Loiter Guided Acro Rtl Poshold 等十幾種。軟件在環(huán)仿真采用Maxproxy 輔助工具完成,只需針對(duì)上述一種飛行模式進(jìn)行修改即可。本文給出Stabilize 模式下的飛行控制流程圖,如圖3 所示。另一方面,由于ArduPilot 采用的標(biāo)準(zhǔn)的Mavlink通信協(xié)議,可以采用ROS/Mavros 或者Dronekit 輔助形式完成飛行控制器的設(shè)計(jì)與替換。其飛行控制流程如圖4 所示。編程使用語(yǔ)言為C++/Python。
圖3 Stabilize 模式下的旋翼無(wú)人機(jī)飛行控制流程圖
圖4 基于協(xié)處理器的控制流程圖
上述步驟完成了控制算法的軟件在環(huán)仿真,2.2 中的仿真環(huán)境,考慮了無(wú)人機(jī)飛行過(guò)程中的整個(gè)飛行框架,相較于2.1 中的仿真效果,更具有穩(wěn)定性。但是上述軟件在環(huán)仿真中忽略了實(shí)際飛行過(guò)程中的未建模動(dòng)態(tài)以及傳感器噪聲和延遲問(wèn)題。如果直接移植到實(shí)機(jī)飛行,有可能因?yàn)樯鲜鲈蛟斐娠w機(jī)的高頻抖動(dòng),甚至失穩(wěn)。因此,有必要完成基于Matlab/XPC 與ArduPilot 的硬件在環(huán)仿真平臺(tái)算法驗(yàn)證。
相較于2.2 中提出的仿真方案,本步驟中飛機(jī)和傳感器設(shè)備將采用真實(shí)設(shè)備,將步驟一中的Simulink 仿真代碼通過(guò)XPC 模塊生成對(duì)應(yīng)的C/C++代碼,下載到下位機(jī)中。通過(guò)串口設(shè)備完成下位機(jī)與機(jī)載控制器之間的無(wú)人機(jī)數(shù)據(jù)交互,實(shí)現(xiàn)無(wú)人機(jī)的飛行。其仿真平臺(tái)示意圖如圖5 所示,半實(shí)物仿真控制流程圖如圖6 所示。
圖5 半實(shí)物仿真平臺(tái)示意圖
圖6 半實(shí)物仿真平臺(tái)控制流程圖
飛機(jī)固定在球頭底座上,因此在半實(shí)物仿真驗(yàn)證過(guò)程中,姿態(tài)環(huán)的數(shù)據(jù)來(lái)自于機(jī)載傳感器,位置信息來(lái)自于虛擬的動(dòng)態(tài)模型解算[13]。
從圖5-6 中可以看出,PC 機(jī)主要運(yùn)行Matlab/XPC 的系統(tǒng)編程,然后通過(guò)網(wǎng)絡(luò)接口將在Matlab中編譯好的C++代碼下載到X86 結(jié)構(gòu)的下位機(jī)中。下位機(jī)通過(guò)串口與固定在球頭測(cè)試臺(tái)架上的無(wú)人機(jī)飛控進(jìn)行交互,主要完成姿態(tài)信息與控制量之間的交互。然后飛控單元在接收到控制信號(hào)后完成對(duì)無(wú)人機(jī)的飛行控制,進(jìn)而實(shí)時(shí)改變無(wú)人機(jī)的飛行狀態(tài)。圖5 中的遙控器主要完成飛行模式的轉(zhuǎn)換,以及飛控安全的保證。同時(shí)在實(shí)際飛行操作過(guò)程中,出于安全考慮以及飛行測(cè)試臺(tái)架的最大傾角限制,無(wú)人機(jī)外部需要固定安全保護(hù)網(wǎng),且無(wú)人機(jī)飛行角度不易太大。通過(guò)本步驟的測(cè)試,主要實(shí)現(xiàn)了完成無(wú)人機(jī)的硬件在環(huán)半實(shí)物控制仿真實(shí)驗(yàn)?;诖朔桨傅臒o(wú)人機(jī)(主要為單旋翼無(wú)人機(jī)和四旋翼無(wú)人機(jī))飛行控制設(shè)計(jì)可以參看本課題組相關(guān)論文,在此不再贅述。
室內(nèi)運(yùn)動(dòng)捕捉系統(tǒng)可以輸出高采樣頻率、高精度的三維空間剛體位置和姿態(tài)信息。室內(nèi)定位精度可達(dá)毫米級(jí)別,位姿輸出頻率可達(dá)150Hz 以上。相較于室外空曠環(huán)境下GPS 的米級(jí)定位精度,室內(nèi)運(yùn)動(dòng)捕捉系統(tǒng)為旋翼式無(wú)人機(jī)室內(nèi)位置和姿態(tài)控制算法驗(yàn)證提供了保障。因此,在完成前三步驟的基礎(chǔ)上,將MCU 放在無(wú)人機(jī)上即可。相較于前三個(gè)步驟,本步驟完全脫離了軟件仿真,對(duì)控制器的穩(wěn)定性要求更高。其基于運(yùn)動(dòng)捕捉系統(tǒng)全自由度室內(nèi)飛行示意圖如圖7 所示。
圖7 運(yùn)動(dòng)捕捉系統(tǒng)下全自由度無(wú)人機(jī)飛行示意圖
用于實(shí)時(shí)計(jì)算旋翼無(wú)人機(jī)姿態(tài)及位置的協(xié)同處理器可以采用樹(shù)莓派等小型微控制器完成,也可以通過(guò)對(duì)開(kāi)源算法ArduPilot 固件進(jìn)行修改,將控制算法寫入飛控中。后者則通過(guò)不同模式的切換完成控制算法的驗(yàn)證實(shí)驗(yàn)。
從圖7 可以看出,Optitrack 主要完成無(wú)人機(jī)室內(nèi)三自由度飛行位姿數(shù)據(jù)的獲取,通過(guò)局域網(wǎng)發(fā)送給PC 機(jī)。然后PC 機(jī)與無(wú)人機(jī)飛控單元(包含有X86 MCU 與Ardupilot 飛控)通過(guò)無(wú)線局域網(wǎng)完成數(shù)據(jù)的交互。具體的,飛控單元通過(guò)無(wú)線局域網(wǎng)獲取無(wú)人機(jī)的位姿數(shù)據(jù);PC 機(jī)獲取無(wú)人機(jī)飛行狀態(tài)數(shù)據(jù),包含有實(shí)時(shí)的飛行模式、狀態(tài)、控制量等。最后,飛控單元在接收到實(shí)時(shí)的無(wú)人機(jī)位姿后,結(jié)合內(nèi)部的飛行控制算法,完成對(duì)無(wú)人機(jī)的飛行控制。圖7 中的遙控器主要用于完成無(wú)人機(jī)飛行模式的切換,用以保證無(wú)人機(jī)的安全飛行。同時(shí)在本步驟中,出于安全飛行的考慮,室內(nèi)飛行建議在四周具有圍欄的環(huán)境中完成。
注:PC 機(jī)一般不參與飛行控制算法的實(shí)施,僅用于完成無(wú)人機(jī)飛行數(shù)據(jù)的顯示。
相較于2.4 所提出的室內(nèi)運(yùn)動(dòng)捕捉環(huán)境下的飛行實(shí)驗(yàn),室外飛機(jī)仍然具有一定的挑戰(zhàn)。具體體現(xiàn)在:(1)定位傳感器頻率與精度的降低。常用的GPS 約5Hz,米級(jí)定位,DGPS ≤5Hz,厘米級(jí)定位,均遠(yuǎn)低于室內(nèi)動(dòng)捕環(huán)境的位置數(shù)據(jù)與精度;(2)室外強(qiáng)風(fēng)干擾較大。相較于室內(nèi)環(huán)境,室外飛行過(guò)程中,易受到來(lái)自于不同方向的紊流陣風(fēng),這對(duì)無(wú)人機(jī)的位置控制器的穩(wěn)定性提出一定挑戰(zhàn);(3)室外周邊環(huán)境復(fù)雜。相較于室內(nèi)“干凈”的飛行環(huán)境,室外不規(guī)則障礙較多,對(duì)旋翼式無(wú)人機(jī)航線飛行產(chǎn)生一定的影響;(4)GPS 信號(hào)不穩(wěn)定。在近樓區(qū)域或者隧道等區(qū)域,GPS 信號(hào)較差或者不穩(wěn)定,導(dǎo)致定位失敗。(5)天氣,航空管制等因素。
因此,在室外飛行前,需要綜合考慮以上條件,合理安排飛行計(jì)劃與實(shí)驗(yàn)流程,確保旋翼式無(wú)人機(jī)室外安全可靠飛行。
本文主要考慮旋翼式無(wú)人機(jī)從仿真到實(shí)踐飛行的控制設(shè)計(jì)過(guò)程,提出了一種可靠的基于模型的控制開(kāi)發(fā)方法。按照旋翼式無(wú)人機(jī)姿態(tài)環(huán)與位置環(huán)的控制策略開(kāi)發(fā)流程,包含有基于非線性模型的旋翼無(wú)人機(jī)Matlab/Simulink 仿真、基于ArduPilot 開(kāi)源飛控的可視化仿真平臺(tái)算法驗(yàn)證方案、基于Matlab/XPC 與ArduPilot 硬件在環(huán)仿真平臺(tái)算法驗(yàn)證方案、基于室內(nèi)運(yùn)動(dòng)捕捉系統(tǒng)的算法驗(yàn)證方案,以及室外控制算法驗(yàn)證。通過(guò)上述開(kāi)發(fā)流程,確保所提出控制方案從仿真驗(yàn)證到實(shí)際飛行的穩(wěn)定性與安全性。同時(shí)為后續(xù)針對(duì)旋翼式無(wú)人機(jī)的控制設(shè)計(jì)開(kāi)發(fā)提供保障。未來(lái)工作將考慮基于上述飛行控制開(kāi)發(fā)流程,針對(duì)小型旋翼無(wú)人機(jī)的敏捷性安全控制策略進(jìn)行研究。