1
0
Fork 0
Commit graph

61 commits

Author SHA1 Message Date
Torsten Dreyer
54c964aed5 Respect different behaviour of RS and SR flip flops
No more invalid states here.
According to IEC 61131, RS flip flop have dominant reset and SR have
dominant set. This is now implemented.
2010-05-27 22:22:01 +02:00
James Turner
321bbeb2e8 Allow 'property' as well as 'prop' to be used in XMLauto <enable> blocks. 2010-05-27 15:20:37 +01:00
James Turner
1d0e9d268a Support <expression> in autopilot inputs, as well as property and value. 2010-05-26 19:30:33 +01:00
Torsten Dreyer
9e35d18f2e Add RS, JK, D and T flip flops as components
Flip flops are useful items for data latches and can be used to implement
pushbuttons, glideslope locks etc.
Check http://en.wikipedia.org/wiki/Flip-flop_(electronics)
and http://wiki.flightgear.org/index.php/Autopilot_Configuration_Reference
for details
2010-05-24 11:57:55 +02:00
Tim Moore
3e4a592282 Move using declaration out of header file 2010-04-19 12:22:30 +02:00
torsten
a464d1b2b2 use simgear::PropertyList instead of std::vector<SGPropertyNode_ptr> 2010-04-19 10:20:03 +02:00
torsten
c55874d70e Fix broken anti windup if the proportional gain runs into the nonlinear area and gets clipped.
Also fix the wrong debug message.
2010-03-20 18:46:19 +01:00
torsten
f4f784a514 Added anti windup for the pi-simple-controller 2010-03-11 09:01:25 +01:00
torsten
881d49858d Just a tiny change adds a <reference> input to FGDigitalFilters. This is nice to have to calculate differences of signals using gain-filters.
Old calculation was
output = input * gain
and is now
output = (input-reference) * gain
Note: the PI(D) controller use (reference-input) which effectively reverses the sign. Our notation was picked for backwards compatibility to not break the myriads of <filter> elements currently existing.

All the rest is some code cleanup.
2010-03-09 10:38:32 +01:00
torsten
90e313a8dd New feature: added <logic> "filters"
"logic filters" use well known conditions to drive output properties. Example for bax = baz & (foo | bar).

 <logic>
    <name>my first logic element</name>
    <input>
      <or>
        <property>foo</property>
        <property>bar</property>
      </or>
      <property>baz</property>
    </input>
    <output>bax</output>
  </logic>
