[原][译][osg][osgEarth]飞行模拟软件JSBSim的操作(FGFCS类)
英文原文在 FGFCS.h头文件中
JSBSim的控制操作封装了飞行控制系统(FCS)的功能。
这个FGFCS类还封装了相同的“系统”和“自动驾驶仪”能力。
FGFCS包含用来定义一个系统或飞行模型体系的“FGFCS组件列表”。
飞机的配置文件包含控制路径的描述(从一个输入或命令开始和结束的效应),例如:aerosurface。
FCS组件包括一个轴的控制律是在配置文件中定义的顺序。例如,x - 15
<flight_control name="X-15 SAS"> <channel> <summer name="Pitch Trim Sum"> <input> fcs/elevator-cmd-norm </input> <input> fcs/pitch-trim-cmd-norm </input> <clipto> <min>-1</min> <max>1</max> </clipto> </summer> <aerosurface_scale name="Pitch Command Scale"> <input> fcs/pitch-trim-sum </input> <range> <min> -50 </min> <max> 50 </max> </range> </aerosurface_scale> ... etc.
在上面的案例中我们可以看到最初几个组件定义的俯仰通道。
第一个组件的输入(summer),可以看到在“俯仰的总和”组件,是真正的和两个参数:升降命令(飞行员输入),和俯仰。
下一个组件创建一个航空表面规模组件:一个增加的类型(参见LoadFCS()方法,研究各种类型的组件映射到实际的组件类)。
这一直持续到最后的组件的一个轴,当\ <输出>元素通常是用于指定输出是应该去的地方。
有关更多信息,请参见各个组件如何通过机械操作的。
另一个选择的飞行控制部分配置文件是,除了使用“名称”属性,
<flight_control name="X-15 SAS">
在这种情况下,FCS将从另一个文件中读取
相关的属性如下:
fcs/aileron-cmd-norm normalized aileron command 规范化副翼命令 使飞机做横滚机动
fcs/elevator-cmd-norm normalized elevator command 规范化升降舵命令
fcs/rudder-cmd-norm 方向舵
fcs/steer-cmd-norm 驾驶
fcs/flap-cmd-norm 襟翼 基本效用是在飞行中增加升力,便于起飞降落
fcs/speedbrake-cmd-norm 减速板,又称阻力板,飞机上用于增加阻力以减低飞行速度的可操纵面
fcs/spoiler-cmd-norm 扰流器,通过上下摆动来调节飞机的飞行时速
fcs/pitch-trim-cmd-norm 俯仰配平
fcs/roll-trim-cmd-norm 旋转配平
fcs/yaw-trim-cmd-norm 偏航配平
gear/gear-cmd-norm 齿轮、传动装置
fcs/left-aileron-pos-rad 副翼
fcs/left-aileron-pos-deg
fcs/left-aileron-pos-norm
fcs/mag-left-aileron-pos-rad
fcs/right-aileron-pos-rad
fcs/right-aileron-pos-deg
fcs/right-aileron-pos-norm
fcs/mag-right-aileron-pos-rad
fcs/elevator-pos-rad 升降舵
fcs/elevator-pos-deg
fcs/elevator-pos-norm
fcs/mag-elevator-pos-rad
fcs/rudder-pos-rad 方向舵
fcs/rudder-pos-deg
fcs/rudder-pos-norm
fcs/mag-rudder-pos-rad
fcs/flap-pos-rad 襟翼
fcs/flap-pos-deg
fcs/flap-pos-norm
fcs/speedbrake-pos-rad 减速板
fcs/speedbrake-pos-deg
fcs/speedbrake-pos-norm
fcs/mag-speedbrake-pos-rad
fcs/spoiler-pos-rad 扰流板
fcs/spoiler-pos-deg
fcs/spoiler-pos-norm
fcs/mag-spoiler-pos-rad
fcs/wing-fold-pos-norm 机翼折叠
gear/gear-pos-norm
gear/tailhook-pos-norm 制动钩
另加:
fcs/left-brake-cmd-norm 刹车
fcs/right-brake-cmd-norm
fcs/center-brake-cmd-norm
propulsion/starter_cmd 推进
fcs/throttle-cmd-norm[0] 油门推杆
一些小知识:
elevator 升降舵
在常规布局的飞机中,升降舵和水平尾翼一般都在飞机的机尾部分,水平尾翼就是一个小机翼,主要用于在飞行中保持飞机的府仰平衡;升降舵通常是尾翼后部一段可上下偏转的部分,在飞行中,当飞行员前推或后拉驾驶杆时,水平尾翼上的左右升降舵会同时向下或向上偏转,从面产生一个绕横轴的转动力矩,飞机便会相应地作俯冲或爬升.例如:当飞机员前推杆是,升降舵向下偏转,使尾翼的升力增加,从而使飞机后部绕重心向上偏转,前部向下偏转,使飞机进入俯冲状态;反之飞机员向后拉杆使飞机进入爬升状态.
ailerons :The wings have controllable sections known as ailerons.
操纵副翼可使飞机滚转...说白了就是控制飞机转弯的.
副翼是指安装在机翼翼梢后缘外侧的一小块可动的翼面.为飞机的主操作舵面,飞行员操纵左右副翼差动偏转所产生的滚转力矩可以使飞机做横滚机动.翼展长而翼弦短.副翼的翼展一般约占整个机翼翼展的1/6到1/5左右,其翼弦占整个机翼弦长的1/5到1/4左右.
飞行员向左压驾驶盘,左边副翼上偏,右边副翼下偏,飞机向左滚转;反之,向右压驾驶盘右副翼上偏,左副翼下偏,飞机向右滚转.
rudder 方向舵
方向舵就是飞行员前面类似汽车半个方向盘样子的东西,可以左右旋转和上下推动.当飞行员要使飞机上升,就向后拉方向舵,水平尾翼向上翘起,风打在水平尾翼上,机尾下沉,机头抬起,飞机向上飞;当飞行员要使飞机下降,就向前推方向舵,水平尾翼向下弯,风打在水平尾翼上机尾翘起,机头下沉,飞机向下飞.当飞行员想让飞机向左作倾侧动作,就将方向舵向左转,左侧副翼翘起,右侧副翼下弯,飞机向左倾斜;向右相反.
与机翼(俗称大翼)相铰链的飞行操纵面分别是飞机的襟翼(Flap)和副翼(Aileron)。
襟翼又分为后缘襟翼(Trailing edge flap)和前缘襟翼(Leading edge flap)。飞机的襟翼主要用于在飞机低速飞行时增加升力。
飞机起飞时放出部分襟翼,主要用于增加飞机的升力;着陆时,先放出部分襟翼、再逐步全都放出,可起到保持升力和减速的双重作用。
副翼位于飞机左右机翼后缘的外侧,用于操控飞机的滚转侧倾(机翼向上或向下)。
升降舵(Elevator)是铰链在水平安定面的后缘上的可动部件,用于操纵飞机的俯仰运作(机头朝上及朝下)。
水平安定面(Horizontal stabilizer),现代飞机的水平安尾翼大多数是可操控全动的,用来控制调节飞机的俯仰配平。
与垂直尾翼(垂直安定面)后缘相铰链的可动部件是方向舵(Rudder),用于操纵飞机的航向(机头向左或向右)。
扰流板(Spoiler)是铰链在机翼后缘上表面的可动部件,通常在襟翼根部以上。空中飞行时,用来协助副翼操纵飞机的侧倾(滚转),使机翼向上或向下。此外,还可用于在飞行中或地面滑跑时作为减速器。
控制轴
飞机的控制轴(Control axes),是通过飞机重心、互相垂直的三个轴,即俯仰轴、横滚轴和偏航轴。
俯仰轴(Pitch axis),又称水平轴或横轴。由飞机的一侧通向另一侧。飞机绕此轴转动即产生机头的俯与仰。而俯仰的操纵控制是由升降舵来达成的,水平安定面则用于调节俯仰配平。
横滚轴(Roll axis),又称纵轴。由飞机的前部通向后部。飞机绕此轴运转即产生机翼向上和向下的运动。它是由副翼和飞行扰流板操纵控制的。
偏航轴(Yaw axis),又称垂直轴。由机身上方通向下方。飞机绕此轴转动即产生机头向左或向右的运动。此一运动由方向舵来操纵控制。
飞机的飞行操纵面及其围绕控制轴产生的相应运动,即形成了飞机的飞行操纵系统(Flight control system)。一架飞机的整个飞行过程,从起飞滑跑、离地爬升、高空巡航、到下降进近和着陆滑跑的每个阶段,飞机的各飞行操纵面,无时不在调配控制着飞机围绕三个控制轴的姿态状况。由此构成的飞行操纵系统,其功能的正常与否,直接关乎飞机的安全飞行。
当程序员真蛋疼,什么专业知识都要涉及。。。
附加jsbsim单位制和属性:
转自:https://www.jianshu.com/p/a0b4598f928a
单位制
除非特殊说明,JSBSim都采用英制单位进行内部的计算。但是,在配置文件中也可以输入其他单位制的参数。实践中为避免单位制紊乱,建议总是显式定义单位。采用 unit 属性来定义,例如下面定义翼展长度的语句:
<wingspan unit="FT"> 35.8 </wingspan>
上述语句定义了翼展长度为35.8 Feet。下面等效语句则将长度单位定义为国标m(35.8 feet = 10.91 m):
<wingspan unit="M"> 10.91 </wingspan>
两个语句在 JSBSim 中的效果是相同的,只是采用了两种单位制。JSBSim 中的单位及其缩写分类如下:
- 长度:M KM -> FT IN
- 角度:RAD -> DEG
- 面积:M2 -> FT2
- 体积:CC M3 LTR -> IN3 FT3
- 力:N -> LBS
- 力矩:NM -> FTLBS
- 速度:M/S -> FT/SEC
- 弹簧力:N/M -> LBS/FT
- 阻尼力:N/M/SEC -> LBS/FT/SEC
- 质量:KG -> LBS
- 能量:WATTS -> HP
- 压强:PA ATM -> PSF INHG
通过代码模板的形式展示 JSBSim 中飞行器相关的参数如下:
<metrics> <wingarea unit="{FT2 | M2}"> {number} </wingarea> <wingspan unit="{FT | M}"> {number} </wingspan> <chord unit="{FT | M}"> {number} </chord> <htailarea unit="{FT2 | M2}"> {number} </htailarea> <htailarm unit="{FT | M}"> {number} </htailarm> <vtailarea unit="{FT2 | M}"> {number} </vtailarea> <vtailarm unit="{FT | M}"> {number} </vtailarm> <wing_incidence unit="{RAD | DEG}"> {number} </wing_incidence> <pitot_angle unit="{RAD | DEG}"> {number} </pitot_angle> <location name="{AERORP | EYEPOINT | VRP}" unit="{IN | M}"> <x> {number} </x> <y> {number} </y> <z> {number} </z> </location> {other location blocks} </metrics>
代码中除了飞机的几何参数外,还有三个参考位置:
- AERORP:气动力的作用点,为保证飞行的稳定性,气动力作用点通常在重心之后;
- EYEPOINT:计算飞行员/驾驶仪加速度(G-forces)的点;
- VRP(Virtual Reference Point):JSBSim 输出位置相关参数的对应点,用结构坐标系中的坐标表示。
属性(properties)
仿真系统需要管理大量的状态信息。对于大型的程序而言,数据的管理任务可能导致的问题有一下几类:
- 扩展性下降:若希望添加额外的功能,贡献者可能会觉得越来越难管理数目增加的通信接口;
- 配置性减弱:当对于不同机理(例如,环境变量、自定义文件、命令行选项等)的不同模块进行处理时,运行配置文件会变得越来越难;
- 初始化流程复杂:程序的初始化流程随着模型的复杂度增加而变得复杂,因为部分模块的初始化可能会使用到一些尚未来得及初始化的模块;
- 子工具扩展性差:通过子工具中的脚本、配置文件对程序进行扩展受限于程序提供的状态信息,如果是非代码开发用户则需要等待开发团队添加相应的变量。
属性管理系统(Property Manager system, PM)提供了一个单独的接口,接口允许在程序运行过程中动态地选择状态信息,甚至是生成一个新变量。 其中,动态生成新变量的功能对 JSBSim 的飞行控制系统至关重要,因为组成飞控系统的部分组件(例如,PID控制器、开关、加法器、增益等)只在特定的状态文件中出现。运行过程一旦稀疏地定义了这些组件后,组件本身只是瞬时存在的,但属性管理系统会将各组件的输出值按照属性的方式进行存储。
属性本身是一系列能够选择性可视的全局变量,各属性按照继承性、树状进行分类(类似于Unix的文件系统)。 属性树的结构包含一个根节点和一系列子节点以及终端节点。与Unix的文件系统类似,属性能够被当前节点或根节点引用,属性也能够被嫁接到其他节点上(类似于文件系统中的符号化链接和文件目录)。在 JSBSim 和 FlightGear 的程序代码中,属性被特定的参数广泛地引用。属性能够通过命令行、配置文件和脚本进行分配,甚至一个信道也可以分配属性。属性的命名方式如下:position/h-sl-ft、aero/qbar-psf。
为展示属性和配置文件的功能,以高性能喷气式飞机模型为对象进行描述。假设某一时刻一个新功能开关被添加到飞行控制面板上,例如飞机允许飞行员在飞控系统中进行超量程俯仰。对于 FlightGear 而言,器件面板是由一个配置文件定义的,开关就是在该文件上进行可视化。当进行开关定义时,开关被赋予一个属性名。在 JSBSim 飞行控制的配置部分,器件面板定义文件中一个被赋予该属性名的超量程俯仰开关就能够以通道的形式更新控制率,开关的位置函数能够按照需要的路径进行信息传递。整个功能添加的过程中并不涉及任何的代码编写。
仿真参数的定义既可以在 JSBSim 中,也可以在配置文件中通过属性完成。前文已经提到,属性是用于描述参数的选项,能够通过配置文件、命令行等获取和设置属性。
标准属性指的是那些在任何飞行器中都会出现的属性。但是气动力系数、发动机、推进器、飞控/自动驾驶仪等有时也需要动态定义一些属性。因为在相关的飞机配置文件被完全读入之前,气动力系数、发动机等参数并不是完全知晓的。用户必须知道这些参数对应的属性名,这样才能够对属性进行修改和更新。例如,X-15飞机的飞行控制系统具有以下特性:
<flight_control name="X-15"> <channel name="Pitch"> <summer name="fcs/pitch-trim-sum"> <input>fcs/elevator-cmd-norm</input> <input>fcs/pitch-trim-cmd-norm</input> <clipto> <min>-1</min> <max>1</max> </clipto> </summer> <aerosurface_scale name="fcs/pitch-command-scale"> <input>fcs/pitch-trim-sum</input> <range> <min>-50</min> <max>50</max> </range> </aerosurface_scale> <pure_gain name="fcs/pitch-gain-1"> <input>fcs/pitch-command-scale</input> <gain>-0.36</gain> </pure_gain>
上述代码中的第一个组件 "fcs/pitch-trim-sum" 包含两个已知的静态输入,即 fcs/elevator-cmd-norm 和 fcs/pitch-trim-cmd-norm。第二个组件将第一个组件的输出作为自身的输入,最后一个增益组件又以上一个输出(fcs/pitch-command-scale)作为自身的输入。
关于飞控:https://www.jianshu.com/p/b5e9f1f5df95