From: curt Date: Tue, 9 Mar 1999 19:09:41 +0000 (+0000) Subject: Initial revision. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=9c7a067f849f4592f17516d9144d5289a43a8954;p=flightgear.git Initial revision. --- diff --git a/Autopilot/AltitudeHold.tex b/Autopilot/AltitudeHold.tex new file mode 100644 index 000000000..c4dcd5f31 --- /dev/null +++ b/Autopilot/AltitudeHold.tex @@ -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 index 000000000..ae3a7c453 --- /dev/null +++ b/Autopilot/HeadingHold.fig @@ -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 index 000000000..ae08b0775 --- /dev/null +++ b/Autopilot/HeadingHold.tex @@ -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 index 000000000..4645ec932 --- /dev/null +++ b/FDM/airspeed.txt @@ -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 index 000000000..b043dcb89 --- /dev/null +++ b/LaRCsim/LaRCsim-notes.tex @@ -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 index 000000000..93de9cce9 --- /dev/null +++ b/LaRCsim/LaRCsim-vars.tex @@ -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 index 000000000..14f1dfc82 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 index 000000000..1cc09b8a2 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 index 000000000..94603b726 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 index 000000000..f0999b520 --- /dev/null +++ b/Portability/fgfs-portability-guide.lyx @@ -0,0 +1,308 @@ +#This file was created by 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 + +\family default + instead of +\family typewriter +. + Also implies that all ISO C++ standard include files are present. +\layout Description + +FG_HAVE_STREAMBUF Define if +\family typewriter + +\family default + or +\family typewriter + 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 => , +\begin_inset Quotes eld +\end_inset + +algorithm +\begin_inset Quotes erd +\end_inset + + +\layout Description + +STD_FUNCTIONAL => , +\begin_inset Quotes eld +\end_inset + +functional +\begin_inset Quotes erd +\end_inset + + +\layout Description + +STD_IOMANIP => , +\layout Description + +STD_IOSTREAM => , , +\layout Description + +STD_STDEXCEPT => (ignore this, FlightGear doesn't use exceptions) +\layout Description + +STD_STRING => +\layout Description + +STD_STRSTREAM => , +\layout Standard + +In use, instead of writing #include you write #include STD_IOSTREAM. +\newline + +\newline +The situation becomes complicated with missing header files. + 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 index 000000000..8d1eaeb98 --- /dev/null +++ b/Serial/nmeafaq.txt @@ -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 + + 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 + +