黃 凡
(海軍駐昆明地區第三軍代室,云南 昆明 650200)
在海洋科研與軍事任務需求牽引下,水下航行體成為各國的熱門研究課題。系統仿真在水下航行體控制系統的分析與設計中發揮著重要作用。系統仿真分為數學仿真、半實物仿真和實物仿真。數學仿真是整個系統仿真的基礎,具有經濟性、靈活性及通用性的特點[1]。
不同的應用目的,需要選取不同的水下航行體仿真模型作為仿真研究對象。因此,為了得到盡可能準確的仿真結果,研究人員需要設計專門的仿真軟件來解決具體問題。對于涉及多型水下航行體設計的研究人員,需要重復性編寫仿真軟件,造成人力、物力巨大浪費。為此,編寫一套水下航行體通用數學仿真軟件很有必要。
針對這一需要,本文設計一套仿真數學模型可配置、控制算法可選擇、實航內測數據及仿真實驗結果可三維顯示的水下航行體控制系統數學仿真軟件(以下簡稱仿真軟件)。其涉及的關鍵技術包含:水下航行體數學模型及仿真數學模型建立技術、水下航行體控制工程技術、參數辨識技術和可視化仿真技術。開發工具包含:Visual C++,MATLAB/Simulink,OpenGL。下面將詳細介紹仿真軟件設計過程。
從開發者角度,仿真軟件可分為4大模塊:水下航行體數學模型及仿真模型模塊、控制算法模塊、流體動力參數辨識模塊和圖形界面人機交互模塊。
水下航行體數學模型及仿真模型模塊主要完成的功能:對水下航行體的數學模型(也稱為一次模型)封裝;對航行體數學模型進行分解、簡化得到仿真數學模型(也稱為二次模型),并對常規的仿真數學模型進行封裝。對模型封裝的目的是為了簡化設計人員的工作,使其更專注于工程問題的研究。該模塊主要采用MATLAB/Simulink軟件進行設計和實現。
控制算法模塊集成了針對水下航行體常用的控制律,包含PID控制律、自抗擾控制技術、模糊策略和滑模變結構控制等封裝好的子模塊。該模塊也采用MATLAB/Simulink軟件進行設計和實現。
水動力參數辨識模塊主要完成水下航行體水動力參數的辨識。該模塊包含以下子模塊:數據預處理子模塊、數據擬合子模塊和參數辨識算法子模塊。數據預處理子模塊完成對仿真數據或實測數據的修正和誤差補償,以提高數據的可信度。該子模塊集成了幾種常用數據預處理方法:野值識別與剔除、數據平滑、低通濾波、樣條插值和FFT變化。數據擬合子模塊主要功能是研究測試數據,并找出變量之間的相互關系,以解決非確定性關系的相關問題。該子模塊集成了以下幾種常用數據擬合方法:最小二乘多項式、高斯消元法、豪斯變換和樣條函數。參數辨識子模塊集成了常用參數辨識算法:最小二乘法、梯度校正法和極大似然法。該模塊采用MATLAB/Simulink軟件進行設計和實現。
圖形界面人機交互模塊主要完成對實航內測數據和仿真實驗結果的可視化顯示,該模塊還具有整個軟件的數據管理調度功能。圖形界面人機交互模塊包含以下子模塊:圖形界面顯示子模塊和數據管理調度子模塊。圖形界面顯示子模塊包含三維動畫顯示和二維曲線顯示。數據管理調度子模塊完成整個仿真軟件的數據管理和調度。該模塊采用Visual C++和OpenGL進行設計和實現。
仿真軟件結構樹圖如圖1所示。

