黄 凡
(海军驻昆明地区第三军代室,云南 昆明 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大模块。给出了各模块的设计思路,并对文中提到的理论给出了简要介绍,列出了相关理论及应用的经典文献。
本仿真软件涉及的部分关键技术在其它软件已得到成功应用,该仿真软件的设计方案在技术上具有可行性。