FlightGear
An Open-Source Flight Simulator Project
http://www.flightgear.org
http://sourceforge.net/projects/flightgear
Overview
Flightgear is based on the University of Illinois at Urbana-Champaign's
LaRCsim project, which was originally created to test inflight icing solutions.
http://www.aae.uiuc.edu/m-selig/apasim/Aircraft-uiuc.html
In 1997 Curt Olsen began adapting the UIUC code to begin the FlightGear
project. The project's version history is online at:
http://www.flightgear.org/news.html
The project is open-source and under the GNU General Public License.
http://www.gnu.org/copyleft/gpl.html#SEC1
The project is cross-platform and has been running on Linux, FreeBSD,
Solaris, MacOS, IRIX, Cygwin and Win32 platforms (and maybe others).
The simulator application has hundreds of available command line switches,
and the aircraft aerodynamics, cockpits and 3D models are all defined in
XML-based text files. You can chose between three Flight Dynamics Models:
LaRCsim, JSBSim and Yasim
Project Architecture
OpenGL
The underlying layer is OpenGL, an open source, high performance graphics
library, created by Silicon Graphics and based on their IRIS GL API. It is similar
to DirectX®. To run FlightGear, or even compile it, you need an OpenGL-
compatible video card and associated drivers. Right now, nVIDIA has the best-supported high-end video cards for linux users.
OpenGL: http://www.opengl.org/
nVIDIA: http://www.nvidia.com/
There are two usual ways to get OpenGL. Commonly, linux distributions use Mesa,
a free implementation of OpenGL. NVIDIA supplies its own version of the
OpenGL libraries for use with their hardware. Caution: If you have more than
one version of the OpenGL libs installed, make sure your symlinks point to the
ones made for your video card!
GLUT
GLUT is the OpenGL Utility Kit. It is a platform-independent API which provides
simplified windowing system routines. GLUT can be installed from source (not for
the faint-of-heart as it requires tinkering with the makefiles), or from the RPM
package MesaDemos.
ZLIB
ZLIB is a "massively spiffy yet delicately unobtrusive compression library". You
probably already have it. If not, try rpmfind or http://www.gzip.org/zlib .
Metakit
Metakit is an "efficient embedded database library with a small footprint", and free. Get it at rpmfind or at http://www.equi4.com/metakit.
PLIB
PLIB is "Steve's Portable Games Library", a gaming API. It includes routines for
sound effects, music, 3D drawing, fonts, GUI, networking and assorted math and
utility routines for gaming. You should download the latest source from
http://plib.sourceforge.net and build it. This is your first chance to see how well your OpenGL library installation went.
SimGear
SimGear has been developed in conjunction with FlightGear, and supplies the
libraries which are basic to all real-time, real-world, 3D simulation. It contains math routines, XML input/output, a property-tree system of maintaining global data, serial and network I/O, magnetic variation models, atmospheric models, scenery and
vehicle rendering. SimGear is under active development, so it's best to download
and build the latest CVS source. http://www.simgear.org/
FlightGear
Finally we get to FlightGear. It's also under active development, so download and
build the bleeding-edge source. http://www.flightgear.org/Downloads/
It's recommended that FlightGear be installed in usr/local/FlightGear.
That's fine, but keep in mind that all the XML configuration files live in root space,
so you'll need to be root every time you edit them, which will be often. Being a
KDE guy, I have two desktop icons, one of which points to
kdesu "konqueror file:/" and one which points to kdesu kedit .
The base package
The base package contains data files, including many megabytes of graphics files,
called textures, configuration files, and navigational data.
Joysticks in Linux
Not much I can say except "good luck!" The information is out there, but it's
cleverly hidden at:
http://www.linux-usb.org/USB-guide/x194.html
http://atrey.karlin.mff.cuni.cz/~vojtech/input/
http://eo.yifan.net/users/g/jniehof/linuxjoy.html
http://www.freelink.cx/joystick.html
Once you think you have the joystick set up right, run the FlightGear utility
called /usr/local/FlightGear/bin/fgjs to check it out.
Running FlightGear
fgfs
The main application is /usr/local/FlightGear/bin/fgfs. When fgfs starts,
it looks in your home directory for a configuration dot-file called .fgfsrc .
This is the place to keep your command line arguments. This file is edited so often
that you should consider keeping an icon on your desktop which points to
kedit /home/<your home dir>/.fgfsrc .
I recommend running fgfs from a console at first, and also if you do a lot of editing of configuration files. It provides a lot of feedback to stdout, which you'll need when
your changes don't parse right!
Here's a sample .fgfsrc file:
--fg-root=/usr/local/FlightGear
--aircraft=737
--prop:/engines/engine/running=true
--prop:/engines/engine[1]/running=true
--enable-hud
--disable-clouds
--start-date-gmt=2003:01:20:16:00:00
A useful list of arguments can be found at: http://www.flightgear.org/Docs/InstallGuide/
getstartch4.html#x9-330004.4
As you can see, just about everything in the simulator can be turned on or off,
and you can start flying anyplace on earth, at any altitude, at any time of day, in
any weather.
XML configuration files
Note the argument --aircraft=737 in the above dot-file. This instructs fgfs to
look for a file called /usr/local/FlightGear/Aircraft/737-set.xml .
This is the top-level configuration file for the 737 model. In it is defined the flight
dynamics model (FDM) to use, the path to the aerodynamics model, and the paths
to other XML files which configure sound, heads-up display, cockpit instrumentation, autopilot, 3D model, etc.
In the case of the 737 the FDM used is JSBSim. The aerodynamics model is
defined at /usr/local/FlightGear/Aircraft/737/737.xml . This file defines
the airplane's metrics, control system, aerodynamic coefficients, and the pathname of the engine file (in this case /usr/local/FlightGear/Engine/CFM56_sim.xml).
The sound configuration file, /usr/local/FlightGear/Aircraft/
737/737-sound.xml, associates various sounds with control movements and
flight events.
The HUD configuration file, /usr/local/FlightGear/Huds/737/default.xml,
offers excellent control over the heads-up display.
The instrument panel configuration file, /usr/local/FlightGear/Aircraft/
737/Panels/737-trans-mini-panel.xml in this case, defines the layout of
the panel and the pathnames to the various instruments themselves. For instance,
the first instrument, asi-450-knot.xml, is a standard Boeing 450-knot airspeed
indicator. The file defines which graphics layers are used to draw the instrument,
and how the needles are supposed to move. If you are handy with the Gimp, you
can create your own instruments. The graphics are in Silicon Graphics' RGB
format, also known as SGI format.
Helping out
Just by installing and using FlightGear you can help by reporting any configuration
problems, porting problems, compiler problems, hardware problems, etc. You can
also create your own aircraft and get them added to the base package. I suggest
lurking on the mailing lists first: see http://www.flightgear.org/mail.html .
To make your own 3D models you'll need an editor like Blender (http://www.blender3d.com/) or PPE (the Pretty Poly Editor, http://prettypoly.sourceforge.net/) .
Projects in the works include adding better turbine engine support, improving terrain and sky rendering, multiplayer support, expanded networking support, possibly replacing Plib with another gaming library, adding new airplanes, and of course, documentation. To contribute code you'll have to install and learn how to use CVS.