]> git.mxchange.org Git - flightgear.git/commitdiff
Initial revision.
authorcurt <curt>
Tue, 9 Mar 1999 19:09:41 +0000 (19:09 +0000)
committercurt <curt>
Tue, 9 Mar 1999 19:09:41 +0000 (19:09 +0000)
Autopilot/AltitudeHold.tex [new file with mode: 0644]
Autopilot/HeadingHold.fig [new file with mode: 0644]
Autopilot/HeadingHold.tex [new file with mode: 0644]
FDM/airspeed.txt [new file with mode: 0644]
LaRCsim/LaRCsim-notes.tex [new file with mode: 0644]
LaRCsim/LaRCsim-vars.tex [new file with mode: 0644]
LaRCsim/LaRCsim_generics_v_1.4.xls [new file with mode: 0755]
LaRCsim/manual.ps.gz [new file with mode: 0644]
LaRCsim/manual.tex.gz [new file with mode: 0644]
Portability/fgfs-portability-guide.lyx [new file with mode: 0644]
Serial/nmeafaq.txt [new file with mode: 0644]

diff --git a/Autopilot/AltitudeHold.tex b/Autopilot/AltitudeHold.tex
new file mode 100644 (file)
index 0000000..c4dcd5f
--- /dev/null
@@ -0,0 +1,210 @@
+%
+% `AltitudeHold.tex' -- describes the FGFS Altitude Hold
+%
+%  Written by Curtis Olson.  Started December, 1997.
+%
+% $Id$
+%------------------------------------------------------------------------
+
+
+\documentclass[12pt]{article}
+
+\usepackage{anysize}
+\papersize{11in}{8.5in}
+\marginsize{1in}{1in}{1in}{1in}
+
+\usepackage{amsmath}
+
+\usepackage{epsfig}
+
+\usepackage{setspace}
+\onehalfspacing
+
+\usepackage{url}
+
+
+\begin{document}
+
+
+\title{
+  Flight Gear Autopilot: \\
+  Altitude Hold Module
+}
+
+
+\author{
+  Curtis Olson \\ 
+  (\texttt{curt@me.umn.edu})
+}
+
+
+\maketitle
+
+\section{Introduction}
+
+Working on scenery creation was becoming stressful and overwhelming.
+I needed to set it aside for a few days to let my mind regroup so I
+could mount a fresh attack.
+
+As a side diversion I decided to take a stab at writing an altitude
+hold module for the autopilot system and in the process hopefully
+learn a bit about control theory.
+
+
+\section{Control Theory 101}
+
+Before I get too far into this section I should state clearly and up
+front that I am not a ``controls'' expert and have no formal training
+in this field.  What I say here is said \textit{to the best of my
+knowledge.}  If anything here is mistaken or misleading, I'd
+appreciate being corrected.  I'd like to credit my boss, Bob Hain, and
+my coworker, Rich Kaszeta, for explaining this basic theory to me, and
+answering my many questions.
+
+The altitude hold module I developed is an example of a PID
+controller.  PID stands for proportional, integral, and derivative.
+These are three components to the control module that will take our
+input variable (error), and calculate the value of the output variable
+required to drive our error to zero.
+
+A PID needs an input variable, and an output variable.  The input
+variable will be the error, or the difference between where we are,
+and where we want to be.  The output variable is the position of our
+control surface.
+
+The proportional component of the PID drives the output variable in
+direct proportion to the input variable.  If your system is such that
+the output variable is zero when the error is zero and things are
+mostly linear, you usually can get by with proportional control only.
+However, if you do not know in advance what the output variable will
+be when error is zero, you will need to add in a measure of integral
+control.
+
+The integral component drives the output based on the area under the
+curve if we graph our actual position vs. target position over time.
+
+The derivative component is something I haven't dealt with, but is
+used to drive you towards your target value more quickly.  I'm told
+this must be used with caution since it can easily yield an unstable
+system if not tuned correctly.
+
+Typically you will take the output of each component of your PID and
+combine them in some proportion to produce your final output.
+
+The proportional component quickly stabilizes the system when used by
+itself, but the system will typically stabilize to an incorrect value.
+The integral component drives you towards the correct value over time,
+but you typically oscillate over and under your target and does not
+stabilize quickly.  However, each of these provides something we want.
+When we combine them, they offset each others negatives while
+maintaining their desirable qualities yielding a system that does
+exactly what we want.
+
+It's actually pretty interesting and amazing when you think about it.
+the proportional control gives us stability, but it introduces an
+error into the system so we stabilize to the wrong value.  The
+integral components will continue to increase as the sum of the errors
+over time increases.  This pushes us back the direction we want to
+go.  When the system stabilizes out, we find that the integral
+component precisely offsets the error introduced by the proportional
+control.
+
+The concepts are simple and the code to implement this is simple.  I
+am still amazed at how such a simple arrangement can so effectively
+control a system.
+
+
+\section{Controlling Rate of Climb}
+
+Before we try to maintain a specific altitude, we need to be able to
+control our rate of climb.  Our PID controller does this through the
+use of proportional and integral components.  We do not know in
+advance what elevator position will establish the desired rate of
+climb.  In fact the precise elevator position could vary as external
+forces in our system change such as atmospheric density, throttle
+settings, aircraft weight, etc.  Because an elevator position of zero
+will most likely not yield a zero rate of climb, we will need to add
+in a measure of integral control to offset the error introduced by the
+proportional control.
+
+The input to our PID controller will be the difference (or error)
+between our current rate of climb and our target rate of climb.  The
+output will be the position of the elevator needed to drive us towards
+the target rate of climb.
+
+The proportional component simply sets the elevator position in direct
+proportion to our error.
+\[ \mathbf{prop} = K \cdot \mathbf{error} \]
+
+The integral component sets the elevator position based on the sum of
+these errors over time.  For a time, $t$
+\[ \mathbf{integral} = K \cdot \int_{0}^{t} { \mathbf{error} \cdot \delta t } \]
+
+I do nothing with the derivative component so it is always zero and
+can be ignored.
+
+The output variable is just a combination of the proportional and
+integral components.  $w_{\mathit{prop}}$ and $w_{\mathit{int}}$ are
+weighting values.  This allows you to control the contribution of each
+component to your final output variable.  In this case I found that
+$w_{\mathit{prop}} = 0.9$ and $w_{\mathit{int}} = 0.1$ seemed to work
+quite well.  Too much integral control and your system won't
+stabilize.  Too little integral control and your system takes
+excessively long to stabilize.
+\[
+\mathbf{output} = w_{\mathit{prop}} \cdot \mathbf{prop} +
+                     w_{\mathit{int}} \cdot \mathbf{int}
+\]
+
+We are trying to control rate of climb with elevator position, so the
+output of the above formula is our elevator position.  Using this
+formula to set a new elevator position each iteration quickly drives
+our climb rate to the desired value.
+
+
+\section{Controlling Altitude}
+
+Now that we have our rate of climb under control, it is a simple
+matter to leverage this ability to control our absolute altitude.
+
+The input to our altitude PID controller is the difference (error)
+between our current altitude and our goal altitude.  The output is the
+rate of climb needed to drive our altitude error to zero.
+
+Clearly, our climb rate will be zero when we stabilize on the target
+altitude.  Because our output variable will be zero when our error is
+zero, we can get by with only a proportional control component.
+
+All we need to do is calculate a desired rate of climb that is
+proportional to how far away we are from the target altitude.  This is
+a simple proportional altitude controller that sits on top of our
+slightly more complicated rate of climb controller.
+
+\[
+\mathbf{target\_climb\_rate} = K \cdot ( \mathbf{target\_altitude} - 
+       \mathbf{current\_altitude} )
+\]
+
+Thus we use the difference in altitude to determine a climb rate and
+we use the desired climb rate to determine elevator position.
+
+
+\section{Parameter Tuning}
+
+I've explained the basics, but there is one more thing that is
+important to mention.  None of the above theory and math is going to
+do you a bit of good for controlling your system if all your
+parameters are out of whack.  In fact, parameter tuning is often the
+trickiest part of the whole process.  Expect to spend a good chunk of
+your time tweaking function parameters to fine tune the behavior and
+effectiveness of your controller.
+
+
+\end{document}
+
+
+%------------------------------------------------------------------------
+% $Log$
+% Revision 1.1  1999/03/09 19:09:41  curt
+% Initial revision.
+%
diff --git a/Autopilot/HeadingHold.fig b/Autopilot/HeadingHold.fig
new file mode 100644 (file)
index 0000000..ae3a7c4
--- /dev/null
@@ -0,0 +1,26 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 1800 1800 7425 4125
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+        2400 2775 7200 2775
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+        4800 1875 4800 3675
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
+        2400 3375 4350 3375 5250 2175 7200 2175
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+        2400 2775 2400 2925
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+        7200 2775 7200 2925
+4 0 0 0 0 0 14 0.0000 4 150 450 2100 3150 -180\001
+4 0 0 0 0 0 14 0.0000 4 150 315 7050 3150 180\001
+4 0 0 0 0 0 14 0.0000 4 150 105 4875 3150 0\001
+4 0 0 0 0 0 12 1.5708 4 180 1485 1950 3450 Y axist: Target Roll\001
+4 0 0 0 0 0 12 0.0000 4 180 1890 3975 4050 X axis: Relative Heading\001
+-6
diff --git a/Autopilot/HeadingHold.tex b/Autopilot/HeadingHold.tex
new file mode 100644 (file)
index 0000000..ae08b07
--- /dev/null
@@ -0,0 +1,107 @@
+%
+% `HeadingHold.tex' -- describes the FGFS Heading Hold
+%
+%  Written by Jeff Goeke-Smith
+%
+% $Id$
+%------------------------------------------------------------------------
+
+
+\documentclass[12pt]{article}
+
+\usepackage{anysize}
+\papersize{11in}{8.5in}
+\marginsize{1in}{1in}{1in}{1in}
+
+\usepackage{amsmath}
+
+\usepackage{epsfig}
+
+\usepackage{setspace}
+\onehalfspacing
+
+\usepackage{url}
+
+
+\begin{document}
+
+
+\title{
+  Flight Gear Autopilot: \\
+  Heading Hold Module
+}
+
+
+\author{
+    Jeff Goeke-Smith \\ 
+    (\texttt{jgoeke@voyager.net})
+}
+
+
+\maketitle
+
+\section{Heading Hold}
+
+The first autopilot system implemented was a heading hold system. The
+entire point of the system was to hold a single heading by using the
+ailerons only.  Currently the system does not use the rudder for
+heading or side slip control.  The system of determining how to
+control the ailerons is a fuzzy logic system ( at least according to
+the book I borrowed from the local library) .
+
+The first stage of the autopilot system determines the relative
+heading by comparing the current heading to the target heading.  This
+step allows me to determine what direction I should turn.
+
+
+\begin{figure}[hbt]
+  \centerline{                   
+      \psfig{file=HeadingHold.eps}
+  }
+  \caption{Relative heading vs. target roll}
+  \label{fig:headinghold}
+\end{figure}
+
+
+The next step determines how far I should be rolled and in what
+direction.  By luck, or maybe by design, If I want to move to a
+negative relative heading, I need to have a negative roll. And by even
+more luck, To roll in a negative direction, I need to add negative
+aileron.  Figure \ref{fig:headinghold} shows how I determine how far I
+should be rolled.  The x-axis represents the relative heading.  The
+y-axis represents the Target Roll.  The specific values where the
+graph changes slope is determined by a series of variables in the
+Autopilot Structure.
+
+
+%                            ___________________________
+%                           /
+%                          /
+%0- - - - - - - - - - - - / - - - - - - - - - - - -
+%                        /
+%_______________________/
+%|                        |                            |
+%-180                     0                           180
+
+
+Now that the we know how far the aircraft should be rolled, we now
+determine the Relative roll. This being the current roll compared to
+the target roll.  Now that we know how far we need to roll, we employ
+a near identical copy of the above routine to determine where the
+aileron should be by using the x-axis to represent the relative roll
+and the y-axis being the aileron setting.  The system then sets the
+aileron to that setting and finishes the procedure.
+
+If anyone who reads this is interested in more information on how I
+built this system, feel free to e-mail me at
+\texttt{jgoeke@voyager.net} or read the code yourself.
+
+
+\end{document}
+
+
+%------------------------------------------------------------------------
+% $Log$
+% Revision 1.1  1999/03/09 19:09:41  curt
+% Initial revision.
+%
diff --git a/FDM/airspeed.txt b/FDM/airspeed.txt
new file mode 100644 (file)
index 0000000..4645ec9
--- /dev/null
@@ -0,0 +1,69 @@
+From: AJBrent@aol.com
+To: x-plane@me.umn.edu
+Subject: Airspeed Refresher Training
+Date: Fri, 19 Sep 1997 03:28:53 -0400 (EDT)
+
+Excerpts from the book:  An Invitation to Fly--Basics for the Private Pilot.
+
+The airspeed indicator registers the total pressure from the pitot head and
+subtracts from it the static pressure supplied from the static ports.  This
+remainder is called dynamic pressure, which is the measure of the airplane's
+forward speed.  This speed is displayed on the instrument's face on a
+graduated scale called indicated airspeed (IAS).  Remember that this value
+represents the airplane's speed through the air, not necessarily it's speed
+across the ground.  Why?  Once it is airborne, the airplane becomes part of
+the local mass of air.  If the mass of air is moving (that is, if the wind is
+blowing), the airplane will move with the air.  While this is an important
+consideration during takeoffs and landings (when the airplane is making the
+transition between flight and ground operations) and for navigation (the
+moving airmass can carry the plane off course, like a ship in ocean
+currents), it means very little to the pilot in terms of normal flight
+dynamics.  The airplane flies because of the speed of the relative wind, and
+this is what the airspeed indicator measures, not ground speed.
+
+Types of Airspeed:
+--Indicated Airspeed.  This is the direct reading of airspeed taken from the
+face of the instrument, uncorrected for air density, positional errors due to
+the pitot head installation, or internal instrument error.
+--Calibrated Airspeed (CAS) is the indicated airspeed corrected for minor
+installation and pitot head position error and mechanical losses within the
+instrument itself.  The manufacturer or instrument repair shop provides these
+values on a cockpit reference card or in the Pilot's Operating Handbook.
+[In X-Plane, I assume we are provided a perfect airspeed instrument so that
+IAS and CAS are the same.  CAS is not simulated.]
+--Equivalent Airspeed is calibrated airspeed corrected for the
+compressibility effects of high-speed flight.  Normally this is not relevant
+to private pilot flight planning.  [And is not simulated in X-Plane as of
+ver. 3.4.  Equivalent airspeed is also the same as IAS in X-Plane.]
+--True Airspeed is equivalent airspeed (or calibrated airspeed if
+compressibility effects are negligible) [IAS in X-Plane] corrected for the
+effects of less dense air at higher altitudes.  For most light airplanes,
+true airspeed and calibrated airspeed are very close at sea level, but they
+can diverge rapidly after the airplane climbs several thousand feet.  Since
+true airspeed reflects the actual physical rate at which the aircraft is
+moving through the air, it is of key importance in air navigation.
+
+You can easily recall the sequence of airspeed corrections leading to true
+airspeed by memorizing the acronym ICE-T, the first letters of the four
+airspeeds presented above.  [Indicated, calibrated, and equivalent airspeeds
+are all the same in X-Plane.  So, it's just IT.]  Equivalent airspeed is
+important only on high-performance, turbine-powered airplanes.  True
+airspeed, however, must be determined before wind correction angle or ground
+speed can be computed for any airplane.  To make quick, accurate computations
+of wind correction angle, time, distance, ground speed, and true airspeed,
+you will need either a flight computer, a kind of circular slide rule, or an
+electronic flight calculator, a pocket calculator constructed with special
+keys and reference programs for air navigation problems.  To determine true
+airspeed using the flight computer, you must know the following:  pressure
+altitude, which may be read from the altimeter in flight with 29.92 set in
+the Kollsman window; temerature in degrees Celsius, which may be read in
+flight from the OAT gauge [must be converted from Fahrenheit in X-Plane]; and
+indicated airspeed, which may be read from the airspeed indicator in flight.
+-------
+I've tried it on X-Plane using a circular, slide-rule type flight computer
+while flying a Beech B99 and the F-86 at various speeds and altitudes; and it
+works!  My calculated TAS matched X-Plane's displayed TAS to within 2 knots
+every time.
+
+Andy Schroeder
+ajbrent@aol.com
diff --git a/LaRCsim/LaRCsim-notes.tex b/LaRCsim/LaRCsim-notes.tex
new file mode 100644 (file)
index 0000000..b043dcb
--- /dev/null
@@ -0,0 +1,99 @@
+\documentclass[12pt,titlepage]{article}
+
+\usepackage{anysize}
+\papersize{11in}{8.5in}
+\marginsize{1in}{1in}{1in}{1in}
+
+
+\begin{document}
+
+Here is my attempt to organize descriptions of the various LaRCsim
+files required to implement the equations of flight.  99\% of the
+following text is copied straight out of email from Bruce, source code
+comments, or the LaRCsim manual.
+
+\section{Core LaRCsim Header Files}
+
+\begin{description}
+  \item[ls\_generic.h:]1 LaRCSim generic parameters header file.  Defines
+    the ``GENERIC'' structure which holds the current value of the
+    flight model parameters and states.
+
+  \item[ls\_types.h:] LaRCSim type definitions header file.  Defines
+    the following types: SCALAR, VECTOR\_3, and DATA.
+
+  \item[ls\_constants.h:] LaRCSim constants definition header file.
+    Defines various constants and various units conversions.
+    
+  \item[ls\_sim\_control.h:] LaRCSim simulation control parameters
+    header file
+\end{description}
+
+
+\section{Core LaRCsim Routines}
+
+The following share the ls\_generic.h, ls\_types.h, and ls\_constants.h
+header files.
+
+\begin{description}
+  \item[ls\_accel.c:] ls\_accel() sums the forces and moments from aero,
+    engine, gear, transfer them to the center of gravity, and calculate
+    resulting accelerations.
+    
+  \item[ls\_step.c:] ls\_step() Integration routine for equations of
+    motion (vehicle states.)  Integrates accels $\rightarrow$
+    velocities and velocities $\rightarrow$ positions.
+    
+  \item[ls\_aux.c:] ls\_aux() Takes the new state information
+    (velocities and positions) and calculates other information, like
+    Mach, pressures \& temps, alpha, beta, etc. for the new state. It
+    does this by calling atmos\_62() ls\_geodesy() and ls\_gravity().
+
+  \item[atmos\_62.c] atmos\_62() 1962 standard atmosphere table lookups.
+    
+  \item[ls\_geodesy.c] ls\_geoc\_to\_geod(lat\_geoc, radius, lat\_geod, alt,
+    sea\_level\_r) ls\_geod\_to\_geoc(lat\_geod, alt, sl\_radius, lat\_geoc)
+    since vehicle position is in geocentric lat/lon/radius, this
+    routine calculates geodetic positions lat/lon/alt ls\_gravity -
+    calculates local gravity, based on latitude \& altitude.
+    
+  \item[ls\_gravity:] ls\_gravity( SCALAR radius, SCALAR lat, SCALAR
+    *gravity ) Gravity model for LaRCsim.
+\end{description}
+
+
+\section{Secondary LaRCsim Routines}
+
+The following routines help manage the simulation
+
+\begin{description}
+  \item[ls\_model.c:] ls\_model() Model loop executive.  Calls the user
+    supplied routines: inertias(), subsystems(), engine(), aero(), and
+    gear().
+    
+  \item[default_model_routines.c:] Provides stub routines for the
+    routines that are normally provided by the user. 
+\end{description}
+
+
+\section{Navion Specific Routines}
+
+\begin{description}
+  \item[ls\_cockpit.h:] Header for cockpit IO.  Stores the current
+    state of all the control inputs.
+    
+  \item[navion\_aero.c:] aero() Linear aerodynamics model.  Initializes
+    all the specific parameters if not initialized.  The expected
+    outputs from aero() are the aerodynamic forces and moments about
+    the reference point, in lbs and ft-lbs, respectively, being stored
+    in the F\_aero\_v and M\_aero\_v vectors.
+    
+  \item[navion\_engine.c:] engine() Calculate the forces generated by
+    the engine.
+    
+  \item[navion\_gear.c:] gear() Landing gear model for example simulation.
+    
+  \item[navion\_init.c:] model\_init() Initializes navion math model
+\end{description}
+
+\end{document}
\ No newline at end of file
diff --git a/LaRCsim/LaRCsim-vars.tex b/LaRCsim/LaRCsim-vars.tex
new file mode 100644 (file)
index 0000000..93de9cc
--- /dev/null
@@ -0,0 +1,375 @@
+\documentclass[10pt]{article}
+
+\usepackage{anysize}
+\papersize{11in}{8.5in}
+\marginsize{0.5in}{0.5in}{0.5in}{0.5in}
+
+
+\begin{document}
+
+\section{Constants}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+PI & Ratio of circumference to diameter of a circle & Macro definition
+& always positive & 3.141593 \\
+EQUATORIAL\_RADIUS & Radius of the Earth at the equator & Macro definition & always positive & ft \\
+RESQ & Square of radius of the Earth at the equator & Macro definition & always positive & $ft^2$ \\
+FP & Flattening parameter of oblate Earth & Macro definition & always positive & 0.003353 \\
+INVG & Inverse of sea level acceleration due to gravity & Macro definition & always positive & $sec^2/ft$ \\
+OMEGA\_EARTH & Angular rotation velocity of the Earth & Macro definition & always positive & rad/sec \\
+DEG\_TO\_RAD & "Conversion factor, degrees to radians" & Macro definition & always positive & deg/rad \\
+RAD\_TO\_DEG & "Conversion factor, radians to degrees" & Macro definition & always positive & rad/deg \\
+SEA\_LEVEL\_DENSITY & Atmospheric density at sea level at equator &
+Macro definition & always positive & $slug/ft^3$ \\
+\hline
+\end{tabular}
+
+\section{Variables}
+
+\subsection{Time}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+Simtime & Simulated time since beginning of current run &  &  & sec \\
+\hline
+\end{tabular}
+
+\subsection{Mass properties and geometry values}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+Mass & Mass of simulated vehicle & Scalar & always positive & slugs \\
+I\_xx & Moment of inertia about X-body axis & Scalar & always positive & $slug-ft^2$ \\
+I\_yy & Moment of inertia about Y-body axis & Scalar & always positive & $slug-ft^2$ \\
+I\_zz & Moment of inertia about Y-body axis & Scalar & always positive & $slug-ft^2$ \\
+I\_xz & Second moment of inertia in X-Z plane & Scalar & +Integral(x z dm) & $slug-ft^2$ \\
+\hline
+D\_pilot\_rp\_body\_v[3] & Pilot offset from ref pt in body axis & 3-element array &          - - & ft \\
+Dx\_pilot & Pilot offset from ref pt in X body axis & Scalar & forward & ft \\
+Dy\_pilot & Pilot offset from ref pt in X body axis & Scalar & right & ft \\
+Dz\_pilot & Pilot offset from ref pt in X body axis & Scalar & down & ft \\
+\hline
+D\_cg\_rp\_body\_v[3] & Center of Gravity offset from ref pt in body axis & 3-element array &          - - & ft \\
+Dx\_cg & C.G. offset from ref pt in X body axis & Scalar & forward & ft \\
+Dy\_cg & C.G. offset from ref pt in Y body axis & Scalar & right & ft \\
+Dz\_cg & C.G. offset from ref pt in Z body axis & Scalar & down & ft \\
+\hline
+\end{tabular}
+
+\subsection{Forces}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+F\_body\_total\_v[3] & Total forces on body at ref pt in body axis & 3-element array &          - - & ft \\
+F\_X & Force along X-body axis at ref pt & Scalar & forward & ft \\
+F\_Y & Force along Y-body axis at ref pt & Scalar & right & ft \\
+F\_z & Force along Z-body axis at ref pt & Scalar & down & ft \\
+\hline
+F\_local\_total\_v[3] & Total forces on body at ref pt in local axis & 3-element array &          - - & lbf \\
+F\_north & Northward force at ref pt & Scalar & north & lbf \\
+F\_east & Eastward force at ref pt & Scalar & east & lbf \\
+F\_down & Southward force at ref pt & Scalar & down & lbf \\
+\hline
+F\_aero\_v[3] & Aerodynamic forces on body at ref pt in body axis & 3-element array &          - - & lbf \\
+F\_X\_aero & Aero force along X-body axis at ref pt & Scalar & forward & lbf \\
+F\_Y\_aero & Aero force along Y-body axis at ref pt & Scalar & right & lbf \\
+F\_Z\_aero & Aero force along Z-body axis at ref pt & Scalar & down & lbf \\
+\hline
+F\_engine\_v[3] & Engine forces on body at ref pt in body axis & 3-element array &          - - & lbf \\
+F\_X\_engine & Engine force along X-body axis at ref pt & Scalar & forward & lbf \\
+F\_Y\_engine & Engine force along Y-body axis at ref pt & Scalar & right & lbf \\
+F\_Z\_engine & Engine force along Z-body axis at ref pt & Scalar & down & lbf \\
+\hline
+F\_gear\_v[3] & Landing gear forces on body at ref pt in body axis & 3-element array &          - - & lbf \\
+F\_X\_gear & Gear force along X-body axis at ref pt & Scalar & forward & lbf \\
+F\_Y\_gear & Gear force along Y-body axis at ref pt & Scalar & right & lbf \\
+F\_Z\_gear & Gear force along Z-body axis at ref pt & Scalar & down & lbf \\
+\hline
+\end{tabular}
+
+\subsection{Moments}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+M\_total\_rp\_v[3] & Total moments on body at ref pt measured around body axes & 3-element array &          - - & ft-lb \\
+M\_l\_rp & Total moments on body at ref pt about X-body axis & Scalar & right wing down & ft-lb \\
+M\_m\_rp & Total moments on body at ref pt about Y-body axis & Scalar & Nose up & ft-lb \\
+M\_n\_rp & Total moments on body at ref pt about Z-body axis & Scalar & Nose left & ft-lb \\
+\hline
+M\_total\_cg\_v[3] & Total moments on body at ref pt measured around body axes & 3-element array &          - - & ft-lb \\
+M\_l\_cg & Total moments on body at ref pt about X-body axis & Scalar & right wing down & ft-lb \\
+M\_m\_cg & Total moments on body at ref pt about Y-body axis & Scalar & Nose up & ft-lb \\
+M\_n\_cg & Total moments on body at ref pt about Z-body axis & Scalar & Nose left & ft-lb \\
+\hline
+M\_aero\_v[3] & Aerodynamic moments on body at ref pt measured around body axes & 3-element array &          - - & ft-lb \\
+M\_l\_aero & Aerodynamic moments on body at ref pt about X-body axis & Scalar & right wing down & ft-lb \\
+M\_m\_aero & Aerodynamic moments on body at ref pt about Y-body axis & Scalar & Nose up & ft-lb \\
+M\_n\_aero & Aerodynamic moments on body at ref pt about Z-body axis & Scalar & Nose left & ft-lb \\
+\hline
+M\_engine\_v[3] & Propulsion system moments on body at ref pt measured around body axes & 3-element array &          - - & ft-lb \\
+M\_l\_engine & Propulsion system moments on body at ref pt about X-body axis & Scalar & right wing down & ft-lb \\
+M\_m\_engine & Propulsion system moments on body at ref pt about Y-body axis & Scalar & Nose up & ft-lb \\
+M\_n\_engine & Propulsion system moments on body at ref pt about Z-body axis & Scalar & Nose left & ft-lb \\
+\hline
+M\_gear\_v[3] & Landing gear moments on body at ref pt measured around body axes & 3-element array &          - - & ft-lb \\
+M\_l\_gear & Landing gear moments on body at ref pt about X-body axis & Scalar & right wing down & ft-lb \\
+M\_m\_gear & Landing gear moments on body at ref pt about Y-body axis & Scalar & Nose up & ft-lb \\
+M\_n\_gear & Landing gear moments on body at ref pt about Z-body axis & Scalar & Nose left & ft-lb \\
+\hline
+\end{tabular}
+
+\subsection{Accelerations}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+V\_dot\_local\_v[3] & Inertial acceleration of center of gravity measured in local axes & 3-element array &          - - & $ft/sec^2$ \\
+V\_dot\_north & Inertial acceleration of center of gravity measured in local North axis & Scalar & north & $ft/sec^2$ \\
+V\_dot\_east & Inertial acceleration of center of gravity measured in local East axis & Scalar & east & $ft/sec^2$ \\
+V\_dot\_down & Inertial acceleration of center of gravity measured in local down axis & Scalar & down & $ft/sec^2$ \\
+\hline
+V\_dot\_body\_v[3] & Inertial acceleration of ?? measured in body axes & 3-element array &          - - & $ft/sec^2$ \\
+U\_dot\_body & Inertial acceleration of ?? measured in body X axis & Scalar & forward & $ft/sec^2$ \\
+V\_dot\_body & Inertial acceleration of ?? measured in body Y axis & Scalar & right & $ft/sec^2$ \\
+W\_dot\_body & Inertial acceleration of ?? measured in body Z axis & Scalar & down & $ft/sec^2$ \\
+\hline
+A\_cg\_body\_v[3] & Inertial acceleration of center of gravity measured in body axes & 3-element array &          - - & $ft/sec^2$ \\
+A\_X\_cg & Inertial acceleration of center of gravity measured in body X axis & Scalar & forward & $ft/sec^2$ \\
+A\_Y\_cg & Inertial acceleration of center of gravity measured in body Y axis & Scalar & right & $ft/sec^2$ \\
+A\_Z\_cg & Inertial acceleration of center of gravity measured in body Z axis & Scalar & down & $ft/sec^2$ \\
+\hline
+A\_pilot\_body\_v[3] & Inertial acceleration of pilot station measured in body axes & 3-element array &          - - & $ft/sec^2$ \\
+A\_X\_pilot & Inertial acceleration of pilot station measured in body X axis & Scalar & forward & $ft/sec^2$ \\
+A\_Y\_pilot & Inertial acceleration of pilot station measured in body Y axis & Scalar & right & $ft/sec^2$ \\
+A\_Z\_pilot & Inertial acceleration of pilot station measured in body Z axis & Scalar & down & $ft/sec^2$ \\
+\hline
+N\_cg\_body\_v[3] & Inertial acceleration of center of gravity measured in body axes & 3-element array &          - - & g units \\
+N\_X\_cg & Inertial acceleration of center of gravity measured in body X axis & Scalar & forward & g units \\
+N\_Y\_cg & Inertial acceleration of center of gravity measured in body Y axis & Scalar & right & g units \\
+N\_Z\_cg & Inertial acceleration of center of gravity measured in body Z axis & Scalar & down & g units \\
+\hline
+N\_pilot\_body\_v[3] & Inertial acceleration of pilot station measured in body axes & 3-element array &          - - & g units \\
+N\_X\_pilot & Inertial acceleration of pilot station measured in body X axis & Scalar & forward & g units \\
+N\_Y\_pilot & Inertial acceleration of pilot station measured in body Y axis & Scalar & right & g units \\
+N\_Z\_pilot & Inertial acceleration of pilot station measured in body Z axis & Scalar & down & g units \\
+\hline
+\end{tabular}
+
+\subsection{Accelerations (Cont.)}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+Omega\_dot\_body\_v[3] & Angular acceleration of vehicle relative to local frame about center of gravity in body axes & 3-element array &          - - & $rad/s^2$ \\
+P\_dot\_body & Angular acceleration of vehicle relative to local frame about center of gravity in X body axis & Scalar & rt wing down & $rad/s^2$ \\
+Q\_dot\_body & Angular acceleration of vehicle relative to local frame about center of gravity in Y body axis & Scalar & nose up & $rad/s^2$ \\
+R\_dot\_body & Angular acceleration of vehicle relative to local frame about center of gravity in Z body axis & Scalar & nose right & $rad/s^2$ \\
+\hline
+\end{tabular}
+
+\subsection{Velocities}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+V\_local\_v[3] & Inertial velocity of center of gravity in local axes & 3-element array &          - - & ft/s \\
+V\_north & Inertial velocity of center of gravity in local North axis & Scalar & north & ft/s \\
+V\_east & Inertial velocity of center of gravity in local East axis & Scalar & east & ft/s \\
+V\_down & Inertial velocity of center of gravity in local down axis & Scalar & down & ft/s \\
+\hline
+V\_local\_rel\_ground\_v[3] & Velocity of center of gravity relative to earth surface in local axes & 3-element array &          - - & ft/s \\
+V\_north\_rel\_ground & Velocity of center of gravity relative to earth surface in local North axis & Scalar & north & ft/s \\
+V\_east\_rel\_ground & Velocity of center of gravity relative to earth surface in local east axis & Scalar & east & ft/s \\
+V\_down\_rel\_ground & Velocity of center of gravity relative to earth surface in local down axis & Scalar & down & ft/s \\
+\hline
+V\_local\_airmass\_v[3] & Inertial steady-state velocity of airmass in local axes & 3-element array &          - - & ft/s \\
+V\_north\_airmass & Inertial steady-state velocity of airmass in local North axis & Scalar & north & ft/s \\
+V\_east\_airmass & Inertial steady-state velocity of airmass in local East axis & Scalar & east & ft/s \\
+V\_down\_airmass & Inertial steady-state velocity of airmass in local down axis & Scalar & down & ft/s \\
+\hline
+V\_local\_rel\_airmass\_v[3] & Velocity of center of gravity relative to local airmass in local axes & 3-element array &          - - & ft/s \\
+V\_north\_rel\_airmass & Velocity of center of gravity relative to local airmass in local North axis & Scalar & north & ft/s \\
+V\_east\_rel\_airmass & Velocity of center of gravity relative to local airmass in local East axis & Scalar & east & ft/s \\
+V\_down\_rel\_airmass & Velocity of center of gravity relative to local airmass in local down axis & Scalar & down & ft/s \\
+\hline
+V\_body\_gust\_v[3] & Gust velocity in body axes & 3-element array &          - - & ft/s \\
+U\_gust & Gust velocity in X-body axes & Scalar & forward & ft/s \\
+V\_gust & Gust velocity in Y-body axes & Scalar & right & ft/s \\
+W\_gust & Gust velocity in Z-body axes & Scalar & down & ft/s \\
+\hline
+\end{tabular}
+
+\subsection{Velocities (Cont.)}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+V\_wind\_body\_v[3] & Velocity of center of gravity relative to local airmass in body axes & 3-element array &          - - & ft/s \\
+U\_body & Velocity of center of gravity relative to local airmass in X-body axis & Scalar & forward & ft/s \\
+V\_body & Velocity of center of gravity relative to local airmass in Y-body axis & Scalar & right & ft/s \\
+W\_body & Velocity of center of gravity relative to local airmass in Z-body axis & Scalar & down & ft/s \\
+\hline
+V\_rel\_wind & Velocity relative to airmass & Scalar & always positive & ft/s \\
+V\_true\_knots & True airspeed in knots & Scalar & always positive & nm/hr \\
+V\_rel\_ground & Velocity relative to earth's surface & Scalar & always positive & ft/s \\
+V\_inertial & Inertial velocity & Scalar & always positive & ft/s \\
+V\_ground\_speed & Velocity at right angles to local vertical & Scalar & always positive & ft/s \\
+V\_equiv & Equivalent airspeed & Scalar & always positive & ft/s \\
+V\_equiv\_kts & "Equivalent airspeed, knots" & Scalar & always positive & nm/hr \\
+V\_calibrated & Calibrated airspeed & Scalar & always positive & ft/s \\
+V\_calibrated\_kts & "Calibrated airspeed, knots" & Scalar & always positive & nm/hr \\
+\hline
+Omega\_body\_v[3] & Inertial rotational rate of the body axis frame & 3-element array &          - - & rad/s \\
+P\_body & Inertial rotational rate of the body X-axis & Scalar & rt wing down & rad/s \\
+Q\_body & Inertial rotational rate of the body Y-axis & Scalar & nose up & rad/s \\
+R\_body & Inertial rotational rate of the body Z-axis & Scalar & nose right & rad/s \\
+\hline
+Omega\_local\_v[3] & Inertial rotational rate of the local axis frame & 3-element array &          - - & rad/s \\
+P\_local & Inertial rotational rate of the local axis frame about the body X-axis & Scalar & rt wing down & rad/s \\
+Q\_local & Inertial rotational rate of the local axis frame about the body Y-axis & Scalar & nose up & rad/s \\
+R\_local & Inertial rotational rate of the local axis frame about the body Z-axis & Scalar & nose right & rad/s \\
+\hline
+\end{tabular}
+
+\subsection{Velocities (Cont.)}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+Omega\_total\_v[3] & Rotational rate of the body axis frame relative to the local axis frame & 3-element array &          - - & rad/s \\
+P\_total & Rotational rate of the body axis frame relative to the local axis frame about the body X-axis & Scalar & rt wing down & rad/s \\
+Q\_total & Rotational rate of the body axis frame relative to the local axis frame about the body Y-axis & Scalar & nose up & rad/s \\
+R\_total & Rotational rate of the body axis frame relative to the local axis frame about the body Z-axis & Scalar & nose right & rad/s \\
+\hline
+Euler\_rates\_v[3] & "Rotational rate of the body axis frame relative to the local axis frame, in Euler angles" & 3-element array &          - - & rad/s \\
+Phi\_dot & Rotational rate of the body axis frame about the local X-axis & Scalar & rt wing down & rad/s \\
+Theta\_dot & Rotational rate of the body axis frame about the local Y-axis & Scalar & nose up & rad/s \\
+Psi\_dot & Rotational rate of the body axis frame about the local Z-axis & Scalar & nose right & rad/s \\
+\hline
+Geocentric\_rates\_v[3] & Rotational rate of the body axis frame relative to the inertial frame & 3-element array &          - - & - - \\
+Latitude\_dot & Rate of change of geocentric latitude angle & Scalar & westward & rad/s \\
+Longitude\_dot & Rate of change of geocentric longitude angle & Scalar & northward & rad/s \\
+Radius\_dot & Rate of change of radius from center of inertial frame & Scalar & outward & ft/s \\
+\hline
+\end{tabular}
+
+\subsection{Positions}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+Geocentric\_position\_v[3] & Geocentric position of vehicle's center of gravity & 3-element array &          - - & - - \\
+Lat\_geocentric  & Geocentric latitude of vehicle's center of gravity & Scalar & westward & rad \\
+Lon\_geocentric  & Geocentric longitude of vehicle's center of gravity & Scalar & northward & rad \\
+Radius\_to\_vehicle & Radius to vehicle's center of gravity from inertial frame & Scalar & outward & ft \\
+\hline
+Geodetic\_position\_v[3] & Geodetic position of vehicle's center of gravity & 3-element array &          - - & - - \\
+Latitude & Geodetic latitude of vehicle's center of gravity & Scalar & westward & rad \\
+Longitude & Geodetic longitude of vehicle's center of gravity & Scalar & northward & rad \\
+Altitude & Height of vehicle's center of gravity above reference ellipsoid & Scalar & outward & ft \\
+\hline
+Euler\_angles\_v[3] & Vehicle's angular attitude relative to local frame & 3-element array &          - - & rad \\
+Phi & Roll angle & Scalar & rt wing down & rad \\
+Theta & Pitch angle & Scalar & nose up & rad \\
+Psi & Heading angle & Scalar & nose right & rad \\
+\hline
+\end{tabular}
+
+\subsection{Miscellaneous Quantities}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+T\_local\_to\_body\_m[3][3] & Transformation matrix L to B & 3 by 3 matrix &          - - & - - \\
+T\_local\_to\_body\_11 & Transformation matrix element & Scalar &          - - & - - \\
+T\_local\_to\_body\_12 & Transformation matrix element & Scalar &          - - & - - \\
+T\_local\_to\_body\_13 & Transformation matrix element & Scalar &          - - & - - \\
+T\_local\_to\_body\_21 & Transformation matrix element & Scalar &          - - & - - \\
+T\_local\_to\_body\_22 & Transformation matrix element & Scalar &          - - & - - \\
+T\_local\_to\_body\_23 & Transformation matrix element & Scalar &          - - & - - \\
+T\_local\_to\_body\_31 & Transformation matrix element & Scalar &          - - & - - \\
+T\_local\_to\_body\_32 & Transformation matrix element & Scalar &          - - & - - \\
+T\_local\_to\_body\_33 & Transformation matrix element & Scalar &          - - & - - \\
+\hline
+Gravity & Acceleration due to earth's gravity & Scalar & down & $ft/s^2$ \\
+Centrifugal\_relief & Centrifugal acceleration due to near-orbital speed & Scalar & up & $ft/s^2$ \\
+\hline
+Alpha & Free-stream angle of attack & Scalar & nose up & rad \\
+Beta & Free-stream angle of sideslip & Scalar & nose left & rad \\
+Alpha\_dot & Time rate of change of free-stream angle of attack & Scalar & nose up & rad/s \\
+Beta\_dot & Time rate of change of free-stream angle of sideslip & Scalar & nose left & rad/s \\
+Cos\_alpha & Cosine of free-stream angle of attack & Scalar & nose up & - - \\
+Sin\_alpha & Sine of free-stream angle of attack & Scalar & nose up & - - \\
+Cos\_beta & Cosine of free-stream angle of sideslip & Scalar & nose left & - - \\
+Sin\_beta & Sine of free-stream angle of sideslip & Scalar & nose left & - - \\
+\hline
+Cos\_phi & Cosine of bank angle & Scalar & rt wing down & - - \\
+Sin\_phi & Sine of bank angle & Scalar & rt wing down & - - \\
+Cos\_theta & Cosine of pitch angle & Scalar & nose up & - - \\
+Sin\_theta & Sine of pitch angle & Scalar & nose up & - - \\
+Cos\_psi & Cosine of heading angle & Scalar & nose right & - - \\
+Sin\_psi & Sine of heading angle & Scalar & nose right & - - \\
+\hline
+Gamma\_vert\_rad & Vertical flight path angle in local frame & Scalar & climb & rad \\
+Gamma\_horiz\_rad & "Horizontal flight path, or track, angle in local frame" & Scalar & clockwise from north & rad \\
+\hline
+Sigma & Ratio of free-stream density to sea-level reference density & Scalar & always positive & - - \\
+Density & Atmospheric density (free-stream flight conditions) & Scalar & always positive & $slug/ft^3$ \\
+V\_sound & Speed of sound (free-stream flight conditions) & Scalar & always positive & ft/s \\
+Mach\_number & Free-stream mach number & Scalar & always positive & - - \\
+\hline
+Static\_pressure & Static pressure & Scalar & always positive & $lb/ft^2$ \\
+Total\_pressure & Total pressure & Scalar & always positive & $lb/ft^2$ \\
+Impact\_pressure & Impact pressure & Scalar & always positive & $lb/ft^2$ \\
+Dynamic\_pressure & Dynamic pressure & Scalar & always positive & $lb/ft^2$ \\
+\hline
+Static\_temperature & Static temperature & Scalar & always positive &
+$^{\circ}$R \\
+Total\_temperature & Total temperature & Scalar & always positive &
+$^{\circ}$R \\
+\hline
+\end{tabular}
+
+\subsection{Miscellaneous Quantities (Cont.)}
+
+\begin{tabular}{|l|p{2.0in}|p{1.0in}|p{1.0in}|l|} \hline
+\textbf{Variable Name} & \textbf{Variable Description} & \textbf{Data
+type} & \textbf{Sign convention} & \textbf{Units of Measure} \\ \hline 
+Sea\_level\_radius & Radius from earth center to local plumb sea level & Scalar & outward & ft \\
+Earth\_position\_angle & Amount of rotation of the earth since reference time & Scalar & from ref time & rad \\
+\hline
+Runway\_altitude & Height of runway threshold above local plumb sea level (geodetic) & Scalar & up & ft \\
+Runway\_latitude & Geodetic latitude of runway threshold & Scalar & northward & rad \\
+Runway\_longitude & Geodetic longitude of runway threshold & Scalar & westward & rad \\
+Runway\_heading & Runway heading & Scalar & clockwise from north & rad \\
+Radius\_to\_rwy & Radius from earth center to runway threshold point & Scalar & outward & ft \\
+\hline
+D\_cg\_rwy\_local\_v[3]; & Location of center of gravity relative to runway threshold in local frame & 3-element array &          - - & ft \\
+D\_cg\_north\_of\_rwy & Distance of center of gravity northward from runway threshold & Scalar & northward & ft \\
+D\_cg\_east\_of\_rwy & Distance of center of gravity eastward from runway threshold & Scalar & eastward & ft \\
+D\_cg\_above\_rwy & Height of center of gravity above runway threshold & Scalar & up & ft \\
+\hline
+D\_cg\_rwy\_rwy\_v[3] & Location of center of gravity relative to runway threshold in runway frame & 3-element array &          - - & ft \\
+X\_cg\_rwy & Distance of center of gravity along runway centerline & Scalar & beyond threshold & ft \\
+Y\_cg\_rwy & Distance of center of gravity right of runway centerline & Scalar & right of CL & ft \\
+H\_cg\_rwy & Height of center of gravity above runway threshold & Scalar & up & ft \\
+\hline
+D\_pilot\_rwy\_local\_v[3] & Location of pilot's eyepoint relative to runway threshold in local frame & 3-element array &          - - & ft \\
+D\_pilot\_north\_of\_rwy & Distance of pilot's eyepoint northward form runway threshold & Scalar & northward & ft \\
+D\_pilot\_east\_of\_rwy & Distance of pilot's eyepoint eastward from runway threshold & Scalar & eastward & ft \\
+D\_pilot\_above\_rwy & Height of pilot's eyepoint above runway threshold & Scalar & up & ft \\
+\hline
+D\_pilot\_rwy\_rwy\_v[3] & Location of pilot's eyepoint relative to runway threshold in runway frame & 3-element array &          - - & ft \\
+X\_pilot\_rwy & Distance of pilot's eyepoint along runway centerline & Scalar & beyond threshold & ft \\
+Y\_pilot\_rwy & Distance of pilot's eyepoint right of runway centerline & Scalar & right of CL & ft \\
+Z\_pilot\_rwy & Height of pilot's eyepoint above runway threshold & Scalar & up & ft \\
+\hline
+\end{tabular}
+
+\end{document}
diff --git a/LaRCsim/LaRCsim_generics_v_1.4.xls b/LaRCsim/LaRCsim_generics_v_1.4.xls
new file mode 100755 (executable)
index 0000000..14f1dfc
Binary files /dev/null and b/LaRCsim/LaRCsim_generics_v_1.4.xls differ
diff --git a/LaRCsim/manual.ps.gz b/LaRCsim/manual.ps.gz
new file mode 100644 (file)
index 0000000..1cc09b8
Binary files /dev/null and b/LaRCsim/manual.ps.gz differ
diff --git a/LaRCsim/manual.tex.gz b/LaRCsim/manual.tex.gz
new file mode 100644 (file)
index 0000000..94603b7
Binary files /dev/null and b/LaRCsim/manual.tex.gz differ
diff --git a/Portability/fgfs-portability-guide.lyx b/Portability/fgfs-portability-guide.lyx
new file mode 100644 (file)
index 0000000..f0999b5
--- /dev/null
@@ -0,0 +1,308 @@
+#This file was created by <root> Sat Dec  5 17:56:22 1998
+#LyX 0.12 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+\added_space_top vfill \added_space_bottom vfill 
+
+\emph on 
+FlightGear
+\emph default 
+ Flight Simulator
+\newline 
+Portability Guide
+\layout Author
+
+Bernie Bright (bbright@c031.aone.net.au)
+\layout Date
+
+28 November 1998
+\layout Standard
+
+FlightGear is a multi-platform general aviation flight simulator\SpecialChar \@.
+ It is an
+ open development project in which anyone with network access and a C++
+ compiler can contribute patches or new features.
+\newline 
+
+\layout Section
+
+Introduction
+\layout Standard
+
+The file 
+\emph on 
+Include/compiler.h
+\emph default 
+ attempts to capture the differences between C++ compiler and STL implementation
+s through the use of 
+\begin_inset Quotes eld
+\end_inset 
+
+feature test macros
+\begin_inset Quotes erd
+\end_inset 
+
+\SpecialChar \@.
+ The file is divided into two parts.
+ The first part contains a section for each compiler, consisting of manifest
+ constants specifying the features supported or absent from the particular
+ compiler/STL combination\SpecialChar \@.
+ The second part uses the feature test macros to
+ supply any missing features\SpecialChar \@.
+
+\layout Subsection
+
+Supported compilers (more to come)
+\layout Standard
+
+gcc 2.7.x
+\newline 
+gcc 2.8.x
+\newline 
+egcs 1.x
+\newline 
+Inprise (Borland) C++ 5.02
+\newline 
+Inprise (Borland) C++Builder 1 (5.20)
+\layout Subsection
+
+Features Tests
+\layout Subsubsection
+
+STL
+\layout Description
+
+FG_NEED_AUTO_PTR Some STL implementations don't supply an 
+\family typewriter 
+auto_ptr<>
+\family default 
+ class template.
+ Define this to provide one.
+\layout Description
+
+FG_NO_DEFAULT_TEMPLATE_ARGS Define this if the compiler doesn't support
+ default arguments in template declarations.
+\emph on 
+(example)
+\layout Description
+
+FG_INCOMPLETE_FUNCTIONAL Some STL implementations don't have 
+\family typewriter 
+mem_fun_ref()
+\family default 
+.
+ Define this to provide one.
+\layout Description
+
+FG_NO_ARROW_OPERATOR Define this if iterators don't support 
+\family typewriter 
+operator->()
+\family default 
+.
+\emph on 
+(example)
+\layout Description
+
+FG_EXPLICIT_FUNCTION_TMPL_ARGS
+\layout Description
+
+FG_MEMBER_TEMPLATES
+\layout Subsubsection
+
+Compiler
+\layout Description
+
+FG_NAMESPACES Define if compiler supports namespaces.
+\layout Description
+
+FG_HAVE_STD Define if std:: namespace supported.
+\layout Description
+
+FG_HAVE_STD_INCLUDES Define if headers should be included as 
+\family typewriter 
+<iostream>
+\family default 
+ instead of 
+\family typewriter 
+<iostream
+\family default 
+.h>.
+ Also implies that all ISO C++ standard include files are present.
+\layout Description
+
+FG_HAVE_STREAMBUF Define if 
+\family typewriter 
+<streambuf>
+\family default 
+ or 
+\family typewriter 
+<streambuf
+\family default 
+.h> are present.
+\layout Description
+
+FG_CLASS_PARTIAL_SPECIALIZATION
+\layout Description
+
+FG_NEED_EXPLICIT Define if the compiler doesn't support the 
+\family typewriter 
+\series bold 
+explicit
+\family default 
+\series default 
+ keyword.
+\layout Description
+
+FG_NEED_TYPENAME Define if the compiler doesn't support the 
+\family typewriter 
+\series bold 
+typename
+\family default 
+\series default 
+ keyword.
+\layout Description
+
+FG_NEED_MUTABLE Define if the compiler doesn't support the 
+\family typewriter 
+\series bold 
+mutable
+\family default 
+\series default 
+ keyword.
+\layout Description
+
+FG_NEED_BOOL Define if the compiler doesn't have the 
+\family typewriter 
+\series bold 
+bool
+\family default 
+\series default 
+ type.
+\layout Subsubsection
+
+Include Files
+\layout Standard
+
+This section deals with header file naming conventions.
+ Some systems truncate filenames, 8.3 being common, other systems use old
+ or non-standard names for some header files.
+ We deal with the simple cases by defining macros that expand to the appropriate
+ filename.
+\layout Description
+
+STD_ALGORITHM => <algorithm>, 
+\begin_inset Quotes eld
+\end_inset 
+
+algorithm
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout Description
+
+STD_FUNCTIONAL => <functional>, 
+\begin_inset Quotes eld
+\end_inset 
+
+functional
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout Description
+
+STD_IOMANIP => <iomanip>, <iomanip.h>
+\layout Description
+
+STD_IOSTREAM => <iostream>, <iostream.h>, <iostreams.h>
+\layout Description
+
+STD_STDEXCEPT => <stdexcept> (ignore this, FlightGear doesn't use exceptions)
+\layout Description
+
+STD_STRING => <string>
+\layout Description
+
+STD_STRSTREAM => <strstream>, <strstream.h>
+\layout Standard
+
+In use, instead of writing #include <iostream> you write #include STD_IOSTREAM.
+\newline 
+\newline 
+The situation becomes complicated with missing header files.
+ <streambuf> is a good example.
+ In this case we must rely on FG_HAVE_STD_INCLUDES and FG_HAVE_STREAMBUF.
+\newline 
+\emph on 
+
+\newline 
+TODO
+\layout Subsection
+
+and the rest
+\layout Subsubsection
+
+Namespace Issues
+\layout Description
+
+FG_USING_STD(X) 
+\layout Description
+
+FG_NAMESPACE(X) 
+\layout Description
+
+FG_NAMESPACE_END
+\layout Description
+
+FG_USING_NAMESPACE(X)
+\layout Subsubsection
+
+Templates
+\layout Description
+
+FG_NULL_TMPL_ARGS
+\layout Description
+
+FG_TEMPLATE_NULL
+\layout Bibliography
+\bibitem {1}
+
+Stroustrup, Bjarne, 
+\emph on 
+The C++ Programming Programming Language
+\emph default 
+, 3rd edition, June 1997, ISBN 0-201-88954-4
+\layout Bibliography
+\bibitem {2}
+
+SGI Standard Template Library (STL) release 3.11
+\the_end
diff --git a/Serial/nmeafaq.txt b/Serial/nmeafaq.txt
new file mode 100644 (file)
index 0000000..8d1eaeb
--- /dev/null
@@ -0,0 +1,635 @@
+One place to find this document is at:
+
+    ftp://sundae.triumf.ca/pub/peter/nmeafaq.txt
+
+---------------------------------------------------------------------------
+
+
+                                The NMEA FAQ
+                        Version 6.1  Sept. 15, 1997
+                            (NMEA URL updated)
+
+Additions, corrections, and comments should be emailed to the author,
+Peter Bennett  bennett@triumf.ca
+
+Contents:
+
+1.      What is NMEA?
+  1.1     What is an NMEA Standard
+  1.2     NMEA Address
+
+2.      Electrical Interface
+
+3.      NMEA-0180 and NMEA-0182
+  3.1     Simple Format
+  3.2     Complex Format
+
+4.      NMEA-0183
+  4.1     General Sentence Format
+  4.2     Sentences sent by specific equipment
+  4.3     Sample Sentences Dissected
+    4.3.1   Standard Sentences
+    4.3.2   Garmin Proprietary Sentences
+
+5.      RS-232 connections
+
+6.      Troubleshooting
+
+7.      About the author
+  7.1    Acknowledgements
+
+1.      What is NMEA?
+
+        The National Marine Electronics Association is dedicated to the
+        education and advancement of the marine electronics industry and
+        the market which it serves.
+
+        It is a non-profit association composed of manufacturers,
+        distributors, dealers, educational institutions, and others
+        interested in peripheral marine electronics occupations
+                        (quoted from a promo in "NMEA News")
+
+
+  1.1   What is an NMEA standard?
+
+        For the purposes of this article, an NMEA standard defines an
+        electrical interface and data protocol for communications
+        between marine instrumentation. (They may also have standards
+        for other things.)
+
+  1.2   NMEA Address
+
+        P.O. Box 3435
+        New Bern NC, 28564-3435
+        U.S.A.
+        Phone: 919-638-2626
+        Fax:  919-638-4885
+        email: nmea@coastalnet.com
+        web page: http://www4.coastalnet.com/nmea/default.html
+
+
+2.      Electrical Interface
+
+        These standards allow a single "talker", and several "listeners"
+        on one circuit.  The recommended interconnect wiring is a
+        shielded twisted pair, with the shield grounded only at the
+        talker.  The standards do not specify the use of any particular
+        connector.
+
+
+        The NMEA-0180 and 0182 standards say that the talker output may
+        be RS-232, or from a TTL buffer, capable of delivering 10 mA at
+        4 V.  A sample circuit shows an open collector TTL buffer with a
+        680 ohm resistor to +12 V, and a diode to prevent the output
+        voltage from rising above +5.7 V.
+
+        NMEA-0183 accepts this, but recommends that the talker output
+        comply with EIA-422.  This is a differential system, having two
+        signal lines, A and B. The voltages on the "A" line correspond
+        to those on the older TTL single wire, while the "B" voltages
+        are reversed (while "A" is at +5, "B" is at ground, and vice
+        versa)
+
+        In either case, the recommended receive circuit uses an
+        opto-isolator with suitable protection circuitry.  The input
+        should be isolated from the receiver's ground.
+
+        In practice, the single wire, or the EIA-422 "A" wire may be
+        directly connected to a computer's RS-232 input.
+
+
+
+3.      NMEA-0180 and NMEA 0182
+
+        NMEA-0180 and 0182 are very limited, and just deal with
+        communcations from a Loran-C (or other navigation receiver,
+        although the standards specifically mention Loran), and an
+        autopilot.
+
+        From the information I have, it appears that 0180 and 0182 are
+        identical.  I suspect that equipment claiming to use NMEA-0180
+        will use the "simple" format described below, while those using
+        NMEA-0182 will use the "complex" format. (but this is really
+        just a guess... corrections??)
+
+  3.1   "Simple" data format
+
+        The simple format consists of a single data byte transmitted at
+        intervals of 0.8 to 5 seconds, at 1200 baud with odd parity.
+        Bits 5 - 0 give the cross-track error in units of 0.1 uS or 0.01
+        nautical mile.  The error is given in offset binary, with a
+        count of 1 representing full scale right error, 32 (hex 20) for
+        on course, and 63 (hex 3f) full scale left error.  Bit 6 is a 1
+        if the data is valid, and bit 7 is 0 to indicate the simple
+        data format.
+
+  3.2   "Complex" data format
+
+        The complex format consists of a data block of 37 bytes of
+        (mostly) readable ASCII text giving cross-track error, bearing
+        to waypoint, present Lat/Long, and a binary status byte.  The
+        data block shall be sent at intervals of 2 to 8 sec. All bytes
+        in the complex format have bit 7 = 1 to distinguish them from
+        the simple format.  It is permissible for a sending device to
+        send both simple and complex data, and even to send a "simple"
+        data byte in the middle of a "complex" data block.
+
+        Byte        Data
+          1          $
+          2          M                  | device
+          3          P                  | address
+
+          4          K = kilometres     | cross track
+                     N = nautical miles | error
+                     U = microseconds   | units
+
+          5 - 8      0 - 9 or .          cross track error value
+          9          L or R              cross track error position
+
+         10          T or M              True or Magnetic bearing
+         11 - 13     0 - 9               bearing to next waypoint
+
+         14 - 23     12D34'56"N or       present latitude
+                     12D34.56'N
+         24 - 34     123D45'56"W or      present longitude
+                     123D45.67"W
+
+         35          non-ASCII status byte
+                     bit 0 = 1 for manual cycle lock
+                         1 = 1     low SNR
+                         2 = 1     cycle jump
+                         3 = 1     blink
+                         4 = 1     arrival alarm
+                         5 = 1     discontinuity of TDs
+                         6 = 1 always
+          36         "NUL" character (hex 80)(reserved status byte)
+          37         "ETX" character (hex 83)
+          Any unavailable data is filled with "NUL" bytes.
+
+
+4.      NMEA-0183
+  4.1     General Sentence Format
+
+        Under the NMEA-0183 standard, all characters used are printable
+        ASCII text (plus carriage return and line feed).  NMEA-0183 data
+        is sent at 4800 baud.
+
+        The data is transmitted in the form of "sentences".  Each
+        sentence starts with a "$", a two letter "talker ID", a three
+        letter "sentence ID", followed by a number of data fields
+        separated by commas, and terminated by an optional checksum, and
+        a carriage return/line feed.  A sentence may contain up to 82
+        characters including the "$" and CR/LF.
+
+        If data for a field is not available, the field is simply
+        omitted, but the commas that would delimit it are still sent,
+        with no space between them.
+
+        Since some fields are variable width, or may be omitted as
+        above, the receiver should locate desired data fields by
+        counting commas, rather than by character position within the
+        sentence.
+
+        The optional checksum field consists of a "*" and two hex digits
+        representing the exclusive OR of all characters between, but not
+        including, the "$" and "*".  A checksum is required on some
+        sentences.
+
+        The standard allows individual manufacturers to define
+        proprietary sentence formats.  These sentences start with "$P",
+        then a 3 letter manufacturer ID, followed by whatever data the
+        manufacturer wishes, following the general format of the
+        standard sentences.
+
+        Some common talker IDs are:
+                GP      Global Positioning System receiver
+                LC      Loran-C receiver
+                OM      Omega Navigation receiver
+                II      Integrated Instrumentation
+                                (eg. AutoHelm Seatalk system)
+
+  4.2   Sentences sent by specific equipment
+
+        This section lists the sentence types used by various equipment.
+        The format and data included in each sentence type is given in
+        section 4.3.
+
+         Eagle AccuNav
+             Standard: RMB, RMC, GLL, APB
+             Proprietary: PSLIB
+             It also pretends it's a Loran, sending LCGLL, as well as GPGLL
+
+        Garmin GPS-38, NMEA-0183 V. 1.5 mode
+            Standard: GLL, RMB, RMC, WPL, BOD, XTE, VTG, BWC
+            Proprietary: PGRMM (map datum), PGRMZ (altitude), PSLIB (dgps ctrl)
+
+        Garmin GPS-38, NMEA-0183 V. 2.0 mode
+            Standard: GLL, RMB, RMC, WPL, BOD, GSA, GSV, RTE, GGA
+            Proprietary: PGRME (estimated error), PGRMM, PGRMZ, PSLIB
+
+        Garmin GPS-45 (and probably GPS-40 and GPS-90)
+            Standard: BOD, GLL, RTE, RMB, RMC, GGA, GSA, GSV
+            Proprietary: PGRME, PGRMM, PGRMZ
+
+        Garmin GPS-65 (and probably GPS-75)
+            Standard: BWC, GLL, RMB, RMC, R00, WPL, XTE, VTG
+            Proprietary: PGRMM, PGRMZ, PSLIB
+
+        Magellan Trailblazer
+            Standard: APB, BWC, GGA, GLL, RMB, RMC, VTG
+        Trimble Ensign XL
+            Standard: APA, BWC, BWR, GGA, GLL, RMB
+
+        Trimble Flightmate Pro and Scoutmaster
+            Standard: APA, APB, BWC, GGA, GLL, GSA, GSV, RMB, RMC,
+                VTG, WCV, XTE, ZTC
+
+        Autohelm Seatalk
+            Autohelm Seatalk is a proprietary bus for communications
+            between various intruments.  Some of the instruments can act
+            as NMEA-0183 talkers or listeners.  Data received from an
+            external NMEA-0183 device will, if Seatalk understands the
+            sentence, be re-transmitted, but not necessarily in the same
+            sentence type.
+
+            The specific sentences sent will depend on the data
+            available on the Seatalk bus (i.e. sentences containing wind
+            speed and direction will only be sent if the system includes
+            a wind instrument)
+
+            Seatalk output:
+            Standard: APB, BPI, BWC, VWR, VHW, DBT, GLL, HDM, HDT, HCS,
+                MTW, VTG
+
+            Seatalk input:
+            Standard: APA, APB, RMB, XTE, XTR, BPI, BWR, BWC, BER,
+                BEC,WDR, WDC, BOD, WCV, VHW, VWR, DBT
+
+
+  4.3   Sample Sentences Dissected
+  4.3.1  Standard Sentences
+
+        A talker typically sends a group of sentences at intervals
+        determined by the unit's update rate, but generally not more
+        often than once per second.
+
+        Characters following the "*" are a checksum.  Checksums are
+        optional for most sentences, according to the standard.
+
+        APB - Autopilot format B
+        APB,A,A,0.10,R,N,V,V,011,M,DEST,011,M,011,M
+           A            Loran-C blink/SNR warning
+           A            Loran-C cycle warning
+           0.10         cross-track error distance
+           R            steer Right to correct (or L for Left)
+           N            cross-track error units - nautical miles
+           V            arrival alarm - circle
+           V            arrival alarm - perpendicular
+           011,M        magnetic bearing, origin to destination
+           DEST         destination waypoint ID
+           011,M        magnetic bearing, present position to destination
+           011,M        magnetic heading to steer
+                        (bearings could be given in True as 033,T)
+           (note: some pilots, Roberston in particular, misinterpret "bearing
+           from origin to destination" as "bearing from present position to
+           destination".  This apparently results in poor performance if the
+           boat is sufficiently off-course that the two bearings are
+           different.)
+
+        BOD - Bearing - origin to destination waypoint
+        BOD,045.,T,023.,M,DEST,START
+           045.,T       bearing 045 True from "START" to "DEST"
+           023.,M       breaing 023 Magnetic from "START" to "DEST"
+           DEST         destination waypoint ID
+           START        origin waypoint ID
+
+        BWC - Bearing and distance to waypoint - great circle
+        BWC,225444,4917.24,N,12309.57,W,051.9,T,031.6,M,001.3,N,004*29
+           225444       UTC time of fix 22:54:44
+           4917.24,N    Latitude of waypoint
+           12309.57,W   Longitude of waypoint
+           051.9,T      Bearing to waypoint, degrees true
+           031.6,M      Bearing to waypoint, degrees magnetic
+           001.3,N      Distance to waypoint, Nautical miles
+           004          Waypoint ID
+
+        BWR - Bearing and distance to waypoint - rhumb line
+                (format same as BWC)
+
+        DBT - Depth below transducer
+        DBT,0017.6,f,0005.4,M
+           0017.6,f     17.6 feet
+           0005.4,M     5.4 Metres
+
+        GGA - Global Positioning System Fix Data
+        GGA,123519,4807.038,N,01131.324,E,1,08,0.9,545.4,M,46.9,M, , *42
+           123519       Fix taken at 12:35:19 UTC
+           4807.038,N   Latitude 48 deg 07.038' N
+           01131.324,E  Longitude 11 deg 31.324' E
+           1            Fix quality: 0 = invalid
+                                     1 = GPS fix
+                                     2 = DGPS fix
+           08           Number of satellites being tracked
+           0.9          Horizontal dilution of position
+           545.4,M      Altitude, Metres, above mean sea level
+           46.9,M       Height of geoid (mean sea level) above WGS84
+                        ellipsoid
+           (empty field) time in seconds since last DGPS update
+           (empty field) DGPS station ID number
+
+        GLL - Geographic position, Latitude and Longitude
+        GLL,4916.45,N,12311.12,W,225444,A
+           4916.46,N    Latitude 49 deg. 16.45 min. North
+           12311.12,W   Longitude 123 deg. 11.12 min. West
+           225444       Fix taken at 22:54:44 UTC
+           A            Data valid
+             (Garmin 65 does not include time and status)
+
+        GSA - GPS DOP and active satellites
+        GSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39
+           A            Auto selection of 2D or 3D fix (M = manual)
+           3            3D fix
+           04,05...     PRNs of satellites used for fix (space for 12)
+           2.5          PDOP (dilution of precision)
+           1.3          Horizontal dilution of precision (HDOP)
+           2.1          Vertical dilution of precision (VDOP)
+             DOP is an indication of the effect of satellite geometry on
+             the accuracy of the fix.
+
+        GSV - Satellites in view
+        GSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75
+           2            Number of sentences for full data
+           1            sentence 1 of 2
+           08           Number of satellites in view
+           01           Satellite PRN number
+           40           Elevation, degrees
+           083          Azimuth, degrees
+           46           Signal strength - higher is better
+           <repeat for up to 4 satellites per sentence>
+                There my be up to three GSV sentences in a data packet
+
+        HDM - Heading, Magnetic
+        HDM,235.,M
+           HDM          Heading, Magnetic
+           235.,M       Heading 235 deg. Magnetic
+            (HDG, which includes deviation and variation, is recommended
+            instead)
+
+        HSC - Command heading to steer
+        HSC,258.,T,236.,M
+           258.,T       258 deg. True
+           236.,M       136 deg. Magnetic
+
+        MTW - Water temperature, Celcius
+        MTW,11.,C
+           11.,C        11 deg. C
+
+        R00 - List of waypoint IDs in currently active route
+        R00,MINST,CHATN,CHAT1,CHATW,CHATM,CHATE,003,004,005,006,007,,,*05
+           (This sentence is produced by a Garmin 65, but is not listed
+           in Version 2.0 of the standard.  The standard lists RTE for
+           this purpose.)
+
+        RMB - Recommended minimum navigation information (sent by nav.
+                receiver when a destination waypoint is active)
+        RMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*0B
+           A            Data status A = OK, V = warning
+           0.66,L       Cross-track error (nautical miles, 9.9 max.),
+                                steer Left to correct (or R = right)
+           003          Origin waypoint ID
+           004          Destination waypoint ID
+           4917.24,N    Destination waypoint latitude 49 deg. 17.24 min. N
+           12309.57,W   Destination waypoint longitude 123 deg. 09.57 min. W
+           001.3        Range to destination, nautical miles
+           052.5        True bearing to destination
+           000.5        Velocity towards destination, knots
+           V            Arrival alarm  A = arrived, V = not arrived
+           *0B          mandatory checksum
+
+        RMC - Recommended minimum specific GPS/Transit data
+        RMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68
+           225446       Time of fix 22:54:46 UTC
+           A            Navigation receiver warning A = OK, V = warning
+           4916.45,N    Latitude 49 deg. 16.45 min North
+           12311.12,W   Longitude 123 deg. 11.12 min West
+           000.5        Speed over ground, Knots
+           054.7        Course Made Good, True
+           191194       Date of fix  19 November 1994
+           020.3,E      Magnetic variation 20.3 deg East
+           *68          mandatory checksum
+
+        RTE - Waypoints in active route
+        RTE,2,1,c,0,W3IWI,DRIVWY,32CEDR,32-29,32BKLD,32-I95,32-US1,BW-32,BW-198*69
+           2            two sentences for full data
+           1            this is sentence 1 of 2
+           c            c = complete list of waypoints in this route
+                        w = first listed waypoint is start of current leg
+           0            Route identifier
+           W3IWI...     Waypoint identifiers
+
+        VHW - Water speed and heading
+        VHW,259.,T,237.,M,05.00,N,09.26,K
+           259.,T       Heading 259 deg. True
+           237.,M       Heading 237 deg. Magnetic
+           05.00,N      Speed 5 knots through the water
+           09.26,K      Speed 9.26 KPH
+
+        VWR - Relative wind direction and speed
+        VWR,148.,L,02.4,N,01.2,M,04.4,K
+           148.,L       Wind from 148 deg Left of bow
+           02.4,N       Speed 2.4 Knots
+           01.2,M       1.2 Metres/Sec
+           04.4,K       Speed 4.4 Kilometers/Hr
+
+        VTG - Track made good and ground speed
+        VTG,054.7,T,034.4,M,005.5,N,010.2,K
+           054.7,T      True track made good
+           034.4,M      Magnetic track made good
+           005.5,N      Ground speed, knots
+           010.2,K      Ground speed, Kilometers per hour
+
+        WCV - Waypoint Closure Velocity
+        WDC - Distance to Waypoint
+        WDR - Waypoint Distance, Rhumb Line
+
+        WPL - waypoint location
+        WPL,4917.16,N,12310.64,W,003*65
+           4917.16,N    Latitude of waypoint
+           12310.64,W   Longitude of waypoint
+           003          Waypoint ID
+             When a route is active, this sentence is sent once for each
+             waypoint in the route, in sequence. When all waypoints have
+             been reported, GPR00 is sent in the next data set. In any
+             group of sentences, only one WPL sentence, or an R00
+             sentence, will be sent.
+
+        XTE - Cross track error, measured
+        XTE,A,A,0.67,L,N
+           A            General warning flag V = warning
+                                (Loran-C Blink or SNR warning)
+           A            Not used for GPS (Loran-C cycle lock flag)
+           0.67         cross track error distance
+           L            Steer left to correct error (or R for right)
+           N            Distance units - Nautical miles
+
+        XTR - Cross-Track Error - Dead Reckoning
+        XTR,0.67,L,N
+           0.67         cross track error distance
+           L            Steer left to correct error (or R for right)
+           N            Distance units - Nautical miles
+
+
+4.3.2  Proprietary Sentences
+
+        The following are Garmin proprietary sentences.  "P" denotes
+        proprietary, "GRM" is Garmin's manufacturer code, and "M" or "Z"
+        indicates the specific sentence type.
+
+        $PGRME,15.0,M,45.0,M,25.0,M*22
+           15.0,M       Estimated horizontal position error in metres (HPE)
+           45.0,M       Estimated vertical error (VPE) in metres
+           25.0,M       Overall spherical equivalent position error
+
+        $PGRMZ,93,f,3*21
+           93,f         Altitude in feet
+           3            Position fix dimensions 2 = user altitude
+                                                3 = GPS altitude
+        This sentence shows in feet, regardless of units shown on the display.
+
+        $PGRMM,NAD27 Canada*2F
+           Currently active horizontal datum
+
+        Proprietary sentences to control a Starlink differential beacon
+        receiver. (I assume Garmin's DBR is made by Starlink)
+        $PSLIB,,,J*22
+        $PSLIB,,,K*23
+           These two sentences are normally sent together in each group
+           of sentences from the GPS.
+           The three fields are: Frequency, bit Rate, Request Type.  The
+           value in the third field may be:
+                J = status request
+                K = configuration request
+                blank = tuning message
+
+           When the GPS receiver is set to change the DBR frequency or
+           baud rate, the "J" sentence is replaced (just once) by (for
+           example): $PSLIB,320.0,200*59 to set the DBR to 320 KHz, 200
+           baud.
+    
+5.      RS-232 connections
+
+        Although this is not really related to NMEA, many people want to
+        connect a GPS to a computer, so need to know about the RS-232
+        serial ports on a computer.
+
+        The RS-232 standard defines two classes of devices that may
+        communicate using RS-232 serial data - Data Terminal Equipment
+        (DTE), and Data Communication Equipment (DCE).  Computers and
+        terminals are considered DTE, while modems are DCE.  The
+        standard defines pinouts for DTE and DCE such that a "straight
+        through" cable (pin 2 to pin 2, 3 to 3, etc) can be used between
+        a DTE and DCE.  To connect two DTEs together, you need a "null
+        modem" cable, that swaps pins between the two ends (eg. pin 2 to
+        3, 3 to 2).  Unfortunately, there is sometimes disagreement
+        whether a certain device is DTE or DCE, hence my standard RS-232
+        disclaimer:
+                if it doesn't work, swap pins 2 and 3!
+
+        The standard RS-232 connector is a 25 conductor DB-25, although
+        many PCs (and some other equipment) now use a 9 pin DE-9 (often
+        incorrectly called DB-9)
+
+        Serial Port Connections
+        Computer (DTE)                              Modem
+        DB-25   DE-9   Signal          Direction    DB-25
+          2      3    Tx Data             ->          2
+          3      2    Rx Data             <-          3
+          4      7    Request to send     ->          4
+          5      8    Clear to send       <-          5
+          6      6    Data Set Ready      <-          6
+          7      5    signal ground                   7
+          8      1    Data CarrierDetect  <-          8
+         20      4    Data Terminal Ready ->          20
+         22      9    Ring Indicator      <-          22
+
+        For NMEA-0183 interfacing, we are only concerned with Rx Data,
+        signal ground (and possibly Tx Data, if we want the computer to
+        talk to the GPS)
+
+        NMEA-0183 data is sent at 4800 baud.
+
+6.  Troubleshooting
+
+        First check that the talker (usually GPS or Loran) can send
+        NMEA-0183, and determine what sentences it sends.  Also, verify
+        that the listener understands NMEA-0183, and that it understands
+        the sentences the talker is sending.  In some cases the same
+        information may be sent in two or more different sentences.  If
+        the talker and listener don't both use the same sentences, there
+        will be no communication.  It may be possible to change the
+        sentences sent by the talker, to match those understood by the
+        listener.
+
+        Next, check that the talker is indeed set to send NMEA-0183
+        data.  Some talkers may have provision to send NMEA-0180 or
+        0182, or some proprietary format.
+
+        A computer, using any convenient terminal program (Telix,
+        Procomm, Windows Terminal, etc.) set to 4800 baud, can be used
+        to monitor the NMEA data, and confirm what sentences are sent,
+        and that the data is in the correct format.
+        Verify that the wiring is correct - that the talker data output
+        is connected to the listener data input, and that a signal
+        ground line is connected between the two pieces of equipment.
+
+        If you have multiple listeners connected to a single talker, you
+        may be overloading the talker port.  Try connecting only one
+        listener at a time.
+
+        On any NMEA-0183 circuit, there can _only_ be one talker.  If
+        you must have more than one talker, and one of the talker
+        devices can also act as a listener, you may be able to connect
+        things "in series", so a talker-only output is connected to a
+        listener/talker input, and the listener/talker output is
+        connected to other listeners.  However, some listener/talker
+        devices may reformat the data, or only pass data they
+        understand. (The Autohelm Seatalk system does this, and claims
+        the data as it's own, starting all output sentences with "$II".)
+
+        Particularly with older equipment, the equipment may claim to
+        comply with NMEA-0183, but in fact have an error in the data
+        format.  (My Kings 8001 Loran-C claims to send an APB sentence,
+        but gets some of the fields in the wrong order, so my autopilot
+        can't understand it.)  This sort of problem can be verified by
+        capturing the NMEA-0183 data on a computer, and comparing the
+        data formats with those given above.
+
+
+7.  About the author
+
+        This FAQ was written by:
+                Peter Bennett
+                bennett@triumf.ca
+
+        I have an FTP site containing this file, a GPS FAQ, and other
+        NMEA information files and PC programs for capturing and
+        displaying NMEA data, and related things:
+
+                ftp://sundae.triumf.ca/pub/peter/index.html
+        This site is mirrored in Germany at:
+        ftp://ftp-i2.informatik.rwth-aachen.de/pub/arnd/GPS/peter/index.html
+
+7.1  Acknowlegments
+
+        I would like to thank the following for their contributions
+         or corrections to this document:
+             Tom Clark, clark@tomcat.gsfc.nasa.gov
+             Bob Shearer, t.shearer@unixa.nerc-wallingford.ac.uk
+             David Steckler, davidst@nobeltec.com
+             Karl Olmstead, olmstead@ridgecrest.ca.us
+             Dave Wells, KD6TO, davew@cruzio.com
+             Mike Morrow, caveman@castles.com
+
+