圖1 仿真軟件結構樹圖Fig. 1 Structure-tree of simulation software
仿真軟件從用戶角度來看,分為3個層次:實航內測數據和仿真實驗結果演示層(以后簡稱演示層)、仿真實驗分析層(以后簡稱分析層)和仿真實驗平臺搭建層(以后簡稱搭建層)。每個層次有不同的側重點,所針對的用戶也不同。
演示層開發工具:Visual C++和 OpenGL。演示層完成實航內測數據和仿真實驗結果的三維可視化顯視。
分析層開發工具:MATLAB/Simulink。分析層完成水下航行體控制系統仿真實驗及其結果分析。仿真軟件使用者通過MATLAB GUI進行仿真模型配置、控制方法選擇和仿真結果編輯。部分仿真實驗結果以二維功能曲線的方式顯示。該層主要針對水下航行體常用仿真模型進行工程上常規控制算法分析與設計。
搭建層是一個深層開發平臺,同時也是一個開放式平臺。該層主要針對水下航行體進行控制算法的理論應用研究。在該平臺上,使用者可以加入自己開發的模塊,以便進行更深入的針對水下航行體的仿真實驗研究。搭建層采用MATLAB/Simulink進行開發與設計。
演示層、分析層和搭建層相互獨立。由第1節中的4大模塊完成3個層次的仿真軟件開發。“三層結構”與“四大模塊”的關系圖如圖2所示。

圖2 “三層結構”與“四大模塊”的關系圖Fig. 2 Relationship between the three layers structure and four important parts
水下航行體數學模型屬于灰箱系統,其運動遵循牛頓力學定律、質量和能量守恒定律。根據這些物理定律,可以完成水下航行體的結構建模,即建立水下航行體的動力學和運動學方程組。數學模型中的流體動力參數可通過水洞試驗、風洞試驗或航行體流體動力參數辨識得到。
2.1.1 水下航行體數學模型
Fossen對水下航行體的數學模型有過深入研究[2-3]。國內主要采用文獻[4]提供的水下航行體數學模型進行水下航行體的制導與控制研究。Fossen與文獻[4]給出的水下航行體數學模型都是基于Newton-Euler方程建立的六自由度動力學模型,只是表征水下航行體運動位置和姿態的符號不同。為了研究方便,仿真軟件選用文獻[4]提供的水下航行體數學模型。
水下航行體動力學方程[4]:

水下航行體運動學方程[4]:

式中:Amλ、Avω、AFM為動力學方程系數矩陣;x0、y0、z0為浮心在地面坐標系中的分量;v0x、v0y、v0z為浮心速度在體坐標系中的分量;ωx、ωy、ωz為旋轉角速度在體坐標系中的分量;θ、ψ、φ為體坐標系與地面坐標系的相對夾角,θ為俯仰角,ψ為偏航角,φ為橫滾角;Θ、Ψ、φc為彈道曲線在地面坐標系中的分量,Θ為彈道傾角,Ψ為彈道偏角,φc為彈道傾斜角;α、β為航行體體坐標系與航行體速度坐標系之間的角,α為攻角,β為傾斜角。
用式(1)和式(2)表示水下航行體數學模型包含至少37個流體動力參數和20個總體參數,該數學模型是一個廣義非線性系統[5]。因為模型的復雜性和非線性,目前很少直接用式(1)和式(2)表示六自由度水下航行體數學模型進行控制器的設計與分析。但是隨著航行體機動性增強,對其廣義非線性六自由度數學模型進行研究很有必要。文獻[6]對水下航行體進行了不同于文獻[4]的建模方法,但是直接用于控制器的分析與設計還是很有難度的。

