--- /dev/null
+%
+% `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.
+%
--- /dev/null
+#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
--- /dev/null
+%
+% `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.
+%
--- /dev/null
+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
--- /dev/null
+\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
--- /dev/null
+\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}
--- /dev/null
+#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
--- /dev/null
+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
+
+