jsbsim.js
Version:
JSBSim flight dynamics model ported to JavaScript
157 lines (125 loc) • 3.99 kB
text/xml
<!-- $Id: Submarine_Scout_crew_ap.xml,v 1.1 2009/04/14 19:33:22 andgi Exp $ -->
<!--
Submarine Scout airship flight model for JSBSim.
Copyright (C) 2007 - 2009 Anders Gidenstam (anders(at)gidenstam.org)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-->
<system name="Submarine Scout Crew Autopilot">
<!-- INTERFACE PROPERTIES -->
<property>ap/yaw-damper-active</property>
<property>ap/pitch-setpoint-degrees</property>
<property>ap/pitch-hold-active</property>
<!-- SENSORS -->
<!-- CHANNELS -->
<channel name="Rudder">
<pid name="ap/yaw-damper-pid">
<input> aero/beta-deg </input>
<kp> -2.000 </kp>
<ki> 0.000 </ki>
<kd> 0.000 </kd>
<clipto>
<min>-1.0</min>
<max> 1.0</max>
</clipto>
</pid>
<summer name="ap/heading-sum">
<input> ap/yaw-damper-pid </input>
</summer>
<switch name="ap/heading-switch">
<default value="0.0"/>
<test logic="AND" value="ap/heading-sum">
ap/yaw-damper-active == 1
fcs/rudder-cmd-norm gt -0.1
fcs/rudder-cmd-norm lt 0.1
</test>
<output>ap/rudder-cmd-norm</output>
</switch>
</channel>
<channel name="Elevator">
<pure_gain name="ap/pitch-setpoint-rad">
<input> ap/pitch-setpoint-degrees </input>
<gain> 0.017453 </gain>
</pure_gain>
<summer name="ap/pitch-error-rad">
<input> attitude/theta-rad</input>
<input> -ap/pitch-setpoint-rad </input>
</summer>
<pid name="ap/elevator-pid">
<input> ap/pitch-error-rad </input>
<kp> 5.00 </kp>
<ki> 0.00 </ki>
<kd> 0.01 </kd>
<clipto>
<min>-1.0</min>
<max> 1.0</max>
</clipto>
</pid>
<switch name="ap/elevator-switch">
<default value="0.0"/>
<test logic="AND" value="ap/elevator-pid">
ap/pitch-hold-active == 1
</test>
<output>ap/elevator-cmd-norm</output>
</switch>
</channel>
<channel name="Static trim via ballonets">
<pid name="ap/ballonet-trim-pid">
<input> ap/pitch-error-rad </input>
<kp> 40.00 </kp>
<ki> 0.00 </ki>
<kd> 0.00 </kd>
<clipto>
<min>-1.0</min>
<max> 1.0</max>
</clipto>
</pid>
<switch name="ap/ballonet-switch">
<!-- greater than 0 means trim towards nose heavy. -->
<default value="0.0"/>
<test logic="AND" value="ap/ballonet-trim-pid">
ap/pitch-hold-active == 1
</test>
<output>ap/ballonet-trim-cmd-norm</output>
</switch>
<fcs_function name="ap/ballonet-valve-cmd-norm[0]">
<function>
<product>
<value>-1.0</value>
<min>
<value> 0.0 </value>
<property>ap/ballonet-trim-cmd-norm</property>
</min>
</product>
</function>
</fcs_function>
<fcs_function name="ap/ballonet-valve-cmd-norm[1]">
<function>
<product>
<value>1.0</value>
<max>
<value> 0.0 </value>
<property>ap/ballonet-trim-cmd-norm</property>
</max>
</product>
</function>
</fcs_function>
</channel>
<channel name="Envelope pressure">
<fcs_function name="ap/gas-valve-cmd-norm">
<function>
<value>0.0</value>
</function>
</fcs_function>
</channel>
</system>