圖3 水下航行體數學模型Fig. 3 Mathemetical model of underwater vehicle
本文采用 Simulink中的 S函數對水下航行體數學模型進行封裝,Simulink中自定義模塊的創建與封裝參見文獻[7]。模塊的輸出為水下航行體空間運動的全部17個運動參數。封裝模塊如圖3所示,該模塊封裝了水下航行體動力學方程式(1)和運動學方程式(2)。
2.1.2 水下航行體仿真模型
針對特定應用目的,在工程允許范圍內,需要對水下航行體數學模型進行簡化和分解,稱簡化和分解后的數學模型為仿真模型。
工程上,一般將水下航行體空間運動分解為垂直平面的縱向運動、在水平面內的側向運動。空間運動按平面運動進行分解時忽略了平面間的耦合作用,在這種情況下,需要水下航行體有理想的橫滾控制系統,以保證側向運動與縱向運動之間弱交連。
分解和簡化后的水下航行體原始縱向運動系統和側向運動系統也是復雜非線性系統,對于水下航行體控制系統的設計與綜合,需要對非線性系統進行線性化。控制理論與控制工程中常采用小擾動線性化方法,也有學者利用微分幾何對水下航行體做大范圍的精確線性化[8-9]。
仿真軟件采用 Simulink對仿真模型進行模塊封裝。封裝的水下航行體縱向運動和側向運動仿真模型有:原始運動方程、簡化運動方程、小擾動線性化運動方程和近似傳遞函數。水下航行體的仿真模型模塊設計方法與其數學模型模塊的設計方法一致,即采用Simulink的S函數進行設計。
水下航行體具有高度非線性、時變性和強耦合性,而且難于獲得其精確的水動力參數,同時還受到浪涌、海流干擾。所以,水下航行體采用的控制方法需要具體良好的魯棒性。
對于類似魚雷外形的水下航行體,在滿足小擾動條件下(例如小攻角、小側滑角、定常定深直航運動等工況),傳統的控制方法可以得到良好的控制效果。事實上,現在大多數的水下航行體仍采用PID范式下的各種控制算法。
隨著對水下航行體機動能力的提高,小擾動條件被破壞,急需尋求更多的控制算法來改善水下航行體控制系統的性能品質。國內外許多學者將自抗擾技術、模糊策略、滑模變結構控制和非線性魯棒控制等控制理論與技術應用于水下航行體控制系統的設計[10-13]。
仿真軟件主要針對工程應用和應用理論研究,所以本文選取控制算法的原則是在以往工程中得到成功應用,有良好控制效果的部分算法。本文將常規的PID算法、自抗擾技術、模糊策略和滑模便結構控制分別進行模塊封裝,以便于針對水下航行體的控制算法分析與設計。應該說明的是,上述列出的算法,都有其各自的特點,對被控對象動態特性的掌握在很大程度上決定了控制算法的應用效果。
2.2.1 PID控制律
MATLAB2011a版本中已經有連續和離散的PID模塊,該模塊封裝了基本的PID控制律和2自由度PID(2DOF PID)。在實際應用中還有很多其他在PID范式下的多種算法,例如非線性PID,自適應PID等。本仿真軟件引用MATLAB封裝好的PID模塊。用戶也可以利用文獻[7]提供的方法,把封裝好的其它形式的PID算法加入到PID模塊中。
2.2.2 自抗擾控制技術
自抗擾控制(Active Disturbance Rejection Control,ADRC)是韓京清研究員經過多年發展起來面向工程應用的控制算法,已經在實際系統上得到檢驗并取得了十分出色的效果[14-15]。文獻[16]對一階 ADRC、二階級 ADRC、三階 ADRC、構成ADRC的各部件及常用的非線性函數進行了封裝。本仿真軟件以文獻[16]給出的成果進行模塊封裝,用戶也可以把其他形式的 ADRC封裝好添加到ADRC模塊中。
2.2.3 模糊策略
模糊策略是從行為上模擬人的模糊推理和決策過程的一種實用方法。從1965年美國自動控制專家Zadeh提出“隸屬函數”概念,到1974年英國工程師 Mamdani首次把策略應用到鍋爐和蒸汽機的控制并取得良好的控制效果以來,模糊策略在自動領域得到了廣泛應用[17-18]。在MATLAB2011a的Toolboxes中含有Fuzzy Logic工具箱,模糊策略子模塊是基于該工具箱進行一些常規模糊策略的封裝。模糊策略應用的一個難點是模糊規則的確定,模糊規則需要豐富的工程經驗。本仿真軟件將結合一線工程師的專家經驗針對水下航行體設計一些常用的模糊策略,并對其進行模塊封裝,用戶也可以把自定義模糊策略模塊封裝好添加到模糊策略模塊中[7]。
2.2.4 滑模變結構控制
滑模變結構控制由前蘇聯學者 Utkin和Emelyanov在20世紀50年代提出,經過50多年的發展,在很多領域得到成功應用[19-20]。這種控制方法通過控制量的切換使系統狀態沿著滑模面滑動,使系統在受到參數攝動和外界干擾時具有不變性。在歐美,設計人員在八九十年代就將滑模控制應用于水下航行體的控制上,并得到了良好的控制效果[21-24]。然而,滑模控制的強魯棒性是以控制量的高頻振顫為代價換取的。因此,對滑模變結構控制的改進、抖振的削弱成為研究重點。本仿真軟件將對常用的連續時間系統滑模控制、離散時間系統滑模控制、Terminal滑模控制、動態滑模控制、基于反演設計的滑模控制和模糊滑模控制進行模塊封裝。用戶也可以把自定義的滑模控制添加到滑模變結構控制子模塊中。滑模變結構控制子模塊利用M語言和文獻[7]提供的方法進行封裝。
水下航行體流體動力參數辨識是分析和設計航行體控制系統的一種重要手段。理論研究和實踐表明,用于不同情況下的水下航行體數學模型結構已基本定型,建立水下航行體數學模型的主要任務是通過各種手段獲取水下航行體流體動力參數。獲取水下航行體流體動力參數的手段一般包含:水洞實驗、風洞實驗、流體力學理論計算和流體動力參數辨識。通過水洞實驗、風洞實驗和流體力學計算得到的流體動力參數是在一定的假設條件下利用相似原理做出,具有一定局限性。因此,采用參數辨識技術從水下航行體實航試驗或仿真實驗中測得的輸入輸出數據進行流體動力參數辨識,具有重要意義[25]。
實航試驗或仿真實驗的測試數據預處理是流體動力參數辨識的第一步,可靠的數據是辨識成功的關鍵。
為了研究一些確定和非確定性關系,需要從給定的數據中,找出變量之間的關系,也稱解決這類問題的計算方法為數據擬合方法。
針對不同的對象和不同的應用目的,需要選用特定的參數辨識方法,本文選用最小二乘法、梯度校正法和極大似然法作為水下航行體流體動力參數辨識方法。
本仿真軟件將按照文獻[25]提供的方法對數據預處理子模塊、數據擬合模塊和參數辨識算法子模塊進行設計與封裝。需要說明的是,水動力參數辨識是一個比較難的課題,目前水動力參數辨識還停留在線性辨識方面,非線性水動力參數辨識還處于探索階段,本仿真軟件提供的手段極為有限。
在本仿真軟件中,圖形界面人機交互模塊需要完成2個任務:1)實航內測數據或仿真實驗數據可視化顯示;2)仿真軟件的數據管理調度功能。相應的,該模塊包含以下子模塊:圖形界面顯示子模塊和數據管理調度子模塊,以完成該模塊的功能。
2.4.1 圖形界面顯示子模塊設計
圖形界面顯示子模塊分為:控制系統仿真分析二維曲線及文本數值顯示部件、實航內測數據或仿真實驗數三維顯示部件。
1)控制系統仿真分析二維曲線及文本數值顯示部件。
該部件采用MATLAB GUI進行設計和實現。該部件包含:流體動力參數及總體參數單元、水下航行體穩定性和運動特性分析單元、控制律設計單元、流體動力參數辨識單元和文檔管理及用戶幫助單元。
流體動力參數及總體參數單元完成水下航行體的流體動力參數和總體參數的輸入。該單元采用mat文件進行數據管理,mat文件為仿真軟件提供初始數據,仿真軟件的其他模塊以可讀方式訪問該文件。
水下航行體穩定性和運動特性分析單元完成水下航行體在不加控制律時的穩定和運動特性分析。該單元采用2種研究方法(時域和頻域),對水下航行體進行側向通道、縱向通道和橫向通道的穩定性和運動特性進行分析。
控制律設計單元完成水下航行體控制系統設計,從穩定性和動態特性考察水下航行體控制系統的控制品質。
流體動力參數辨識單元完成水下航行體流體動力參數的辨識。該單元包含了2.3節中提到的3個模塊。
文檔管理及用戶幫助單元向用戶提供系統管理和處理功能,包括仿真和辨識結果的數據處理、二維曲線編輯、系統退出和用戶常見問題解答等功能。
2)實航內測數據或仿真實驗數三維可視化顯示部件。
該部件采用Visual C++ 和OpenGL進行設計和實現。該部件包含實航內測數據或仿真實驗數三維顯示單元、文檔管理及用戶幫助單元。
實航內測數據或仿真實驗數據三維顯示單元完成水下航行體運動特性可視化顯示,將抽象數據信息轉化為直觀的圖形信息,逼真地模擬出航行過程的實際情況。本仿真軟件提到的三維可視化屬于科學計算可視化3個層次中的事后處理可視化層次[26]。該單元對實航內測數據和仿真實驗數據統一進行處理,在顯示操作過程中,用戶可以隨時介入,例如暫停、回放等。
文檔管理及用戶幫助單元完成系統退出和用戶常見問題解答等功能。
2.4.2 數據管理調度子模塊
該模塊完成仿真軟件的數據管理調度,包含2個單元:MATLAB GUI環境下的數據調度管理單元和 Visual C++環境下的數據調度管理單元。MATLAB與 Visual C++通過動態鏈接庫和靜態連接庫進行數據交換。
MATLAB GUI環境下的數據調度管理單元主要完成水下航行體流體動力參數總體參數的分解與管理、仿真數據的存儲和處理等。
Visual C++環境下的數據調度管理單元完成數據的處理和操縱、可視化映射、圖形繪制。
Visual C++環境下數據調度管理示意圖如圖4所示[26]。