2010-02-25 23:21:41 +01:00
jmt
301f3c5bd6 Quiet: reduce log-level of various things from INFO to DEBUG or BULK, and tune the categories/level of some specific messages.
Part of original commit that only applys to master branch.
2010-02-17 07:44:26 +01:00
torsten
168af9dc1e - added a differential filter
- use /orientation/track-deg instead of computing our own track
- some cosmetic changes
2010-01-05 22:20:42 +01:00
torsten
95e2d62d94 bugfix: don't call the update_helper() for every instance of FGXMLAutopilot. Compute the helper properties only once per FGXMLAutopilotGroup's update() method. Only one AutopilotGroup shall be instantiated, but many Autopilots may exist. 2009-12-30 10:34:11 +01:00
jmt
5cad5aa7da Autopilot: clean up the helpers code (which drives the various /internal/) properties. Fixes various heading modes to work in all aircraft. 2009-12-27 09:34:39 +01:00
torsten
50adab32c1 Ingore unhandled top level elements instead of not loading the autopilot. This (re-)enables usage of <params> at top level and <property alias="../params/foo"/> 2009-12-20 08:37:00 +01:00
torsten
506f6894e4 - introduce some typedefs for SGSharedPtr<>
- add a <period> element to input and output of each filter to support periodical values like headings. See README.digitalfilters for details.
2009-12-18 07:11:10 +01:00
torsten
179a799333 - fix the <condition> element which was no longer working due to an invalid property root
- allow multiple <autopilot> elements within an aircraft. All autopilot live in an individual FGXMLAutopilot subsystem which run within a subsystem group now.
2009-11-29 15:56:13 +01:00
jmt
739196c912 Refactor the XMLAuto parsing code to no longer warn about every node handled by the base class (FGXMLAutoComponent). As a side effect, issue better warnings when an unrecognised node is encountered. 2009-09-23 23:11:07 +02:00
torsten
5e9864994c fix warnings (order of initialization) 2009-08-23 21:43:09 +02:00
torsten
786c10a69e fix self initialized of average variable in FGPredictor 2009-07-02 08:59:16 +02:00
fredb
219be77f1e Suppress warnings 2009-07-02 08:59:16 +02:00
torsten
ec0ed21b73 support
<abs>true</abs>
for input elements.
If set to true, the input value is filtered thru fabs() function.
Defaults to false if absent, so there is no impact for existing configurations
2009-05-20 00:00:06 +02:00
torsten
b0dd43e022 added new features:
- conditions for InputValues
- multiple InputValues
some more code cleanup
2009-04-01 09:23:55 +02:00
torsten
abcc94d8ee - created a class for InputValues
- moved common code into the base class FGXMLAutoComponent
- adapted the documentation
2009-04-01 09:23:54 +02:00
mfranz
b00e1c10e0 Merge branch 'master' of ../.fg.osg 2009-03-18 08:00:08 +01:00
torsten
78e45727d0 Added support for <condition> elements under <enable> elements.
The old <prop> and <value> elements are still supported but ignored, if a <condition> element exists.
Also for the DigitalFilter
2009-03-05 10:52:03 +01:00
torsten
3f0e9b0161 Added support for <condition> elements under <enable> elements.
The old <prop> and <value> elements are still supported but ignored, if a <condition> element exists.
2009-03-05 10:52:02 +01:00
mfranz
58a2927aaf segfault-- 2009-02-02 00:56:25 +01:00
ehofman
14885374de header cleanups 2008-07-31 12:04:32 +00:00
timoore
a251fd35cb Include <iostream> and using declarations as needed.
SimGear no longer includes iostream and avoids using declarations in
header files, so various fixups are needed.
2008-06-02 21:07:35 +00:00
durk
3bc15df56b Syd Adams: Enable bank limit controls with the autopilot. 2008-04-06 06:49:36 +00:00
timoore
d28b509e5f autopilot filter deque fixes
Thanks to Vivian Meazza for debugging this. The output deque for
FGDigitalFilter was not being kept long enough for the
doubleExponential filter. Reads from output[1] could cause a crash.
2008-03-24 22:46:47 +00:00
mfranz
7d5c5e4aaf Roy Vegard OVESEN & Lee ELLIOT:
Lee has added two new filter types, "gain" and "reciprocal". These filters can
read their gain factor from a property. In the process we also added minimum
and maximum output clamps that are applicable to all filters.

I added the ability to configure adaptive controllers i.e. the controller gain
can be tied to a property, so that it can be changed at runtime. This
requires a change in the xml structure of the autopilot configuration file:

<Kp>
  <prop>/autopilot/KAP140/settings/ROL/Kp</prop>
  <value>0.10</value>
</Kp>        <!-- proportional gain -->

The old method <Kp>0.10</Kp> still works so as to not break all existing
autopilots, but it will output a warning to use the new method.
2008-02-17 09:44:03 +00:00
curt
15cd4284fb Roy Ovesen:
Please find attatched a new version of xmlauto.cxx.

Remove the call to build() in reinit(). This prevents build() from being
called twice when Reload Autopilot is selected from the Debug menu.

I've also added the ability to define an enabled property for the filters.
It's used like the PID controllers. If there is no enabled tag then the
filter defaults to enabled so that nothing should get broken by this change.

This ability can be used to create a filter between the output of a PID
controller and the property that it controls (a control surface). By putting
a noise spike filter between the output of a controller and the control
surface that it controls, we can simulate the limited movement rate that is
inherent in autopilot servos.
2008-02-04 20:01:20 +00:00
timoore
1b439f8501 Memory leak fixes from Till Busch 2008-01-19 18:06:05 +00:00
mfranz
80467ed6d0 Harald JOHNSEN: initialize elapsedTime 2007-07-09 17:15:11 +00:00
curt
50c7a31de8 Fix a long standing bug in a code path that is probably executed very rarely. 2007-06-26 21:29:59 +00:00
curt
bcd9b071c5 Create a "passive" mode for the autopilot. This is analogous to running the
autopilot with the servos off.  In otherwords, the computer goes through the
motions of computing the desired behavior (pitch or roll) but doesn't actually
drive the outputs.  This is potentially useful when implimenting a flight
director.
2006-06-24 00:52:20 +00:00
daveluff
00ba5a853e Recent SimGear changes seem to require more additions of config.h to FG in order to compile on Cygwin 2006-02-22 21:04:47 +00:00
mfranz
c9813d1b5d new FSF address 2006-02-21 01:16:04 +00:00
mfranz
940d1aa8df typo 2006-02-04 01:03:41 +00:00
ehofman
111eff7ae0 Roy Vegard Ovesen:
I've prepared a patch as suggested by Hans-Georg Wunder and Jeff McBride.

