crrcsim-0.9.12/ 0000775 0001750 0001750 00000000000 11724452514 010255 5 0000000 0000000 crrcsim-0.9.12/NEWS 0000644 0001750 0001750 00000000022 11724452423 010663 0000000 0000000 Dummy placeholder
crrcsim-0.9.12/documentation/ 0000775 0001750 0001750 00000000000 11724452514 013126 5 0000000 0000000 crrcsim-0.9.12/documentation/Install_Win32.txt 0000644 0001750 0001750 00000002742 11724452423 016201 0000000 0000000 Installing CRRCSim on Microsoft Windows 98/2000/XP
--------------------------------------------------
For this platform we provide a Nullsoft installer containing
nearly everything you need to setup CRRCSim.
1. Download the installer from the CRRCSim homepage.
2. Install it the usual way (double-click and follow
the instructions provided by the installer).
3. If you want to use the PARALLEL port interface, you
need an additional DLL called dlportio.dll. If you're
not planning to use the PARALLEL interface, you may
safely skip this step.
Due to licensing issues we are not allowed to provide the
required dlportio.dll with CRRCSim. This means that you
have to install it from a separate package. Download it
from
http://www.driverlinx.com/DownLoad/DlPortIO.htm
and install it as described on this page.
4. Now you should be able to start CRRCsim by double-clicking
the CRRCSim desktop icon or the Start Menu entry.
Uninstalling
------------
The installer automatically creates an entry in the control panel's
software dialog. Just select this entry and click remove, or
select "Uninstall" from CRRCSim's Start Menu folder.
This will remove all files which were copied to your computer
during installation. However, it will leave you configuration
file (crrcsim.xml) and any file created while running CRRCSim
(stdout.txt, stderr.txt). This allows you to keep your configuration
when installing a new version.
crrcsim-0.9.12/documentation/dynamic_soaring.txt 0000644 0001750 0001750 00000000262 11724452423 016752 0000000 0000000 Fly at CAPE_COD with
wind.direction=90
wind.velocity=13
(you can load a preset for this)
and start your plane from the ground.
Use throttle to get it into the air.
crrcsim-0.9.12/documentation/options.txt 0000644 0001750 0001750 00000015320 11724452423 015300 0000000 0000000 How to configure crrcsim
------------------------
Currently there are five means of adapting crrcsim to your needs:
1. Hit escape to show the graphical user interface and change settings there.
As of today, the important (but not all) settings can be adjusted there.
2. Editing the file crrcsim.xml. This is the new config file for crrcsim. It
does not look that easy, but it provides structure, which has several
advantages. Once you understood that structure (just try), you'll know how
to handle most things. Not every option in this file is effective yet. Some are
written down so a developer knows what to implement in the future and
how to configure it.
Take a look at this file!
3. Using command-line options. call
crrcsim --help
to see what's available. Anything specified on the command line should
override what's given in one of the files.
The airplane to be used can only be configured using command-line options!
4. Modifying crrc_config.h before compiling the program. Currently you can
change some keybindings there.
5. Editing the source code. This is just for developers, of course ;-)
Graphics setup
--------------
See options provided by graphical user interface, except the following ones:
video.color_depth How many bits per pixel? Usually 8, 16, 24
video.shading.option 'SMOOTH' interpolation of colors, or 'FLAT'
video.textures.fUse_textures '1' to use textures (requires 3D acclerator)
video.textures.fUse_mipmaps '1' or '0'. The use of mipmaps smoothes out distant textures.
Joystick setup
--------------
The binding of buttons and axes can be configured via the GUI.
See input scaling below.
Input scaling (and mixers)
--------------------------
For joystick and mouse input you can make use of input scaling.
Here we added lots of work to make the joystick and mouse inputs at least
evenly capable to a microcontroler transmitter control. This means you can
now mix exp, set output rate, correct input offset and input scaling.
Note that input scaling/mixer functionality are also useful for those
transmitters (e.g. Multiplex Cockpit SX) which "forget" all their settings
when connected to the simulator (e.g. through an Audio interface, see below).
A complete description would get too long here, so just try to figure out
this simplified formula:
output = rate * expmix(input * scale, exp) + trim
to help getting the best settings, you should always start with 1.0 for the
factors (or -1.0 to invert it) and 0.0 for the addends, then call crrcsim
with '-v' and watch the values. The values should be around from -0.5 to +0.5
for all axis except for throttle, spoiler and retract which should be
within 0.0 to 1.0. For the latters this is achieved adding an offset of +0.5.
Additionally the following functionalities are implemented:
- dual-rate setting for aileron, elevator & rudder
- independently adjustable + and - travel for flap
- 4 freely configurable mixers, to be used e.g. for gliders as:
- elevator-to-flap (snap-flap)
- spolier-to-flap (for landing)
- flap-(or spoiler-)to-elevator (flap or spoiler compensation)
- aileron-to-rudder (to improve coordination in turn)
Dual-rate and mixers can also be toggled on/off during flight using keyboard
short-cut (to be implemented yet..)
Using a transmitter interface
-----------------------------
Several methods of plugging your transmitter to the computer are available.
Most things can be configured using the graphical user interface.
* Parallel port interface by Jan Kansky (linux, win32)
inputMethod.method = PARALLEL
Setup the LPT to use in crrcsim.xml
* Sound card interface (linux, win32, mac)
Should work with any transmitter with available output PPM signal. A
simple adapter (a wire) is connected between rc transmitter and input audio
port of the PC/mac.
inputMethod.method = AUDIO
* RCTRAN2 (linux, kernel version 2.4 and 2.6)
The PPM signal is connected to the parallel port. You need to compile
the kernel module rctran2, which is included. See
interface_rctran2/kernel_module/README.txt
inputMethod.method = RCTRAN2
* RCTRAN (linux, kernel version ?, does it work at all?)
Same hardware as RCTRAN2, but uses another kernel module.
inputMethod.method = RCTRAN
* SERIAL2 (currently linux only)
A very special interface, only useful if you want to send control signals
via RS232.
inputMethod.method = SERIAL2
Most interfaces are PPM-based. You can setup the inputMethod.radio_type in crrcsim.xml,
for example JR or FUTABA (all available options are listed there).
Call crrcsim with the commandline option '-v' to test your transmitter
interface setup.
Zoom control
------------
zoom.control can be set to one of: MOUSE, KEYBOARD
Configuring how the airplane should be started
----------------------------------------------
You can adjust the initial altitude (relative to ground), velocity (factor
to the airplane's natural speed) and angle of an airplane.
Those values used to be set in the .air-file describing the airplane itself,
but that is not true anymore. If there is something about it in the
.air-file, it is ignored.
Now you can set those initial conditions using the GUI.
The direction your planes faces is always into the wind, so if you change
the direction of the wind, your plane will start into that direction, too.
Configuring wind and thermals
-----------------------------
Wind and thermals can be configured in the GUI. Settings are saved only for
the current location, to haev good presets for every location.
Velocity is in ft/s here!
Built-in scenery have an hard-coded wind field description, while model-based
scenery can currently use one of the following:
1) simple geometry-based wind calculation from terrain profile
2) simple CFD-based (2D potential flow) wind calculation from terrain profile
3) precomputed wind field (requires CGAL library, see "compile.txt")
Mode 2) is the suggested and default mode if no precomputed wind field exists,
also better than built-in wind. The choice between mode 1) and 2) can be done
from the "Inspect wind" dialog selected from "View" menu.
The Cape Cod built-in scenery, however, should be used for DS, since mode 2)
cannot predict DS-condition.
Setting up sound output
-----------------------
Currently two things are implemented:
* A simple variometer, which does not use the soundcard but
the beeper. Currently linux only. Can be enabled via GUI,
some settings might only be available through crrcsim.xml.
* A simple noise representing the current throttle setting.
This one uses the soundcard. The sound is not perfect yet,
every time you change the throttle setting, the sound
is interrupted for some time.
Can be enabled via GUI.
crrcsim-0.9.12/documentation/loading_files.txt 0000644 0001750 0001750 00000011023 11724452423 016400 0000000 0000000 Currently this file serves as a reminder and notebook on how to handle
configuration and data files in the future.
-------------------------------------------------------------
Changelog:
2005-10-14: first version
-------------------------------------------------------------
Current state (2005-10-14)
--------------------------
There is a hierarchy of directories searched for files. Let's assume a file
"textures/grass.rgb" is to be loaded. Its real location is retrieved using
std::string T_Config::getDataPath(std::string item)
with the parameter item="textures/grass.rgb". This function searches for the
file in the current directory first, then tries a more global directory until
it has been found or there is no other directory to look into.
The directories to search depend on the operating system in use.
Why change it?
--------------
A complete airplane description consists of several files: aerodynamic
description, 3D-model, description files for the power and propulsion
system.
We want users to create and share airplanes, but sharing is difficult if one
airplane consists of several files which have to be copied to different
directories.
Although it is possible to merge some of those files contents into
one file, this approach has disadvantages.
Examples:
-There are several airplanes using the same engine or battery. Why should
that description for a engine or battery be copied into a large number of
files? Airplanes should only reference the engine/battery they use for the
sake of disk space. Maybe the initial description of a engine has not been
perfect. To update all airplanes using that engine, you only have to
update a single file.
-There a several slightly different models of a Piper Cup. They differ in
engine, battery, aerodynamic parameters.
But all those models include the reference to a single 3D model. There is
no need to duplicate this 3D model.
The advantages are the same as above: disk space, no need to change a lot
of files for bug fixes/enhancements.
To provide for easy sharing of models we put all neccessary files into a zip
archive. This is a technology that even Windows XP is able to handle out of
the box today.
The normal directory structure should be found inside of this archive.
So you have the possibility of sharing files by putting them into the usual
directory structure, but is also possible to provide a single zip file
which contains everything that is needed for an airplane.
The easy way
------------
When loading an airplane, Joe User selects an airplane file or a zip (which
does contain an airplane file and maybe additional files).
When loading files, we don't use
std::string T_Config::getDataPath(std::string item)
anymore, but a similar function which does return a reference to a
std::istream instead. This function does not only look into directories to
find files, but at first tries the zip archive currently in use.
There is one thing we cannot do when using this simple approach, I'll try to
decribe an example:
You love the Piper Cup. You have created some models which are more or less
different. Lets say that there is a bunch of them sharing the same 3D model.
So they look the same, but behave differently. If you wanted to share them,
you'd have to create a big number of zip files, and every one contains the
same 3D model. What a waste!
A better approach
-----------------
We allow a zip file to contain more than on airplane description.
Only drawback: the file selector becomes more difficult. There are two
possibilities:
1. Display files in the file selector. If a zip is selected, another
selector pops up in which the user can choose one of the airplanes
contained in the zip.
2. Do not display files in the selector, but airplane models. In this case
we need to look into every zip file to know which airplanes are
included and have to be offered.
When loading additional files, there is no difference to the easy method.
Conclusion
----------
We can use a function
std::istream& T_Config::getDataStream(std::string item)
in any case.
We can even implement it now (provided every piece of code which loads data
from a file is able to read from a std::istream) to have a clean interface
and do the archive thing later, without touching lots of code.
How to read a zip archive?
--------------------------
Some things I found on the net:
1. "SAWZip Control"
2. "Zipios++"
http://zipios.sourceforge.net
maybe no windows port yet
3. "ZZipLib"
Guido Draheim
no istream interface
windows port
crrcsim-0.9.12/documentation/index.html 0000644 0001750 0001750 00000005502 11724452423 015042 0000000 0000000
Tބ8EҮ+Ja0G%7NCb
>Ηtiu\~ 6C.-vNixׇwjY`S )
O]|R|v!k㫻RHi(ݼe%-mʯW{A)|^\WIAX$D.Ԛ}wJJԛUznno5/I,JC炸Ҳ4#U;s:RҿX>xt!k7(9eQ))Q
{%)n~oJ
S#y/P~=}ߜR({Zu|}[ 7(&JlbJ+xi!hbkhb%L@ @ A @ӐnY\l~& ApniF IENDB` crrcsim-0.9.12/documentation/power_propulsion/power_propulsion.html 0000644 0001750 0001750 00000060060 11724452423 023007 0000000 0000000
1 Introduction
This file explains the power and propulsion system of CRRCSim to enable you to create your own
configurations.
Most things here are taken from the developers documentation, which is extracted from the source
code using a tool called doxygen. It may happen that this document is out of date, but the
documentation in the source code is not.
1.1 History
23.09.2005 | Jens Wilhelm Wulf | The system has just been implemented into CVS.
Took most texts from source code to put this document together. |
26.02.2009 | Jens Wilhelm Wulf | update, added examples |
22.10.2009 | Jens Wilhelm Wulf | downthrust update |
This class manages everything related to battery, engine, propeller. Throughout this class (and the classes used by it) the SI unit system is used (with a small number of exceptions).
Values used are:
- lengths
H
and D
in m - rotational velocity
omega
in rad/s - rotational velocity
n
in 1/s - linear velocity
V
in m/s - Torque
M
in Nm - Force/thrust
F
in N - Inertia
J
in kg m^2 - Resistance
R
in Ohm - Current
I
in A - Voltage
U
in V - Capacity
C
in Ah
One airplane needs exactly one Power system, even if the latter is empty. The Power system for one airplane can contain the following items, which are organized in a tree-like structure which represents mechanical and electrical connections.
- Battery
At least one is needed, unless you have a glider. - Shaft
At least one is needed. Every engine/propeller is (mechanically) connected to a shaft. One or more shafts are connected to a battery. This is what electrically relates engines to batteries. - Engine
One or more engines can be connected to a shaft. - Propeller or SimpleThrust
One or more of them can be connected to a shaft.
This is an example setup (without gearboxes):
The system is configured using a description in xml. The connections mentioned above are given by the structure of xml elements. Here's an example of a system with one battery; there is a gearbox with two engines driving one prop.
<power>
<battery filename="nicd12_30" throttle_min="0">
<shaft J="2E-6" brake="0">
<engine filename="astro_cobalt_10">
<gearing J="0" i="2.5" />
</engine>
<engine filename="astro_cobalt_10">
<gearing J="0" i="2.5" />
</engine>
<propeller D="0.3" H="0.2" J="3E-6" n_fold="-1" />
</shaft>
</battery>
</power>
Take a look at the individual items for details of their description.
If you don't want to define every single item of the system, you can take the easy way. Use a description like this:
<automagic F="12" V="15.8">
<battery throttle_min="0">
<automagic T="420" />
<shaft J="0" brake="1">
<propeller D="0.243" H="0.17" J="0" n_fold="5" />
<engine>
<automagic omega_p="2827" eta_opt="0.78" eta="0.7" />
</engine>
</shaft>
</battery>
</automagic>
This will create a power system which delivers a thrust of F=12 N
at a velocity of V=15.8 m/s
. The battery will be designed to last T=420 s
. You also need to fill in the dimensions of the propeller. It is best to take everything else as shown in the example.
If you use this automagic way of creating the system, the program will output the configuration it calculated from your values to give you a starting point for fine grained tunings.
3 Elements of a power system
This class models a battery.
A battery has an initial capacity. While current is being drawn from the battery, the capacity left becomes smaller. Once nothing is left, its voltage is set to zero. The battery is definitely empty in this case.
Apart from this behaviour, the voltage is modelled as U = U_0(C, C_0) - R_I * I
. I
is the current drawn from the battery.
The no-load-voltage U_0
is a function of the capacity left. It is read from a table.
If the battery voltage drops below U_off
, the voltage is set to zero and locked. By setting the throttle command to zero, it can be unlocked again. This is similar to what speed controllers do.
Set throttle_min
to > 0 to model a glow engine which can only be started once and runs at that minimum throttle afterwards.
The xml configuration of a battery looks like this:
<battery C="1.2" U_0="9.6" U_off="7" R_I="10E-3" throttle_min="0">
<U_0rel>
1.05;
0.95;
0.90;
0.85;
0.85;
0.85;
0.85;
0.85;
0.85;
0.80;
0.75;
0.70;
</U_0rel>
...shafts connected to this battery...
</battery>
In contrast to other values in the power system, the initial capacity C
is given in Ah, not As.
It is possible to read the parameters of a battery from a separate file. In this case use something like
<battery filename="nicd12_30" throttle_min="0">
instead of writing down the parameters directly. The system will try to load a file ./models/battery/nicd12_30.xml
which might look like this:
<?xml version="1.0"?>
<battery C="3.0" U_0="12" U_off="9" R_I="10E-3">
<U_0rel>
1.05;
0.95;
0.90;
0.85;
0.85;
0.85;
0.85;
0.85;
0.85;
0.80;
0.75;
0.70;
</U_0rel>
</battery>
In both cases, the section U_0rel
is a table showing the no-load-voltage U_0
as a function of the capacity left. The table does not contain absolute values. In this example, U_0
at full charge is 1.05 * 12 V
. It does not matter how many entries this table contains; they are assumed to be at equal distances as far as the capacity left is concerned.
This class models a shaft to which engines and propellers (any number of them) are connected.
For folding props a speed brake is needed, but it didn't work as expected in Engine. Therefore the simulation of the brake was ripped out of the engine (where the real model proved to be too weak) and has been put into the shaft. So if the brake is enabled, it will force the shaft to stop rotating as soon as the throttle command is zero.
Example for an xml description:
<shaft J="0.0E-5" brake="1">
...engines and propellers...
</shaft>
J
is the inertia of the shaft; if brake
is not zero, this shaft will stop rotating as soon as the throttle command is zero. This is needed for folding props.
This class models a gearing which connects engines/propellers to a shaft. Everything connected to a shaft must be a subclass of it.
The xml description of a gearing must be written inside of the element which is connected to the shaft by the gearbox. It looks like this:
<gearing i="1.13" J="0" />
A gearbox might have an inertia J
which is not zero. This inertia is the value seen by the shaft. The inertia of the propeller/engine is translated to the shaft automatically.
Given omega
is the speed of the shaft, i*omega
is the speed of the device which is connected to the shaft using this gearing.
This class models a direct current motor. The model is quite realistic. However, modeling the emc brake proved to be not strong enough to stop a Propeller in flight. But this is a problem of the Propeller I think. The brake is modelled by Shaft now.
The xml configuration of an engine looks like this (without gearbox to shaft):
<engine k_M="4.3e-03" R_I="0.185" J_M="1.79e-05" I_0="1.01" />
Example for an xml description, connection to shaft via a gearbox:
<engine k_M="4.3e-03" R_I="0.185" J_M="1.79e-05" I_0="1.01" >
<gearing i="1.13" J="0" />
</engine>
The inertia J
of the engine is translated to the shaft automatically. The inertia J
of the gearing is the value seen by the shaft.
See Gearing for a description of a gearbox.
It is possible to read the parameters of a engine from a separate file. In this case use something like
<engine filename="astro_cobalt"/>
<engine filename="astro_cobalt">
<gearing i="1.13" J="0" />
</engine>
instead of writing down the parameters directly. The system will try to load a file ./models/engine/astro_cobalt.xml
which might look like this:
<?xml version="1.0"?>
<!--
Astro Cobalt 05 at 10 V
Data taken from
Retzbach, Ludwig: Ratgeber Elektroflug, Neckar Verlag, 1991.
M_r = 1.15E-2; // Nm
I_0 = M_r/k_M = 2.74A
J_M is just guessed.
-->
<engine R_I="0.08" k_M="0.42E-2" I_0="2.74" J_M="1.6E-6" >
</engine>
Given U_K
is the voltage applied to the engine and omega is its speed, it will draw a current of I_M = (U_K - omega * k_M) / R_I
and will apply a torque to the gearing which is M_M = k_M * (I_M - I_0)
.
Finding a complete parameter set for a specific engine can be impossible, but luckily the parameters can be calculated from measured data. Given the current draw for the idle engine and voltage, current draw and speed values for at least two different load points (one of them may be the idle point as well), all electric parameters can be calculated.
A worked example: Speed 400 with flux ring
For one model I wanted to simulate a Speed 400 (aka Mabuchi RS-380 PH) with an additional flux ring. I found an Excel sheet on the Internet that contained motor data for exactly this engine:
U_K [V] I_M [A] n [rpm] n [1/s] remark
-----------------------------------------------------------------------------------
7.96 0.94 22290 371.5 idle, n = n_0, U_K = U_0 and I_M = I_0
7.37 7.47 13740 229 near max. load
J_M, the engine's rotor's inertia, can be found in the manufacturer's data sheet, or it has to be guessed. I assumed 1.0E-6 for the Speed 400. You can estimate it by regarding the rotor as a solid iron cylinder of mass m (in kg) and diameter d (in m) using the formula
All this resulted in the following engine file:
<?xml version="1.0"?>
<!--
Mabuchi 380 (aka Speed 400) with additional flux ring
J_M is just guessed.
-->
<engine_dcm J_M="1.0E-6" calc="1">
<data>
<data U_K="7.96" I_M="0.94" n="371.5" />
<data U_K="7.37" I_M="7.47" n="229.0" />
</data>
<data_idle>
<data I_M="0.94" />
</data_idle>
</engine_dcm>
There must be at least two entries with different load points, but if you have more, just supply all of them.
If you only have one set of idle data, the voltage does not matter. But if you can provide several values for idle current at a certain voltage, do so. Replace
<data_idle>
<data I_M="0.94" />
</data_idle>
by something like
<data_idle>
<data U_K="7.96" I_M="0.94" />
<data U_K="6.13" I_M="0.87" />
<data U_K="5.07" I_M="0.82" />
</data_idle>
This class models a propeller. It is far from perfect, so you can't use it to optimize your real airplane, but it should be good enough to achieve the feeling of a realistic propeller in the simulation.
The Propeller can be configured to be a folding prop, which folds as soon as it rotates slower than omega_fold
. From the xml config, n_fold
is read and converted using (omega_fold = n_fold * 2 * pi)
. If a prop is folded, it will not create a positive torque to the Shaft (and keep it rotating) and will not create drag to the airplane. If n_fold
is negative, this is not a folding prop.
If your model needs downthrust, you can tell the simulation about the propeller's position
(relative to center of gravity) and angle of downthrust.
Formulas used: see homepage of Martin Hepperle, http://www.mh-aerotools.de/
Example for an xml description for direct connection to shaft:
<propeller D="0.2" H="0.14" J="0" n_fold="5" />
Example for an xml description, connection to shaft via a gearbox:
<propeller D="0.2" H="0.14" J="0" n_fold="5" >
<gearing i="1.13" J="0" />
</propeller>
Example including position and downthrust:
<propeller D="0.2" H="0.14" J="0" n_fold="5" >
<pos x="0.22" z="0" downthrust="2" />
</propeller>
The inertia J
of the propeller is translated to the shaft automatically. The inertia J
of the gearing is the value seen by the shaft.
See Gearing for a description of a gearbox.
It is possible to read the parameters of a propeller from a separate file. In this case use something like
<propeller filename="10x7" />
<propeller filename="10x7" >
<gearing i="1.13" J="0" />
</propeller>
instead of writing down the parameters directly. The system will try to load a file ./models/propeller/10x7.xml
which might look like this:
<?xml version="1.0"?>
<!--
This is just a sample.
Units are SI!
H, D: m
J: kg m^2
-->
<propeller H="13E-2" D="17E-2" J="1.2E-6" n_fold="5">
</propeller>
The parameters regarding position and downthrust are not in the propeller file, as they are not parameters which describe
the propeller itself, but how the propeller is mounted.
This is a very simple propeller to model CRRCSims first engine: thrust, no matter at which airspeed.
This simple propeller is connected to a shaft via some gearing. The gearing is described by
Given omega
is the speed of the shaft this simple propeller is connected to, it will rotate at (omega_p = i * omega)
and provide a thrust of (F = k_F * omega_p)
.
The torque applied to the shaft is (M = -1 * k_M * omega_p * i)
.
Example for an xml description for direct connection to shaft:
<simplethrust k_F="0.004" k_M="0.00001" />
Example for an xml description, connection to shaft via a gearbox:
<simplethrust k_F="0.005" k_M="0.00002" >
<gearing i="1.13" J="0" />
</simplethrust>
See Gearing for a description of a gearbox.
4 Determining engine parameters
4.1 Formulas
Finding a complete parameter set for a specific engine can be impossible, but luckily the parameters can be calculated from measured data. Given the voltage, current draw and speed for the idle engine and the same three values for a load point, all electric parameters can be calculated using the above formula I_M = (U_K - omega * k_M) / R_I
, because k_M and R_I can be assumed to be independend of the load applied to the engine.
Assume that the idle engine draws an idle current of I_M = I_0 when running without a propeller at a voltage U_K = U_0. The engine will run at its idle speed for this voltage, n = n_0. The angular velocity omega can be calculated as omega_0 = 2 * PI * n / 60
when n is given in "rpm". For this idle point, the formula looks like this:
I_0 = (U_0 - omega_0 * k_M) / R_I = (U_0 - (2 * PI * n_0 / 60)) / R_I</tt>
Applying the measured data from the load point to the formula (I_M = I_L, U_K = U_L and n = n_L) results in:
I_L = (U_L - omega_L * k_M) / R_I = (U_L - (2 * PI * n_L / 60)) / R_I</tt>
Now there are two equations with two unknown variables, so this can be solved using some linear algebra. Solve one equation for k_M and insert it into the other equation. Solve the resulting formula for R_I:
R_I = (n_L * U_0 - n_0 * U_L) / (n_L * I_0 - n_0 * I_L)
or
R_I = (omega_L * U_0 - omega_0 * U_L) / (omega_L * I_0 - omega_0 * I_L)
Then solve the original formula for k_M, insert the calculated R_I and the measured values from the load point (or the idle point, that doesn't really matter) to get k_M:
k_M = (U_L - R_I * I_L) / (2 * PI * n_L / 60) (n_L in rpm)
or
k_M = (U_L - R_I * I_L) / omega_L (omega_L in rad/s)
4.2 A worked example: Speed 400 with flux ring
For one model I wanted to simulate a Speed 400 (aka Mabuchi RS-380 PH) with an additional flux ring. I found an Excel sheet on the Internet that contained motor data for exactly this engine:
U_K [V] I_M [A] n [rpm] omega [rad/s] remark
-----------------------------------------------------------------------------------
7.96 0.94 22290 2334.2 idle, n = n_0, U_K = U_0 and I_M = I_0
7.37 7.47 13740 1438.9 near max. load
Using the above formulas I calculated R_I
R_I = (n_L * U_0 - n_0 * U_L) / (n_L * I_0 - n_0 * I_L)
= (13740 * 7.96V - 22290 * 7.37V) / (13740 * 0.94A - 22290 * 7.47A)
= 0.357 Ohm
and k_M
k_M = (U_L - R_I * I_L) / omega_L
= (7.37V - 0.357 Ohm * 7.47A) / 1438.9 rad/s
= 0.00327 Vs (or 3.27E-3 Vs)
That was the hardest part. The remaining parameters are easy: I_0 can be directly read from the measured data (0.94A). n_0 was also measured, but remember that it has to be in 1/s, not in rpm, so we divide it by 60: n_0 = 22290 / 60 = 371.5 1/s
J_M, the engine's rotor's inertia, can be found in the manufacturer's data sheet, or it has to be guessed. I assumed 1.0E-6 for the Speed 400. You can estimate it by regarding the rotor as a solid iron cylinder of mass m (in kg) and diameter d (in m) using the formula
All this resulted in the following engine file:
<?xml version="1.0"?>
<!--
Mabuchi 380 (aka Speed 400) with additional flux ring
J_M is just guessed.
-->
<engine_dcm R_I="0.357" k_M="3.27E-3" I_0="0.94" J_M="1.0E-6" n_0="371.5">
</engine_dcm>
5. Example fold/brake settings
configuration |
battery.throttle_min |
battery.shaft.brake |
battery.shaft.propeller.n_fold |
elecrical engine, folding prop |
0 |
1 |
5 |
elecrical engine, non-folding prop |
0 |
0 |
-1 |
combustion engine, non-folding prop |
0.2 |
0 |
-1 |
crrcsim-0.9.12/documentation/power_propulsion/Makefile.am 0000644 0001750 0001750 00000000273 11724452423 020527 0000000 0000000 # Makefile.am for "/documentation/power_propulsion"
pkgdatadir = $(docdir)/power_propulsion
pkgdata_DATA = power_propulsion.html inline_dotgraph_1.dot.png
EXTRA_DIST = $(pkgdata_DATA)
crrcsim-0.9.12/documentation/power_propulsion/Makefile.in 0000664 0001750 0001750 00000026731 11724452453 020554 0000000 0000000 # Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Makefile.am for "/documentation/power_propulsion"
VPATH = @srcdir@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = documentation/power_propulsion
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \
$(top_srcdir)/m4/ax_check_gl.m4 \
$(top_srcdir)/m4/ax_check_glu.m4 \
$(top_srcdir)/m4/ax_lang_compiler_ms.m4 \
$(top_srcdir)/m4/sdl.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/crrc_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(pkgdatadir)"
DATA = $(pkgdata_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
pkgdatadir = $(docdir)/power_propulsion
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CGAL_CFLAGS = @CGAL_CFLAGS@
CGAL_LIBS = @CGAL_LIBS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GLU_CFLAGS = @GLU_CFLAGS@
GLU_LIBS = @GLU_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PA_LIBS = @PA_LIBS@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
XMKMF = @XMKMF@
XTRA_OBJS = @XTRA_OBJS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
acx_pthread_config = @acx_pthread_config@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
pkgdata_DATA = power_propulsion.html inline_dotgraph_1.dot.png
EXTRA_DIST = $(pkgdata_DATA)
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign documentation/power_propulsion/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign documentation/power_propulsion/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-pkgdataDATA: $(pkgdata_DATA)
@$(NORMAL_INSTALL)
test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
done
uninstall-pkgdataDATA:
@$(NORMAL_UNINSTALL)
@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(pkgdatadir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-pkgdataDATA
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-pkgdataDATA
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-pkgdataDATA install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-pkgdataDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
crrcsim-0.9.12/documentation/man/ 0000775 0001750 0001750 00000000000 11724452515 013702 5 0000000 0000000 crrcsim-0.9.12/documentation/man/crrcsim.1 0000644 0001750 0001750 00000006622 11724452423 015350 0000000 0000000 .\" Process this file with
.\" groff -man -Tascii foo.1
.\"
.TH CRRCSIM 1 "JULY 2008" Linux "User Manuals"
.SH NAME
crrcsim \- a model\-airplane flight simulation program
.SH SYNOPSIS
.B "crrcsim [-fvhV] [\-l \fIlandscape-file\fP] [\-c \fIcdepth\fP]"
.B "[\-x \fIxres\fP] [\-y \fIyres\fP]"
.br
.B "[\-d \fIwinddir\fP] [\-w \fIwindvel\fP] [\-g \fIconfig-file\fP] [\-s \fIon|off\fP]"
.B "[\-u \fIon|off\fP]"
.br
.B "[\-m \fIAILERON|RUDDER\fP]"
.B "[\-b \fInr:buttonfunc\fP]"
.B "[\-i \fImethod\fP]"
.I airplane-file
.SH DESCRIPTION
.B crrcsim
is a model-airplane flight simulation program for Linux
with ports to other platforms. Using crrcsim you can learn how to
fly model aircraft, test new aircraft designs, and improve your
skills by practicing in the relative safety of your PC.
.SH OPTIONS
.IP "-b nr:buttonfunc"
Bind a joystick button to a function.
.I nr
is the number of the joystick button. For example, -b 2:INCTHROTTLE
will increase the current throttle setting by 10% each time button #2 is pressed.
See section BUTTON FUNCTIONS for a listing of all possible functions.
.IP "-c cdepth"
Color-depth in bits-per-pixel
.IP "-d winddir"
Wind direction in degrees.
.IP -f
Start in fullscreen mode.
.IP "-g config-file"
Specify a config file.
.IP -h
Display help and exit.
.IP "-i type"
Select input method.
.IP "-l landscape-file"
Load the landscape defined by
.I landscape-file
.IP "-m AILERON|RUDDER"
Specify which function is controlled by horizontal mouse movement (if the input method is
set to MOUSE).
.IP "-s on|off"
Enable/disable sound (default: on).
.IP "-u on|off"
Enable/disable graphical user interface (default: on).
.IP -v
Enable on-screen display of some values. This option may be specified up to three times.
.IP -V
Only print version information and exit.
.IP "-w windvel"
Wind velocity in ft/s.
.IP "-x xres"
Horizontal resolution in pixels.
.IP "-y yres"
Vertical resolution in pixels.
.SH "BUTTON FUNCTIONS"
.IP PAUSE
Pause the simulation.
.IP RESUME
Resume the simulation from pause mode.
.IP RESET
Restart the simulation with the current configuration.
.IP ZOOMIN
Increase the zoom factor of the current view.
.IP ZOOMOUT
Decrease the zoom factor of the current view.
.IP INCTHROTTLE
Increase the throttle by 10%.
.IP DECTHROTTLE
Decrease the throttle by 10%.
.SH "INPUT METHODS"
.IP KEYBOARD
The airplane is controlled by the keyboard.
.IP MOUSE
Elevator and either aileron or rudder (depending on the
.B -m
option) are controlled by the mouse. Throttle can be adjusted
by using the keyboard.
.IP JOYSTICK
The airplane is controlled by the joystick. Control functions can be
mapped to the joystick axes with the
.B -b
option.
.IP RCTRAN
Reads the PPM signal from an r/c transmitter using the parallel port and
the rctran kernel module.
.IP SERPIC
For PPM interfaces connected to a serial port (aka 'FMS interface').
.IP SERIAL2
A different serial port interface.
.IP PARALLEL
Reads the PPM signal from an r/c transmitter using the parallel port.
.IP AUDIO
Reads the PPM signal from an r/c transmitter using a sound card.
.IP MNAV
Interface to the MNAV autopilot system.
.IP ZHENHUA
For Walkera transmitters connected directly to the serial port.
.SH FILES
.I ~/.crrcsim/crrcsim.xml
.RS
Default configuration file. Overridden by the
.B -g
option.
.SH HISTORY
.B crrcsim
was originally written by Jan Kansky .
You may contact the current maintainers on the crrcsim-devel mailing list
at .
crrcsim-0.9.12/documentation/man/Makefile.am 0000644 0001750 0001750 00000000610 11724452423 015647 0000000 0000000 # Makefile.am for "/documentation/man"
# The default manpage crrcsim(1) goes into "man1" ...
man1datadir = $(mandir)/man1
man1data_DATA = crrcsim.1
# ... while localized versions go into "xx/man1" where "xx" is
# the ISO country code
# de_man1datadir = $(mandir)/de/man1
# de_man1data_DATA = de/crrcsim.1
EXTRA_DIST = $(man1data_DATA)
# EXTRA_DIST = $(EXTRA_DIST) $(de_man1data_DATA)
crrcsim-0.9.12/documentation/man/Makefile.in 0000664 0001750 0001750 00000027265 11724452453 015704 0000000 0000000 # Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Makefile.am for "/documentation/man"
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = documentation/man
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \
$(top_srcdir)/m4/ax_check_gl.m4 \
$(top_srcdir)/m4/ax_check_glu.m4 \
$(top_srcdir)/m4/ax_lang_compiler_ms.m4 \
$(top_srcdir)/m4/sdl.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/crrc_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(man1datadir)"
DATA = $(man1data_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CGAL_CFLAGS = @CGAL_CFLAGS@
CGAL_LIBS = @CGAL_LIBS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GLU_CFLAGS = @GLU_CFLAGS@
GLU_LIBS = @GLU_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PA_LIBS = @PA_LIBS@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
XMKMF = @XMKMF@
XTRA_OBJS = @XTRA_OBJS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
acx_pthread_config = @acx_pthread_config@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
# The default manpage crrcsim(1) goes into "man1" ...
man1datadir = $(mandir)/man1
man1data_DATA = crrcsim.1
# ... while localized versions go into "xx/man1" where "xx" is
# the ISO country code
# de_man1datadir = $(mandir)/de/man1
# de_man1data_DATA = de/crrcsim.1
EXTRA_DIST = $(man1data_DATA)
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign documentation/man/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign documentation/man/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-man1dataDATA: $(man1data_DATA)
@$(NORMAL_INSTALL)
test -z "$(man1datadir)" || $(MKDIR_P) "$(DESTDIR)$(man1datadir)"
@list='$(man1data_DATA)'; test -n "$(man1datadir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1datadir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man1datadir)" || exit $$?; \
done
uninstall-man1dataDATA:
@$(NORMAL_UNINSTALL)
@list='$(man1data_DATA)'; test -n "$(man1datadir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(man1datadir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(man1datadir)" && rm -f $$files
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(man1datadir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-man1dataDATA
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-man1dataDATA
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-man1dataDATA install-pdf install-pdf-am install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-man1dataDATA
# EXTRA_DIST = $(EXTRA_DIST) $(de_man1data_DATA)
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
crrcsim-0.9.12/documentation/dlportio.txt 0000644 0001750 0001750 00000001012 11724452423 015432 0000000 0000000 Information on DLPORTIO.DLL
---------------------------
If you want to use the PARALLEL port interface, you
need an additional DLL called dlportio.dll. If you're
not planning to use the PARALLEL interface, you don't need
this DLL.
Due to licensing issues we are not allowed to provide the
required DLPORTIO.DLL with CRRCSim. This means that you
have to install it from a separate package. Download it
from
http://www.driverlinx.com/DownLoad/DlPortIO.htm
and install it as described on this page.
crrcsim-0.9.12/documentation/README 0000644 0001750 0001750 00000011726 11724452423 013732 0000000 0000000 CRRCSim README
--------------
1. What is CRRCSim?
-------------------
CRRCSim is the "Charles River Radio Controllers Simulation",
a multi-platform simulation for R/C model airplanes. It was
originally written by Jan Kansky and Mark Drela, both members
of the CRRC (http://www.charlesriverrc.org). The simulation
focusses on the realistic simulation of gliders, but also
provides some powered airplanes.
Please take a look at the CRRCSim homepage for more information:
http://crrcsim.berlios.de/wiki
2. Installing CRRCSim
---------------------
Please take a look at the documents in the "Documentation"
subdirectory which describe the installation on all
supported platforms.
3. Reporting bugs
-----------------
First of all, please note that CRRCSim is still considered to
be beta software. We try to solve any problems as soon as
they are reported, but there might still be a lot of bugs
hidden in the software.
If you find a bug in CRRCSim we'd really appreciate if you'd take
the time to file a bug report at the CRRCSim project homepage
(http://www.sourceforge.net/projects/crrcsim). You can access the
bug-tracking system through the link "Bugs" on the aforementioned
page. Before adding a new bug, please browse through the existing
entries to prevent duplicates. You can always add aditional
information to an existing bug.
Please include as much information as possible in your bug report:
Operating system, CRRCSim version string (menu Help-->About) and a
description of the bug is the bare minimum. In addition you could
add the debugging information which is printed to stdout and stderr.
On GNU/Linux and MacOS-X simply start CRRCSim from a console window
and redirect the output into a file or cut and paste it from the
console window. On Windows you'll find two text files in the
CRRCSim directory named 'stdout.txt' and 'stderr.txt' which contain
all information from the last CRRCSim run.
4. Feature requests
-------------------
If you are missing a feature in CRRCSim, please let us know.
This helps us to priorize our future improvements. You can
use the feature request system provided by Sourceforge.net
which is accessible from the project development page
(https://developer.berlios.de/projects/crrcsim/). Just click
on the link "Features" on top of the page.
5. Where to get help
--------------------
Although there's lot of information provided in the documentation
directory, you might still run into problems when compiling,
installing or running CRRCSim. The following ressources might help
you in this case.
The CRRCSim Wiki
http://crrcsim.berlios.de/wiki/
The CRRCSim Wiki is a collection of web pages dealing with
different aspects of CRRCSim. Here you'll find some documentation,
a list of frequently asked questions (FAQ) and lots of links
to CRRCSim-related web sites.
The Wiki also gives you a chance to contribute to CRRCSim if you
aren't familiar with programming. You can add information to the
existing pages or even create new pages. You can express your
opinion on existing feature requests by voting for them or adding
a comment on the RoadMap page.
Instructions on how to work with the Wiki are given at the bottom
of the Wiki's MainPage.
The CRRCSim Yahoo! group
http://groups.yahoo.com/group/crrcsim/
This is the place where the CRRCSim users meet. The group is
unmoderated, so all you need to join is a valid Yahoo! Groups
account. For more info on Yahoo! Groups, see http://groups.yahoo.com.
The group is also frequently visited by the CRRCSim developers.
The CRRCSim development home page
https://developer.berlios.de/projects/crrcsim/
If you want to participate in the development of CRRCSim or just
want to get the bleeding-edge CVS version of CRRCSim, this is
the place to go. You can also access the download section
containing previous releases from this page. Sourceforge also
provides the above-mentioned bug tracking system and a
sophisticated feature request management system.
6. Legal notice
---------------
CRRCSim is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307, USA.
CRRCsim can optionally be linked with the CGAL library
(http://www.cgal.org). Parts of this library are licensed
under the QPL which is incompatible to the GPL. Therefore,
as a special exception, you have permission to link this program
with the CGAL library and distribute executables, as long as you
follow the requirements of the GNU GPL in regard to all of the
software in the executable aside from CGAL.
crrcsim-0.9.12/documentation/Makefile.am 0000644 0001750 0001750 00000000747 11724452423 015107 0000000 0000000 # Makefile.am for "/documentation"
SUBDIRS = file_format input_method thermals man howto_create_models models power_propulsion
pkgdatadir = $(docdir)
pkgdata_DATA = compile.txt \
control.txt coordinate.txt davis.jpg dlportio.txt \
dynamic_soaring.txt index.html Install_Linux.txt \
Install_Win32.txt loading_files.txt \
non_SI_units.txt options.txt \
README windfield.txt
EXTRA_DIST = $(pkgdata_DATA)
crrcsim-0.9.12/documentation/windfield.txt 0000644 0001750 0001750 00000003011 11724452424 015545 0000000 0000000 Windfield simulation includes thermals. Please take a look into the
subdirectory "./thermals/" if you are interested.
Currently this file serves as a reminder and notebook on how to handle
windfield simulation in the future.
-------------------------------------------------------------
Changelog:
2005-10-14: first version
-------------------------------------------------------------
Current state (2005-10-14)
--------------------------
Windfield is hardcoded, which means that (apart from thermals) it is not
worth describing it. Please take a look at windfield.cpp.
What needs to be done
---------------------
- random variations in direction and strength
- turbulences (the FDM needs work in this case, too)
- terrain dependend windfield
How does "Slope Soaring Sim" do it?
-----------------------------------
enviroment.*
wind_field_generator.*
There are some methods "*wind_from_terrain", called from enviroment.cpp.
filtered_separated_wind_from_terrain
How does "runtime" work? Is it Velocity Environment::get_background_wind_from_terrain(const Position & pos,
bool thermal) const?
How does "JSBSim" do it?
------------------------
src/models/FGAtmosphere.cpp includes different models for turbulence. No
windfield simulation based on terrain. Maybe this is done somewhere else?
There must be a call to void SetWindNED(double wN, double wE, double wD)
somewhere. But I guess that this is in FlightGear, as JSBSim doesn't know
anything about the terrain?
crrcsim-0.9.12/documentation/input_method/ 0000775 0001750 0001750 00000000000 11724452514 015625 5 0000000 0000000 crrcsim-0.9.12/documentation/input_method/SERIAL2/ 0000775 0001750 0001750 00000000000 11724452514 016666 5 0000000 0000000 crrcsim-0.9.12/documentation/input_method/SERIAL2/README 0000644 0001750 0001750 00000001075 11724452423 017466 0000000 0000000 This is a very special interface, as it isn't useful to anyone but me (at
this moment, at least). My TX is able to send out its state via a serial
line in some special protocol. So this input-method decodes this protocol to
feed the values to crrcsim.
At the moment it only works for linux, but can easily be ported. Only the routines
for reading the serial port need to be rewritten for others OSs.
If anyone is interested in using this interface (simple, as the UART is used),
I will of course write down some additional info about it.
Jens Wilhelm Wulf, 14.08.2004
crrcsim-0.9.12/documentation/input_method/SERIAL2/Makefile.am 0000644 0001750 0001750 00000000232 11724452423 020634 0000000 0000000 # Makefile.am for "/documentation/input_method/SERIAL2"
pkgdatadir = $(docdir)/input_method/SERIAL2
pkgdata_DATA = README
EXTRA_DIST = $(pkgdata_DATA)
crrcsim-0.9.12/documentation/input_method/SERIAL2/Makefile.in 0000664 0001750 0001750 00000026713 11724452452 020665 0000000 0000000 # Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Makefile.am for "/documentation/input_method/SERIAL2"
VPATH = @srcdir@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = documentation/input_method/SERIAL2
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \
$(top_srcdir)/m4/ax_check_gl.m4 \
$(top_srcdir)/m4/ax_check_glu.m4 \
$(top_srcdir)/m4/ax_lang_compiler_ms.m4 \
$(top_srcdir)/m4/sdl.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/crrc_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(pkgdatadir)"
DATA = $(pkgdata_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
pkgdatadir = $(docdir)/input_method/SERIAL2
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CGAL_CFLAGS = @CGAL_CFLAGS@
CGAL_LIBS = @CGAL_LIBS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GLU_CFLAGS = @GLU_CFLAGS@
GLU_LIBS = @GLU_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PA_LIBS = @PA_LIBS@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
XMKMF = @XMKMF@
XTRA_OBJS = @XTRA_OBJS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
acx_pthread_config = @acx_pthread_config@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
pkgdata_DATA = README
EXTRA_DIST = $(pkgdata_DATA)
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign documentation/input_method/SERIAL2/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign documentation/input_method/SERIAL2/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-pkgdataDATA: $(pkgdata_DATA)
@$(NORMAL_INSTALL)
test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
done
uninstall-pkgdataDATA:
@$(NORMAL_UNINSTALL)
@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(pkgdatadir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-pkgdataDATA
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-pkgdataDATA
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-pkgdataDATA install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-pkgdataDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
crrcsim-0.9.12/documentation/input_method/RCTRAN/ 0000775 0001750 0001750 00000000000 11724452514 016616 5 0000000 0000000 crrcsim-0.9.12/documentation/input_method/RCTRAN/README_old 0000644 0001750 0001750 00000012407 11724452423 020255 0000000 0000000
!!!! This file describes a very old version !!!!
!!!! of CRRCSim, not the current one. But it !!!!
!!!! provides some information about the !!!!
!!!! rctran transmitter interface. !!!!
Here is the info I have written so far on how to get CRRCSim up and
running on your computer!
1: I have only tested this using a 2.2 series Linux kernel. I don't
think the rc transmitter interface will work using a 2.0 series kernel.
You can always use the mouse input to test fly the simulator before
worrying about the RC Transmitter interface. This should work on any
kernel.
If you need too, download and install the latest 2.2 series kernel from
ftp.kernel.org. This can be tricky, so if you haven't compiled a new
kernel for a linux machine before, make sure you read all the "howto"
files out there on the web, and make sure you select the right options.
The rc transmitter interface will only work on intel based processors.
2: Get OpenGL hardware acceleration working on the Linux box. You
can run in software OpenGL mode, but it is slow and you will have to
turn off the nice textures and smooth shading.
3: Install the GLUT package. I used version 3.7 beta. Search
www.freshmeat.net for GLUT, and you will find a link to the this tar.gz
file.
4: Install the gle package. This handles drawing extruded OpenGL
objects. http://linas.org/gle/
5. Install SDL, it handles joystick, mouse, keyboard and video.
version 1.2 works great.
http://www.libsdl.org/
5: Download and install the "mbuff" package. Only if you need the
RCtransmitter interface. If you are using a mouse for initial
testing, you can skip this step and go to step 9.
http://crds.chemie.unibas.ch/PCI-MIO-E/mbuff-0.7.1.tar.gz
This provides the shared memory between the rc transmitter kernel module
and the flight simulator.
Install as described in the documents that come with the mbuff package.
Don't forget to do the step where you change the makefile after initial
testing so that the mbuff is no longer implementing the "demo mode"
Make sure you have the permissions on the /dev/mbuff file set correctly
for the user that will be running the simulation, or create a group to
handle all mbuff users.
6. Build a cable that connects the ground of the transmitter trainer port
5 pin din to the ground of the parallel port, and connects the trainer
cord output on the 5 pin DIN to the ACK, or interrupt input of the
parallel port. Be sure you don't have an interrupt conflict of the
parallel port with some other hardware in your machine. Make sure that
the parallel port is enabled in the bios. Some brands of transmitter,
like the Hitec also allow you to wire together two pins on the DIN
connector to disable the RF output on the transmitter. Make sure you check
this with a scope first so that you don't fry your parallel port.
Some types of transmitters output more than 5 Volts! Other parallel
ports require a buffer to prevent from trying to draw more current
than the transmitter can source. Use a curcuit with two TTL inverters
in series powered off the parallel port to prevent this type of problem.
7. Edit the crrcsim/rctran.c file and change the value of TWO_MS to
accurately represent the number of processor cycles that elapse during a
three millisecond interval. It is currently set to the value I used
for a 458MHz machihe. (In fact, I recently found that it is better to
set this value to the number of ticks that elapse during a three
millisecond interval, so that's why the variable name doesn't make sense)
8. Edit the crrcsim.cfg file. You will see commands like:
cpu_speed 456.507890 CPU speed in MHz needed by RCTRAN on Linux
Note: this value can now be found in crrcsim.xml, it is
inputMethod.rctran.cpu_speed
Change the 456.507890 to whatever your processor speed is, as reported
by more /proc/cpuinfo.
9. Edit crrcsim.xml, change inputMethod.method to MOUSE if you aren't
planning on using the RC Transmitter interface otherwise leave it as
RCTRAN.
10. Compile crrcsim, the simulator executable, and rctran, the transmitter
interface kernel module, by issuing a make command in the crrcsim
directory. Make sure that the mbuff.h file in the crrcsim directory is of
the same vintage as the particular mbuff package that you installed.
Hopefully it will compile successfully. You can ignore any
rctran/mbuff issues if you are using the mouse as input.
11. Become root, if using RCTRAN interface, otherwise skip to step 16.
12. from the mbuff package directory /sbin/insmod mbuff
more /proc/modules and see if mbuff is loaded (should be unused at this
point) You should check the /var/log/messages file to see if it
loaded properly. Use the command "tail -20 /var/log/messages"
13. from the crrcsim directory /sbin/insmod rctran Again, use the
"tail -20 /var/log/messages" command to see if the rctran module
loaded properly.
more /proc/modules and see if rctran is loaded (mbuff should show as being
used by rctran)
more /proc/interrupts should show the parallel port interrupt as being
used by rctran
14. logout from root
15. turn on your transmitter with the cable connected.
16. start the simulator by typing ./crrcsim
17. You may need to do some servo reversing to have the plane behave
properly.
I'm sure I forgot some details, so email me with any questions/problems.
-Jan
crrcsim-0.9.12/documentation/input_method/RCTRAN/Makefile.am 0000644 0001750 0001750 00000000234 11724452423 020566 0000000 0000000 # Makefile.am for "/documentation/input_method/RCTRAN"
pkgdatadir = $(docdir)/input_method/RCTRAN
pkgdata_DATA = README_old
EXTRA_DIST = $(pkgdata_DATA)
crrcsim-0.9.12/documentation/input_method/RCTRAN/Makefile.in 0000664 0001750 0001750 00000026703 11724452452 020614 0000000 0000000 # Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Makefile.am for "/documentation/input_method/RCTRAN"
VPATH = @srcdir@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = documentation/input_method/RCTRAN
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \
$(top_srcdir)/m4/ax_check_gl.m4 \
$(top_srcdir)/m4/ax_check_glu.m4 \
$(top_srcdir)/m4/ax_lang_compiler_ms.m4 \
$(top_srcdir)/m4/sdl.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/crrc_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(pkgdatadir)"
DATA = $(pkgdata_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
pkgdatadir = $(docdir)/input_method/RCTRAN
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CGAL_CFLAGS = @CGAL_CFLAGS@
CGAL_LIBS = @CGAL_LIBS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GLU_CFLAGS = @GLU_CFLAGS@
GLU_LIBS = @GLU_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PA_LIBS = @PA_LIBS@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
XMKMF = @XMKMF@
XTRA_OBJS = @XTRA_OBJS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
acx_pthread_config = @acx_pthread_config@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
pkgdata_DATA = README_old
EXTRA_DIST = $(pkgdata_DATA)
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign documentation/input_method/RCTRAN/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign documentation/input_method/RCTRAN/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-pkgdataDATA: $(pkgdata_DATA)
@$(NORMAL_INSTALL)
test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
done
uninstall-pkgdataDATA:
@$(NORMAL_UNINSTALL)
@list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(pkgdatadir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-pkgdataDATA
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-pkgdataDATA
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-pkgdataDATA install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-pkgdataDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
crrcsim-0.9.12/documentation/input_method/Makefile.am 0000644 0001750 0001750 00000000144 11724452423 017575 0000000 0000000 # Makefile.am for "/documentation/input_method"
SUBDIRS = MNAV PARALLEL_1_to_3 SERIAL2 RCTRAN CT6A
crrcsim-0.9.12/documentation/input_method/MNAV/ 0000775 0001750 0001750 00000000000 11724452514 016366 5 0000000 0000000 crrcsim-0.9.12/documentation/input_method/MNAV/autopilot.txt 0000644 0001750 0001750 00000014521 11724452423 021067 0000000 0000000 Autopilot
CRRCSim works out of the box with the Crossbow MNAV autopilot. The required
changes to the autopilot have not yet made it into the main autopilot source
tree, but a precompiled Windows prerelease version (Autopilot-CRRCSim) is
available on the Crossbow MNAV autopilot Sourceforge site at
http://sourceforge.net/project/showfiles.php?group_id=146680.
Full autopilot functionality is currently only supported on Windows because
the Crossbow MNAV autopilot's ground station is only available for Windows
(although all other components of the system are cross-platform). The ground
station runs with various degrees of success with different versions of
Wine, but a better long-term solution is to port the Crossbow MNAV ground
station to a cross-platform windowing toolkit.
Basic Usage
1. Download and unzip Autopilot-CRRCSim from the the Crossbow MNAV
autopilot Sourceforge site at
http://sourceforge.net/project/showfiles.php?group_id=146680.
2. Right-click on the GrounddStaion shortcut in the
Autopilot-CRRCSim root directory, and fix "Target" and "Start in" to reflect
the directory into which you unzipped Autopilot-CRRCSim.
3. Plug in joystick (The USB InterLink Controller by Futaba is convenient
because it is much like a normal RC controller).
4. Run GrounddStaion using the shortcut in the Autopilot-CRRCSim root directory.
5. Double-click on "Load Map" and choose "CRRC - Davis Field".
6. Choose GUI->3D Display.
7. In the CRRCSim window that comes up, hit ESC, then choose
Options->Controls. Choose input method to be Joystick, press Configure...,
choose what channel corresponds to Aileron, Elevator, and Throttle (Rudder
is not used), and click Calibrate to calibrate the joystick. Once you exit
out of the controls windows, hit ESC again to remove the menu bar at the top
and unpause the display.
8. Back in the ground station, choose Autopilot->Start Local Autopilot.
The autopilot will come up in a terminal window.
9. Maximize the throttle control on your joystick.
10. Back in the ground station, choose Simulator->Start Simulator. The
simulator will come up in a terminal window.
11. Looking at the ground station and 3D display, fly airplane to a decent
altitude (you shouldn't have to actually touch the controls if the throttle
is maximized because it will go up on its own).
12. With the focus on the 3D display, hit F1 and then 1 to engage the
autopilot (at any time, F1 and then 2 will disengage it and return to flying
the airplane manually).
13. Back in the ground station, double-click on locations on the map in
the ground station to choose waypoints, and then double-click "Upload Waypoints".
14. "Clear Waypoints", choose waypoints, "Upload Waypoints" as desired.
Using a Different Input Device
The basic usage instructions given above are not dependent on joystick
usage. Any other CRRCSim-supported input device may be used instead; just
select the input device of your choice in the 3D display's input device
dialog.
Note About the Cygwin DLL
The autopilot as compiled for Windows (avionics.exe) uses the Cygwin DLL. If
you have Cygwin installed on your computer, use your existing Cygwin DLL
instead of the one in the Autopilot-CRRCSim distribution (delete the one in
the distribution and copy yours in its place, or just delete the one in the
distribution if your Cygwin DLL is in your PATH), as it appears that
programs using some different versions of the Cygwin DLL cannot run at the
same time. This should not require you to recompile the autopilot, as the
Cygwin DLL has not changed so as to break compatibility in a long time.
Advanced Usage
The Autopilot-CRRCSim combination is designed to be capable of testing new
autopilot control laws, etc, in both a hardware-in-the-loop configuration
and a full-desktop-simulation configuration.
Communication Arrangement
* CRRCSim in simulator mode (no GUI) exchanges state data and servo
commands with autopilot.
* CRRCSim in 3D display mode (no simulation) exchanges operator commands
and state data with ground station.
* Ground station forwards operator commands from 3D display (converted
to servo format) to autopilot, and forwards state data from autopilot to 3D
display.
* The upshot: You can fly any of the following using the same ground
station, 3D display, and joystick: real airplane with real autopilot
hardware, real autopilot hardware using state data from simulator, autopilot
and simulator on the same PC. You can also fly a real airplane (with real
autopilot hardware) using an RC transmitter and the same ground station and
3D display (using autopilot options differing by removing "-unav off" and
"-uplinkservo on").
Running the Autopilot on Separate Hardware
* Compile autopilot for hardware and OS as necessary (See TODDNOTES.TXT
in Autopilot-CRRCSim's modified MNAV autopilot source for details about
compiling the autopilot on a variety of platforms).
* See MNAV.bat in the ground station directory, in particular the line
that begins with "avionics". You'll want to run the same command on your
other hardware, modifying the -ip and -simip parameters to be the IP
addresses of your ground station and simulator computers.
Running the Simulator on Separate Hardware
* Compile CRRCSim as necessary.
o In the current Autopilot-CRRCSim release, the CRRCSim source is
separated; copy the modified files into the CRRCSim source directory before
compiling.
o When compiling CRRCSim on Windows (using Dev-C++), compile it as
"Win32 Console" to make it so that you can quit CRRCSim in no-gui simulator
mode (otherwise it runs in the background).
* See crrcsim-sim.bat in the ground station directory, in particular the
line that begins with "crrcsim". You'll want to run the same command on your
other hardware, modifying the inputMethod.mnav.device in crrcsim-sim.xml as
described in mnav.txt.
Using a Different Autopilot
The interfaces used for CRRCSim to communicate with the Crossbow MNAV
autopilot are very general; see mnav.txt for more details.
Todd R. Templeton, 1/30/2007
crrcsim-0.9.12/documentation/input_method/MNAV/mnav.txt 0000644 0001750 0001750 00000006242 11724452423 020011 0000000 0000000 The MNAV Interface
This interface emulates the Crossbow Technology MNAV (see
http://www.xbow.com/Products/productdetails.aspx?sid=193) vehicle sensor
suite and servo control board. If you want to use the Crossbow MNAV
autopilot, which is already modified to use this interface, please see
autopilot.txt instead; this documentation is intended for developers who are
writing or modifying programs to send and receive data through the MNAV
interface.
The MNAV interface is able to operate over serial, TCP (client or server),
or UDP (client or server) by changing inputMethod.mnav.device in
crrcsim.xml. Possible values are:
* "serial,,", e.g. "serial,/dev/ttyS0,115200"
* "tcp,,", e.g. "tcp,192.168.0.5,12345"
* "tcpserver,," or "tcpserver,/,", e.g.
"tcpserver,192.168.0.5,12345" or "tcpserver,192.168.0.5/255.255.255.0,12345"
* "udp,,", e.g. "udp,192.168.0.5,12345"
* "udpserver,," or "udpserver,/,", e.g.
"udpserver,192.168.0.5,12345" or "udpserver,192.168.0.5/255.255.255.0,12345".
As input, the MNAV interface accepts 8 2-byte servo values (CH0-CH7) in an
elevon configuration, i.e. after conversion to the range of [-0.5,0.5] (CH0
and CH1) or [0,1] (CH2):
* elevator = -(CH1 - CH0) / 2
* aileron = (CH1 + CH0) / 2
* throttle = CH2.
Unlike other CRRCSim interfaces, the MNAV interface also provides vehicle
state data so that it can interface with an autopilot:
* 3-axis acceleration (accelerometers)
* 3-axis angular rate
* 3-axis magnetic field (magnetometers)
* 3-axis temperature (currently has value zero)
* absolute pressure
* pitot pressure
* GPS
* PPM (hard-coded values optimized for interface to Crossbow MNAV
autopilot--does not reflect any user input because the MNAV interface takes
the place of interactive input; any interactive input must be mediated by
the autopilot, i.e. the autopilot must have a separate user input interface
that allows the autopilot to be disabled and the simulated vehicle to be
flown directly using the input format described above).
The input and output message formats are described in Chapter 4 of the MNAV
User's Manual (see
http://www.xbow.com/Support/Support_pdf_files/MNAV100CA_Users_Manual.pdf).
In particular, the MNAV interface receives Set Servo ('SS') and Set Reverse
Bits ('SP') messages, and sends Scaled Mode vehicle data messages with GPS,
Servo, and PPM data ('N'), although by changing some #define values at the
top of mnav.cpp it can also send other types of Scaled Mode vehicle data
messages (the Crossbow 'S' type, and a non-Crossbow 'I' type that includes
all data in the 'N' type as well as roll, pitch, and yaw data).
The MNAV interface works out of the box with a modified version of the
Crossbow MNAV autopilot that will be released by Crossbow in the near
future. For now, a pre-release version of the combined Autopilot-CRRCSim
system can be downloaded from the micronav Sourceforge site at
http://sourceforge.net/project/showfiles.php?group_id=146680.
Todd R. Templeton, 1/30/2007
crrcsim-0.9.12/documentation/input_method/MNAV/Autopilot-CRRCSim.png 0000644 0001750 0001750 00001437616 11724452423 022213 0000000 0000000 PNG
IHDR Mq PLTE
) $* 3%#3K.23 F),A.!*?08- 1*? +@C2/-D#1G8G22Ak C G8O3@GD:P@?SA6Y>:V>D;MF=U=I[:V( S TM66^<