圖4 Visual C++環境下數據調度管理示意圖Fig. 4 Data-manager diagram in Visual C++ environment
不同水下航行體結構模型已基本定型,在得到水下航行體總體參數和流體動力參數后,從控制系統的設計與分析角度而言,最主要的工作是針對特定應用目的來配置仿真模型,進行控制系統仿真研究。
工程上,水下航行體常采用橫滾通道、航向通道和俯仰深度通道分別進行控制。本節以俯仰深度通道為例介紹有關的仿真數學模型的配置。
俯仰深度通道控制以水下航行體縱向運動為研究對象,以水下航行體縱向運動的相關運動參數為被控量。此時,把運動參數配置為0,代入式(1)和式(2)中,得到原始水下航行體縱向運動方程組,該方程組可作為水下航行體控制系統的仿真研究對象。該方程組是一個非線性系統,不利用工程上常用的經典控制算法對其進行控制系統設計與分析。為便于工程應用,在特定工況下,對原始水下航行體縱向方程組進行工程精度范圍內允許的簡化和線性化,得到水下航行體小擾動線性化方程組和近似傳遞函數,具體實現與文獻[4]提供的方法一致。上述的小擾動線性化方程組和近似傳遞函數為一般工程應用的數學仿真模型。
對于“分析層”仿真軟件用戶,在輸入水下航行體總體參數和流體動力參數后,只需勾選相應選項,便可進行水下航行體控制系統仿真研究。對于“搭建層”仿真軟件用戶,在 MATLAB/Simulink平臺上,可選用不同形式的水下航行體縱向運動仿真數學模型進行控制算法研究和控制系統設計與分析。
本文給出了仿真軟件的結構組成,即用戶角度的3個層次和設計人員角度的4大模塊。給出了各模塊的設計思路,并對文中提到的理論給出了簡要介紹,列出了相關理論及應用的經典文獻。
本仿真軟件涉及的部分關鍵技術在其它軟件已得到成功應用,該仿真軟件的設計方案在技術上具有可行性。