In addition I've removed the ability to completely leave out the integral
action by setting Ti to zero. The velocity form of the PID algorithm _needs_
the integral action.
2005-09-25 07:49:18 +00:00
curt
e60223a952 Lee Elliot:
>> Hello List,
>>
>> I think there's a small bug in the moving-average filter in
>> xmlauto.cxx
>>
>> I noticed that the output from it was always out a bit and
>> checking with a calculator showed that it seemed to be dividing
>> by the number of samples + 1 instead of just the number of
>> samples.
>>
>> subtracting 1 from 'samples' in line 702 seems to fix the problem
>> and as 'samples' doesn't seem to be used elsewhere I think it's
>> safe.  Possibly implies that the number of samples may be one
>> less than specified but I'm not familiar enough with c++ to spot
>> it.


Roy Ovesen:

You are right. I would suggest resizing input[] to (samples + 1) instead.
Change lines 654 and 661 to:

input.resize(samples + 1, 0.0);

That way we average over the number of samples as configured.
2005-09-16 20:21:15 +00:00
curt
ec50bcfb5a Roy Ovesen:
I've added some features to the PID controller:

Ability to set desired sampling interval in seconds. Use <Ts> under <config>
to set the desired sampling interval of the PID controller.

Example:
<config>
     <Ts>0.1</Ts>        <!-- desired sampling interval -->
     <Kp>-0.05</Kp>        <!-- proportional gain -->
     <beta>1.0</beta>    <!-- input value weighing factor -->
     ...
     ...
</config>

Ts defaults to 0.0, so if you don't set it it samples at the highest possible
frequency.


Add an offset to the input variables (input and reference).
Example:
    <reference>
      <prop>/controls/flight/elevator</prop>
      <scale>-1.5</scale>
      <offset>1.0</offset>
    </reference>

Note that <scale> has higher precedence than <offset>, regardless of the order
that they appear in the config file.
2005-02-01 21:00:24 +00:00
ehofman
4d8da078a4 Roy Vegard Ovesen:
I guess it is much more efficient to compare integers than comparing long strings like "double-exponential" every frame.
2005-01-20 09:55:47 +00:00
curt
c6f0d87a26 A few more radios -> instrumentation name changes thanks to Melchior for
catching these.
2004-12-04 21:06:57 +00:00
curt
d05121ef46 Fix my mailing address by replacing it with my web page. 2004-11-19 22:10:41 +00:00
ehofman
fa7f2468c2 Roy Vegard Ovesen:
I've added some digital filters to the autopilot. They are all low-pass
filters that filter away high frequency signals/noise. There are 4 different
filters:

1. Exponential - The algorithm is essentially the same as the one used in the
   fgGetLowPass() function.

2. Double exponential - Two exponential filters in series. This filter has a
   "steeper" frequency response curve. It filters "better" than the single
   exponential.

3. Moving average - Averages a number of inputs.

4. Noise spike - limits the amount that the output value can change from one
   sample to the next.

Filters 1 and 2 are characterised by it's filter-time in seconds. For filter 3
you have to set the number of input samples to average over. For filter 4 you
set the maximum allowed rate of change as [1/s]. Since the sampling interval
(dt) isn't constant we have to calculate the maximum allowed change for every
update.

Example of a double exponential filter with filter time 0.1 seconds, that is
1/0.1 = 10 Hz.

  <filter>
    <name>pressure-rate-filter</name>
    <debug>true</debug>
    <type>double-exponential</type>
    <input>/autopilot/internal/pressure-rate</input>
    <output>/autopilot/internal/filtered-pressure-rate</output>
    <filter-time>0.1</filter-time>
  </filter>

This would go in the autopilot configuration file.

I've also removed the filtering of the "pressure-rate" helper value, use the
new filters if you want to filter it!  ;-)
2004-10-14 09:19:44 +00:00
curt
088a7a83b4 Add a pressure rate helper function for Roy's KAP140 autopilot model. 2004-04-12 19:17:47 +00:00
curt
2acdd02879 Clean up various compiler warnings that have crept into the code. This
by no means get's them all, but it's a start.
2004-04-01 15:27:53 +00:00