<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thilo</id>
	<title>FlightGear wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thilo"/>
	<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/Special:Contributions/Thilo"/>
	<updated>2026-04-08T16:29:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Transponder&amp;diff=135821</id>
		<title>Transponder</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Transponder&amp;diff=135821"/>
		<updated>2022-11-07T14:23:53Z</updated>

		<summary type="html">&lt;p&gt;Thilo: EU uses squawk 7000 for VFR flights, squawk 7700 is a generic emergency code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Transponders''' are radio beacons which make [[aircraft]] more identifiable on [[ATC]] displays and systems. Modern transponders support transmitting additional data such as an identification ('squawk') code and aircraft altitude. See more at {{wikipedia|Transponder (aeronautics)}}.&lt;br /&gt;
&lt;br /&gt;
== Id Codes ==&lt;br /&gt;
Id or 'squawk' codes aid ATC in identify aircraft positively. 1200 is the standard code for VFR flight (in the US; Europe uses 7000), IFR aircraft will typically be advised a code on delivery clearance or startup.&lt;br /&gt;
&lt;br /&gt;
Normal code digits are 0..7; 0000 is reserved for military use, and there are other standard codes, such as 7600 for radio comms failure. See the Wikipedia page for many more examples.&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
{{hatnote|For a thorough description, see {{wikipedia|Aviation transponder interrogation modes}}.}}&lt;br /&gt;
&lt;br /&gt;
Civilian Mode-S and Mode-C both transmit pressure altitude (at 10-foot and 100-foot precision, respectively). To do this the transponder needs an altitude source. In real-life this can be a separate box called an encoder, or may be derived for FMC / ADIRU sources. It's important to note this altitude is referenced to standard pressure (29.92 inHg / 1012Hpa), and not corrected for actual barometric pressure in the local environment.&lt;br /&gt;
&lt;br /&gt;
Additional support for military modes is possible if anyone wishes to add it.&lt;br /&gt;
&lt;br /&gt;
== Configuration in FlightGear ==&lt;br /&gt;
Transponder support was overhauled in May 2013; earlier versions (2.10 and prior) have different support and are not documented here. Updating an aircraft to use the new config is straightforward. Key transponder properties (altitude, ident and transmitted-id) are now sent via the MP protocols for use in ATC clients.&lt;br /&gt;
&lt;br /&gt;
The default altimeter can act as an altitude encoder; in its configuration, set either or both of the following boolean flags:&lt;br /&gt;
&lt;br /&gt;
* encode-mode-c&lt;br /&gt;
* encode-mode-s&lt;br /&gt;
&lt;br /&gt;
The transponder has various config properties:&lt;br /&gt;
&lt;br /&gt;
* '''bus-volts''': required DV volts for operations, defaults to 8.0&lt;br /&gt;
* '''encoder-path''': defaults to '/instruments/altimeter', but can be changed to any other location. The transponder looks for child properties 'mode-c-alt-ft' and 'mode-s-alt-ft' at this path for altitude data.&lt;br /&gt;
* '''kt70-compatibility''': boolean, default to false. Set this to enable legacy compatibility with the old KT-70 C++ instrument. Do not use in new/updated aircraft!&lt;br /&gt;
* '''mode''': this is 0 for Mode-A, 1 for Mode-C and 2 for Mode-S. Other modes can be added, ask on the [[Mailing list|devel list]]!&lt;br /&gt;
&lt;br /&gt;
=== Run-time properties ===&lt;br /&gt;
* '''altitude''': gives the transmitted altitude in feet (or -9999 for invalid)&lt;br /&gt;
* '''altitude-valid''': indicates if altitude value is valid data or not &lt;br /&gt;
* '''id-code''': allows the id-code to be read and set&lt;br /&gt;
* '''serviceable''': can be set to control the instrument serviceability&lt;br /&gt;
* '''transmitted-id''': gives the value being transmitted, including over the network via MP&lt;br /&gt;
&lt;br /&gt;
==== Input properties ====&lt;br /&gt;
These live under &amp;lt;tt&amp;gt;/inputs&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* '''knob-mode''': sets the transponder operating mode. This corresponds to the KT-70 knob positions for convenience, but the actual modes should work for any transponder instrument. Knob modes are documented below&lt;br /&gt;
* '''ident-btn''': can be set to place the transponder in ident mode for 18 seconds. Note this property is not spring-loaded, i.e you must manually reset it to false&lt;br /&gt;
* '''digit[0]-[4]''': properties allow the id code individual digits to be read and set&lt;br /&gt;
&lt;br /&gt;
In KT-70 compatibility mode, additional properties are read and set, to preserve legacy aircraft. Do not use these properties in new aircraft.&lt;br /&gt;
&lt;br /&gt;
==== Knob/Functional Modes ====&lt;br /&gt;
* 0 - off&lt;br /&gt;
* 1 - standby, basically the same as off for the C++ code (3D instrument would power up the display, presumably)&lt;br /&gt;
* 2 - test, again the C++ largely ignores this since the test configuration of real-world instruments varies. In particular the unit does *not* set altitude or transmitted-id to any test values, you should do that in your own logic. (Maybe we should allow the test values to be defined int he config section?)&lt;br /&gt;
* 3 - Ground mode, responds to altitude interrogation but does not broadcast an ID. This would typically be used while taxiing prior to takeoff.&lt;br /&gt;
* 4 - On, normal operation but altitude transmission is inhibited&lt;br /&gt;
* 5 - Alt, same as on but altitude is broadcast if transponder was configured in Mode-S or Mode-C&lt;br /&gt;
&lt;br /&gt;
=== Generic transponder ===&lt;br /&gt;
Below are all available property that you can set for your instrumentation.xml file :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;transponder&amp;gt;&lt;br /&gt;
    &amp;lt;name type=&amp;quot;string&amp;quot;&amp;gt;transponder&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number type=&amp;quot;int&amp;quot;&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;mode type=&amp;quot;int&amp;quot;&amp;gt;1&amp;lt;/mode&amp;gt; &amp;lt;!-- 0 = Mode A, 1 = Mode C, 2 = Mode S --&amp;gt;&lt;br /&gt;
    &amp;lt;bus-volts type=&amp;quot;double&amp;quot;&amp;gt;8.0&amp;lt;/bus-volts&amp;gt;&lt;br /&gt;
    &amp;lt;encoder-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/altimeter&amp;lt;/encoder-path&amp;gt;&lt;br /&gt;
    &amp;lt;kt70-compatibility type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/kt70-compatibility&amp;gt;&lt;br /&gt;
  &amp;lt;/transponder&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Howto:Develop an aircraft transponder in Nasal]] – Most probably obsolete&lt;br /&gt;
* [[FLARM]]&lt;br /&gt;
* [[Multiplayer protocol]] – The IDs 1501-1503 are earmarked for transmitting transponder properties&lt;br /&gt;
* [[OpenRadar: Transponder]]&lt;br /&gt;
* [[Traffic alert and collision avoidance system]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* [https://forum.flightgear.org/viewtopic.php?f=4&amp;amp;t=31492 Transponder properties over MP] (January-June 2017)&lt;br /&gt;
* [https://forum.flightgear.org/viewtopic.php?f=75&amp;amp;t=19826 Transponder over network] (April-December 2018)&lt;br /&gt;
* [https://forum.flightgear.org/viewtopic.php?f=4&amp;amp;t=6395 Transponder] (November 2009-December 2010)&lt;br /&gt;
&lt;br /&gt;
=== Developer mailing list ===&lt;br /&gt;
* [https://sourceforge.net/p/flightgear/mailman/message/30785263/ &amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;Flightgear-devel&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt; Improve tranponder instrument] (Apr 2009)&lt;br /&gt;
* [https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/1388915221.2195.15.camel%40duter.localdomain/#msg31810053 &amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;Flightgear-devel&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt; Transponder Ident not transmitted via MP Protocol?] (Jan-Feb 2014)&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
* {{flightgear source|src/Instrumentation/transponder.hxx}}&lt;br /&gt;
* {{flightgear source|src/Instrumentation/transponder.cxx}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;br /&gt;
[[Category:Aircraft instruments]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=135311</id>
		<title>Discord</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=135311"/>
		<updated>2022-07-14T16:42:20Z</updated>

		<summary type="html">&lt;p&gt;Thilo: Added soaring club&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Discord''' is used in the FlightGear community as an alternative to [[Mumble]], [[TeamSpeak]], [[FGCom]] or [[Ventrilo]].&lt;br /&gt;
&lt;br /&gt;
Discord is a free voice and chat software that can be downloaded as an app or used in a browser.&lt;br /&gt;
&lt;br /&gt;
== Invite links ==&lt;br /&gt;
{{note|1=Its advised that you create a permanent account, instead of creating guest accounts as some people create duplicate accounts which clogs up the member logs and makes it more difficult to @mention people.}}&lt;br /&gt;
&lt;br /&gt;
Furthermore many other FlightGear servers exist that you may need an personal invite to join. The easiest way to find them is to go to the FlightGear server and ask or ask in forums.&lt;br /&gt;
&lt;br /&gt;
== FlightGear Communities on Discord ==&lt;br /&gt;
&lt;br /&gt;
=== General, Help and Support, Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear&lt;br /&gt;
| https://discord.gg/rzuV2DR&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear FDM School&lt;br /&gt;
| https://discord.gg/Uyrtsar&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Air Race League&lt;br /&gt;
| https://discord.gg/HCAuU9D&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Virtual Alliance&lt;br /&gt;
| https://discord.gg/VqzTG2N&lt;br /&gt;
|-&lt;br /&gt;
| FG Events&lt;br /&gt;
| https://discord.gg/GY4N6Cu&lt;br /&gt;
|-&lt;br /&gt;
| FG FDM School&lt;br /&gt;
| https://discord.gg/U5KXyMU&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Republic, A friendly community about FlightGear.&lt;br /&gt;
| https://discord.gg/sBJy46Uq7z&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear soaring club&lt;br /&gt;
|https://discord.gg/NvJjmzMfRP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Military Aviation Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Operation Red Flag military FG community (OPRF)&lt;br /&gt;
| https://discord.gg/ptVapkE&lt;br /&gt;
|-&lt;br /&gt;
| Combined Joint Task Force 50 (OPRF event planning/hosting and more)&lt;br /&gt;
| https://discord.gg/2nxjb6y&lt;br /&gt;
|-&lt;br /&gt;
| Warbirds, WWII-era aircraft&lt;br /&gt;
| https://discord.gg/yJaP5Wn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Country Specific Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Australia (Scenery Development &amp;amp; Community)&lt;br /&gt;
| https://discord.gg/JzTEXsZ&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Italia (ITA Mercenaries)&lt;br /&gt;
| https://discord.gg/5RzyXRf&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Germany&lt;br /&gt;
| https://discord.gg/FNnpjCPSze&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Indian Community&lt;br /&gt;
| https://discord.gg/Tu7n5FmG5S&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Asia&lt;br /&gt;
| https://discord.gg/7saCkA2jQj&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Hong Kong&lt;br /&gt;
| https://discord.gg/9QVKcT6skU&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Myanmar&lt;br /&gt;
|https://discord.gg/VbT88KEGrk&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Poland (FlightGear Polska)&lt;br /&gt;
|https://discord.gg/gHEXsjB7b6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Aircraft-specific ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Aircraft !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Aermacchi MB-339&lt;br /&gt;
| https://discord.gg/vNZ5ZPv&lt;br /&gt;
|-&lt;br /&gt;
| Airbus [[Airbus A320 Family|A320]] &amp;amp; A330 Development&lt;br /&gt;
| https://discord.gg/7kzg9Te&lt;br /&gt;
|-&lt;br /&gt;
| Airbus A350 Development&lt;br /&gt;
| https://discord.gg/vK5f2s6&lt;br /&gt;
|-&lt;br /&gt;
| Boeing F/A-18C Hornet&lt;br /&gt;
| https://discord.gg/8GzpdK4j8P&lt;br /&gt;
|-&lt;br /&gt;
| LincolnWorks (747 and A380)&lt;br /&gt;
| https://discord.gg/2DMVpnJ&lt;br /&gt;
|-&lt;br /&gt;
| F-111 Aardvark&lt;br /&gt;
| https://discord.gg/DSrSbmx&lt;br /&gt;
|-&lt;br /&gt;
| [[General Dynamics F-16 Fighting Falcon]]&lt;br /&gt;
| https://discord.gg/8RcYnjA&lt;br /&gt;
|-&lt;br /&gt;
| MD-11, MD-80, ITAF by Octal&lt;br /&gt;
| https://discord.gg/gxAhC3j&lt;br /&gt;
|-&lt;br /&gt;
| [[Mikoyan-Gurevich MiG-21bis]]&lt;br /&gt;
| https://discord.gg/bs8xyz3&lt;br /&gt;
|-&lt;br /&gt;
| [[Mirage 2000]]&lt;br /&gt;
| https://discord.gg/xZ3r2KR&lt;br /&gt;
|-&lt;br /&gt;
| Panavia Tornado&lt;br /&gt;
| https://discord.gg/26rvkr2&lt;br /&gt;
|-&lt;br /&gt;
| [[Saab 37 Viggen]]&lt;br /&gt;
| https://discord.gg/RJTwS9a&lt;br /&gt;
|-&lt;br /&gt;
| SEPECAT Jaguar&lt;br /&gt;
| https://discord.gg/G5q5XYN&lt;br /&gt;
|-&lt;br /&gt;
| FG-1000 Stealth Fighter&lt;br /&gt;
| https://discord.gg/3MFZauxyPW&lt;br /&gt;
|-&lt;br /&gt;
|Boeing 777&lt;br /&gt;
|https://discord.gg/8McTuYdK&lt;br /&gt;
|-&lt;br /&gt;
|A-10A Warthog&lt;br /&gt;
|https://discord.gg/RmtjmsT5vS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* https://discord.com/ Official website&lt;br /&gt;
&lt;br /&gt;
[[de:Discord]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134690</id>
		<title>Ramp Marshall</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134690"/>
		<updated>2022-02-19T17:00:01Z</updated>

		<summary type="html">&lt;p&gt;Thilo: /* Prototype for a Visual Docking Guidance System (VDGS), entirely written in xml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''(ramp) marshaller''' is a person who guides [[aircraft]] using hand (and wand) signals at a parking ramp. This is a new feature that being worked on for a more generalized scale in [[FlightGear]]. Until this gets merged into the fgdata repository, you can get this from omega95's fgdata clone or the new Singapore Scenery development. &lt;br /&gt;
&lt;br /&gt;
Currently, support can be added to airports with the [[UFO]], but soon ramp marshallers will be added automatically if a parking spot's flag is set to enable it. This will integrate FlightGear parking positions, ramp marshallers and other features that might come up related to parking ramps or gates.&lt;br /&gt;
&lt;br /&gt;
These are videos of the first prototype of the ramp marshaller.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | c_KEbyv_h5A}} {{#ev:youtube | Hz4WU8nsdls}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== How to install the ramp marshaller ===&lt;br /&gt;
&lt;br /&gt;
# Download [https://github.com/RenanMsV/ramp-marshall this GitHub] and unzip it.&lt;br /&gt;
# Download this [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] &lt;br /&gt;
# Put the '''Ramp''' Folder (can be found under Models/Airports in the GitHub) in $FG-ROOT\Models\Airport&lt;br /&gt;
# Put the [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] and the '''addon-main.nas''' (can be found unter the GitHub) in $FG-ROOT\Nasal&lt;br /&gt;
# Put every File and Folder wich is left now from the GitHub in your addons folder (see: [[Addon|how to install addons in FlightGear]])&lt;br /&gt;
&lt;br /&gt;
== Using the ramp marshaller ==&lt;br /&gt;
To use the ramp marshaller with a compatible aircraft at a compatible airport (scroll down to see how you can make aircraft and/or airports compatible), simply taxi to the gate/ramp you want to park at and click on the marshaller waiting at the ramp. His hands should move from rest position (both wands down by his sides) to direct you to the ramp. It's recommended to taxi to the ramp on the taxiway lines as long as you can see them and once they go out of view, follow the marshaller's instructions. Make sure that you're not taxiing faster than 5 to 10 kts at the ramp.&lt;br /&gt;
&lt;br /&gt;
Currently, the ramp marshaller knows the following signals -&lt;br /&gt;
* Move forward&lt;br /&gt;
* Turn left&lt;br /&gt;
* Turn right&lt;br /&gt;
* Slow down and stop&lt;br /&gt;
* Immediate stop&lt;br /&gt;
&lt;br /&gt;
But we're teaching him new signals. If you want to teach him a signal, scroll down to find out how. To find out what the signals look like, take a look at the videos above.&lt;br /&gt;
&lt;br /&gt;
== Adding ramp marshalling support ==&lt;br /&gt;
=== Adding ramp marshalling compatibility to aircraft ===&lt;br /&gt;
[[File:A330-200 Ramp Marshall Compatibility - getting position with ac3D.png|thumb|270px|Demonstrating how to get x-position of nose gear with AC3D for ramp marshalling compatibility.]]&lt;br /&gt;
&lt;br /&gt;
It's actually very simple to add ramp marshalling compatibility to an aircraft, the only file required to be edited is the aircraft's [[Aircraft-set.xml|&amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file]] (or common xml file for aircraft groups). The user is still required to use some kind of 3D modeling program to get the position.&lt;br /&gt;
&lt;br /&gt;
# Open the aircraft's model file (containing the gears) with a 3D modeling program and get the '''x''' position of the center of the nose gear. (Or the position you want to rest at the ramp)&lt;br /&gt;
# Add the following code within the &amp;lt;code&amp;gt;&amp;lt;sim&amp;gt; ... &amp;lt;model&amp;gt; ... &amp;lt;/model&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft's &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file. (or common xml file for aircraft groups)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ramp&amp;gt;&lt;br /&gt;
    &amp;lt;x-m type=&amp;quot;float&amp;quot;&amp;gt;-15.9664&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;class type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;/ramp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The '''x''' position from the 3D model is in the &amp;lt;code&amp;gt;&amp;lt;x-m&amp;gt;&amp;lt;/code&amp;gt; tag and the aircraft class is in the &amp;lt;code&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/code&amp;gt; tag. With the current models, the aircraft classes are as follows -&lt;br /&gt;
:* 0 - 747s, 777-300s, A340s, A380s&lt;br /&gt;
:* 1 - 777-300s, A330-300s, 787s&lt;br /&gt;
:* 2 - A330-200s, 757s, 767s&lt;br /&gt;
:* 3 - A320s (includes A318s, A319s and A321s), 737s and other aircraft in general. This works for CRJs, E-jets etc.&lt;br /&gt;
&lt;br /&gt;
This should be all! The ramp marshaller should be able to ''recognize'' the aircraft and guide it to the right position at the ramp!&lt;br /&gt;
&lt;br /&gt;
=== Adding ramp marshallers to an airport ===&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' In the future, this will change because ramp marshall positions are going to be connected to an airport's '''groundnet.xml''' file.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp-marshall-arpt-1.png|thumb|270px|Placing ramp marshaller using ufo]]&lt;br /&gt;
[[File:ramp-marshall-arpt-2.png|thumb|270px|Converting STG file to ramps XML]]&lt;br /&gt;
&lt;br /&gt;
# Start up FlightGear with the UFO at the airport you want to place ramp marshallers.&lt;br /&gt;
# Hit the {{key press|L}} key on the keyboard to bring up the model selection dialog and select &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Models/Airport/Ramp/ramp.xml&amp;lt;/tt&amp;gt;. Using the ufo's scenery editing tools, place (and adjust) ramp marshallers everywhere you want. To make it simpler, click on the exact position you want the airplane to come to a stop. This will usually be at the end of a parking ramp's taxiway lines. Then, you will only have to change the heading.&lt;br /&gt;
# Once you've finished placing all the models, hit the {{key press|D}} key to dump the stg lines onto the console. (Do not close FlightGear yet) Copy the stg lines into a blank file. (name does not matter) And save it somewhere on your PC ($FG-HOME is a good place for that).&lt;br /&gt;
# Open up the Nasal console and execute the following function.&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;ramp_marshall.convert_stg();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Choose the stg file you pasted the dumped stg lines in to convert the file into a readable xml ramp position file. If you get following error: &amp;lt;code&amp;gt;(unauthorized directory - authorization no longer follows symlinks; to authorize reading additional directories, pass them to --allow-nasal-read)&amp;lt;/code&amp;gt;, type in Command line in the Launcher following phrase: &amp;lt;code&amp;gt;--allow-nasal-read=/path/to/directory&amp;lt;/code&amp;gt;. The converted file can be found &amp;lt;tt&amp;gt;[[$FG_HOME]]/Export&amp;lt;/tt&amp;gt; or under the Roaming folder in Windows.&lt;br /&gt;
# Copy the exported file (it will be called '''ramps-export.xml''') to &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/&amp;lt;icao&amp;gt;/ramps.xml&amp;lt;/tt&amp;gt;. For example, if you want these ramps at Singapore Changi Intl. Airport (WSSS), you'd put it in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/WSSS/ramps.xml&amp;lt;/tt&amp;gt;. (you have to rename the '''ramps-export.xml''' into '''ramps.xml'''). If there is no folder for your Airport, just create a new one with the icao of your Airport.&lt;br /&gt;
&lt;br /&gt;
== Contributing to the module ==&lt;br /&gt;
&lt;br /&gt;
=== Teach the ramp marshaller new signals ===&lt;br /&gt;
&lt;br /&gt;
The marshaller's signal positions are stored in the '''ramp_marhsall.nas''' Nasal file in a hash. This is so that the signals can be accessed easily by other functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var pos = {&lt;br /&gt;
	rest: rmPos.new(lA_x:80, rA_x:-80),&lt;br /&gt;
	stop: rmPos.new(lA_x:-55, lAO_x:-70, rA_x:55, rAO_x:70),&lt;br /&gt;
	fwd_out: rmPos.new(lA_z:-50, lAO_x:-30,  rA_z:50, rAO_x:30),&lt;br /&gt;
	fwd_in:  rmPos.new(lA_z:-50, lAO_x:-120, rA_z:50, rAO_x:120),&lt;br /&gt;
	left_in:   rmPos.new(lAO_x:-120),&lt;br /&gt;
	left_out:  rmPos.new(lAO_x:-30),&lt;br /&gt;
	right_in:  rmPos.new(rAO_x:120),&lt;br /&gt;
	right_out: rmPos.new(rAO_x:30)&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* lA_x - Left Arm (shoulder joint) x axis rotation&lt;br /&gt;
* lA_y - Left Arm (shoulder joint) y axis rotation&lt;br /&gt;
* lA_z - Left Arm (shoulder joint) z axis rotation&lt;br /&gt;
* lAO_x - Left Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* lH_x - Left Hand x axis rotation&lt;br /&gt;
* lH_y - Left Hand y axis rotation&lt;br /&gt;
* lH_z - Left Hand x axis rotation&lt;br /&gt;
* rA_x - Right Arm (shoulder joint) x axis rotation&lt;br /&gt;
* rA_y - Right Arm (shoulder joint) y axis rotation&lt;br /&gt;
* rA_z - Right Arm (shoulder joint) z axis rotation&lt;br /&gt;
* rAO_x - Right Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* rH_x - Right Hand x axis rotation&lt;br /&gt;
* rH_y - Right Hand y axis rotation&lt;br /&gt;
* rH_z - Right Hand x axis rotation&lt;br /&gt;
&lt;br /&gt;
You can mess with the positions in a 3D modeling program or in FlightGear itself. Just look in the property tree under &amp;lt;tt&amp;gt;/airports/{icao}/ramps/ramp[n]&amp;lt;/tt&amp;gt; (find the correct 'n' index for the person last clicked on by looking at the &amp;lt;tt&amp;gt;/airports/active-ramp&amp;lt;/tt&amp;gt; property) and set the ramp marshaller's function to something random (so it isn't recognized) and change the values in the tree. Note: to get this to work properly, you first have to click on the nearest ramp marshaller, look up his index, and then click on a different marshaller so that the other marshaller's properties are not updated.&lt;br /&gt;
&lt;br /&gt;
If you would like to add a new hand position (say both hands out stright), then you'd add this to the bottom of the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
     hands_out_front: rmPos.new(lA_z:-90, rA_z:90)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that one only needs to specify the rotations that are non-zero using hash syntax (key:value) in the arguments to the rmPos.new function. Remember to put a comma after the line right before the new one you add, since each line needs to end with a comma.&lt;br /&gt;
&lt;br /&gt;
Now, you can call this position as '''pos.hands_out_front''' to be used in the sequence function. Or if you'd like to get or set one of the position values.&lt;br /&gt;
&lt;br /&gt;
To add the signal sequence, add a new '''if''' state at the end of the last '''if(me.function == &amp;quot;&amp;lt;function_name&amp;gt;&amp;quot;''' statement with the sequence. You can use me.phase to control the sequence phase/step. &lt;br /&gt;
&lt;br /&gt;
Then, add the signal sequence. &lt;br /&gt;
&lt;br /&gt;
HINT - To animate the marshaller to a position you specified and then to go to the next step when it's complete and be achieved like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(me.phase == 0) {&lt;br /&gt;
    if(!check_pos(ramp_tree, pos.hands_out_front)) {&lt;br /&gt;
	full_animate(ramp_tree, pos.hands_out_front, 100);&lt;br /&gt;
    } else {&lt;br /&gt;
        me.phase = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code checks if the marshallers is not in the '''hands_out_front''' pos already and if he isn't, he'll move his hands to that position. In the full_animate function, you can specify the speed his hands should move at in ''degrees per second''. In this case, he'll move his hands forward to the specified position at 100 degrees per second.&lt;br /&gt;
&lt;br /&gt;
==== Useful internal functions ====&lt;br /&gt;
&lt;br /&gt;
* '''rmPos.new(lA_x, lA_z, lAO_x, rA_x, rA_z, rAO_x)''' creates and returns a new instance of the rmPos hash. This hash is in the '''pos.&amp;lt;pos_name&amp;gt;''' format and can be used in the functions below.&lt;br /&gt;
&lt;br /&gt;
* '''getDeviation(heading, target)''' returns the deviation to a target heading from your current heading. This is used by the marshaller to help guide you to the ramp.&lt;br /&gt;
&lt;br /&gt;
* '''animate(property, target, rate)''' animates a property (slowly changes the property value) to a target value at the given rate. (Rate is in degrees per second)&lt;br /&gt;
&lt;br /&gt;
* '''get_pos_values(ramp_tree)''' returns the current position of the marshaller's arms in a hash similar to that of the pos.&amp;lt;pos_name&amp;gt; hash.&lt;br /&gt;
&lt;br /&gt;
* '''check_pos(ramp_tree, target) returns true if the marshaller is at a given position. '''target''' must be a hash similar to the '''pos.&amp;lt;pos_name&amp;gt;''' hash. It is best to simply send a position specified in the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
* '''full_animate(ramp_tree, pos_hash, rate) animates the ramp marshaller to the given position at the given rate.&lt;br /&gt;
&lt;br /&gt;
* '''load_ramps(icao)''' loads all ramps (and marshallers) at the given airport.&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' If any of the functions has '''ramp_tree''' as an argument and the function is being used within the ''main_loop'', the variable '''ramp_tree''' must be passed as an argument.&lt;br /&gt;
&lt;br /&gt;
=== Using different models or textures ===&lt;br /&gt;
&lt;br /&gt;
Soon, new features will becoming available which lets the ramp marshaller model be specified in the position config file.&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
&lt;br /&gt;
=== Visual Docking Guidance System ===&lt;br /&gt;
&lt;br /&gt;
===Prototype for a Visual Docking Guidance System (VDGS), entirely written in xml===&lt;br /&gt;
{{#ev:youtube | fgG55zZQx-k}}&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
===Wiki articles===&lt;br /&gt;
*[[Walk view]]&lt;br /&gt;
&lt;br /&gt;
===Forum topics===&lt;br /&gt;
*{{forum link|t=20572|title=Nasal based Independant Ramp Marshall}} (August 2013-Mars 2018)&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git Omega95's fgdata Gitorious archive] archived from the {{gitorious source|proj=fg|repo=omega95s-fgdata|text=original}} Mars 30, 2016.&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/?origin_url=https%3A%2F%2Fgitorious.org%2Ffg-singapore-scenery%2Ffg-singapore-devel.git FG Singapore Scenery Gitorious archive] archived from the {{gitorious source|proj=fg-singapore-scenery|repo=fg-singapore-devel|text=original}} Mars 30, 2016.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134685</id>
		<title>Ramp Marshall</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134685"/>
		<updated>2022-02-17T20:07:41Z</updated>

		<summary type="html">&lt;p&gt;Thilo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''(ramp) marshaller''' is a person who guides [[aircraft]] using hand (and wand) signals at a parking ramp. This is a new feature that being worked on for a more generalized scale in [[FlightGear]]. Until this gets merged into the fgdata repository, you can get this from omega95's fgdata clone or the new Singapore Scenery development. &lt;br /&gt;
&lt;br /&gt;
Currently, support can be added to airports with the [[UFO]], but soon ramp marshallers will be added automatically if a parking spot's flag is set to enable it. This will integrate FlightGear parking positions, ramp marshallers and other features that might come up related to parking ramps or gates.&lt;br /&gt;
&lt;br /&gt;
These are videos of the first prototype of the ramp marshaller.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | c_KEbyv_h5A}} {{#ev:youtube | Hz4WU8nsdls}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== How to install the ramp marshaller ===&lt;br /&gt;
&lt;br /&gt;
# Download [https://github.com/RenanMsV/ramp-marshall this GitHub] and unzip it.&lt;br /&gt;
# Download this [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] &lt;br /&gt;
# Put the '''Ramp''' Folder (can be found under Models/Airports in the GitHub) in $FG-ROOT\Models\Airport&lt;br /&gt;
# Put the [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] and the '''addon-main.nas''' (can be found unter the GitHub) in $FG-ROOT\Nasal&lt;br /&gt;
# Put every File and Folder wich is left now from the GitHub in your addons folder (see: [[Addon|how to install addons in FlightGear]])&lt;br /&gt;
&lt;br /&gt;
== Using the ramp marshaller ==&lt;br /&gt;
To use the ramp marshaller with a compatible aircraft at a compatible airport (scroll down to see how you can make aircraft and/or airports compatible), simply taxi to the gate/ramp you want to park at and click on the marshaller waiting at the ramp. His hands should move from rest position (both wands down by his sides) to direct you to the ramp. It's recommended to taxi to the ramp on the taxiway lines as long as you can see them and once they go out of view, follow the marshaller's instructions. Make sure that you're not taxiing faster than 5 to 10 kts at the ramp.&lt;br /&gt;
&lt;br /&gt;
Currently, the ramp marshaller knows the following signals -&lt;br /&gt;
* Move forward&lt;br /&gt;
* Turn left&lt;br /&gt;
* Turn right&lt;br /&gt;
* Slow down and stop&lt;br /&gt;
* Immediate stop&lt;br /&gt;
&lt;br /&gt;
But we're teaching him new signals. If you want to teach him a signal, scroll down to find out how. To find out what the signals look like, take a look at the videos above.&lt;br /&gt;
&lt;br /&gt;
== Adding ramp marshalling support ==&lt;br /&gt;
=== Adding ramp marshalling compatibility to aircraft ===&lt;br /&gt;
[[File:A330-200 Ramp Marshall Compatibility - getting position with ac3D.png|thumb|270px|Demonstrating how to get x-position of nose gear with AC3D for ramp marshalling compatibility.]]&lt;br /&gt;
&lt;br /&gt;
It's actually very simple to add ramp marshalling compatibility to an aircraft, the only file required to be edited is the aircraft's [[Aircraft-set.xml|&amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file]] (or common xml file for aircraft groups). The user is still required to use some kind of 3D modeling program to get the position.&lt;br /&gt;
&lt;br /&gt;
# Open the aircraft's model file (containing the gears) with a 3D modeling program and get the '''x''' position of the center of the nose gear. (Or the position you want to rest at the ramp)&lt;br /&gt;
# Add the following code within the &amp;lt;code&amp;gt;&amp;lt;sim&amp;gt; ... &amp;lt;model&amp;gt; ... &amp;lt;/model&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft's &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file. (or common xml file for aircraft groups)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ramp&amp;gt;&lt;br /&gt;
    &amp;lt;x-m type=&amp;quot;float&amp;quot;&amp;gt;-15.9664&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;class type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;/ramp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The '''x''' position from the 3D model is in the &amp;lt;code&amp;gt;&amp;lt;x-m&amp;gt;&amp;lt;/code&amp;gt; tag and the aircraft class is in the &amp;lt;code&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/code&amp;gt; tag. With the current models, the aircraft classes are as follows -&lt;br /&gt;
:* 0 - 747s, 777-300s, A340s, A380s&lt;br /&gt;
:* 1 - 777-300s, A330-300s, 787s&lt;br /&gt;
:* 2 - A330-200s, 757s, 767s&lt;br /&gt;
:* 3 - A320s (includes A318s, A319s and A321s), 737s and other aircraft in general. This works for CRJs, E-jets etc.&lt;br /&gt;
&lt;br /&gt;
This should be all! The ramp marshaller should be able to ''recognize'' the aircraft and guide it to the right position at the ramp!&lt;br /&gt;
&lt;br /&gt;
=== Adding ramp marshallers to an airport ===&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' In the future, this will change because ramp marshall positions are going to be connected to an airport's '''groundnet.xml''' file.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp-marshall-arpt-1.png|thumb|270px|Placing ramp marshaller using ufo]]&lt;br /&gt;
[[File:ramp-marshall-arpt-2.png|thumb|270px|Converting STG file to ramps XML]]&lt;br /&gt;
&lt;br /&gt;
# Start up FlightGear with the UFO at the airport you want to place ramp marshallers.&lt;br /&gt;
# Hit the {{key press|L}} key on the keyboard to bring up the model selection dialog and select &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Models/Airport/Ramp/ramp.xml&amp;lt;/tt&amp;gt;. Using the ufo's scenery editing tools, place (and adjust) ramp marshallers everywhere you want. To make it simpler, click on the exact position you want the airplane to come to a stop. This will usually be at the end of a parking ramp's taxiway lines. Then, you will only have to change the heading.&lt;br /&gt;
# Once you've finished placing all the models, hit the {{key press|D}} key to dump the stg lines onto the console. (Do not close FlightGear yet) Copy the stg lines into a blank file. (name does not matter) And save it somewhere on your PC ($FG-HOME is a good place for that).&lt;br /&gt;
# Open up the Nasal console and execute the following function.&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;ramp_marshall.convert_stg();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Choose the stg file you pasted the dumped stg lines in to convert the file into a readable xml ramp position file. If you get following error: &amp;lt;code&amp;gt;(unauthorized directory - authorization no longer follows symlinks; to authorize reading additional directories, pass them to --allow-nasal-read)&amp;lt;/code&amp;gt;, type in Command line in the Launcher following phrase: &amp;lt;code&amp;gt;--allow-nasal-read=/path/to/directory&amp;lt;/code&amp;gt;. The converted file can be found &amp;lt;tt&amp;gt;[[$FG_HOME]]/Export&amp;lt;/tt&amp;gt; or under the Roaming folder in Windows.&lt;br /&gt;
# Copy the exported file (it will be called '''ramps-export.xml''') to &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/&amp;lt;icao&amp;gt;/ramps.xml&amp;lt;/tt&amp;gt;. For example, if you want these ramps at Singapore Changi Intl. Airport (WSSS), you'd put it in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/WSSS/ramps.xml&amp;lt;/tt&amp;gt;. (you have to rename the '''ramps-export.xml''' into '''ramps.xml'''). If there is no folder for your Airport, just create a new one with the icao of your Airport.&lt;br /&gt;
&lt;br /&gt;
== Contributing to the module ==&lt;br /&gt;
&lt;br /&gt;
=== Teach the ramp marshaller new signals ===&lt;br /&gt;
&lt;br /&gt;
The marshaller's signal positions are stored in the '''ramp_marhsall.nas''' Nasal file in a hash. This is so that the signals can be accessed easily by other functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var pos = {&lt;br /&gt;
	rest: rmPos.new(lA_x:80, rA_x:-80),&lt;br /&gt;
	stop: rmPos.new(lA_x:-55, lAO_x:-70, rA_x:55, rAO_x:70),&lt;br /&gt;
	fwd_out: rmPos.new(lA_z:-50, lAO_x:-30,  rA_z:50, rAO_x:30),&lt;br /&gt;
	fwd_in:  rmPos.new(lA_z:-50, lAO_x:-120, rA_z:50, rAO_x:120),&lt;br /&gt;
	left_in:   rmPos.new(lAO_x:-120),&lt;br /&gt;
	left_out:  rmPos.new(lAO_x:-30),&lt;br /&gt;
	right_in:  rmPos.new(rAO_x:120),&lt;br /&gt;
	right_out: rmPos.new(rAO_x:30)&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* lA_x - Left Arm (shoulder joint) x axis rotation&lt;br /&gt;
* lA_y - Left Arm (shoulder joint) y axis rotation&lt;br /&gt;
* lA_z - Left Arm (shoulder joint) z axis rotation&lt;br /&gt;
* lAO_x - Left Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* lH_x - Left Hand x axis rotation&lt;br /&gt;
* lH_y - Left Hand y axis rotation&lt;br /&gt;
* lH_z - Left Hand x axis rotation&lt;br /&gt;
* rA_x - Right Arm (shoulder joint) x axis rotation&lt;br /&gt;
* rA_y - Right Arm (shoulder joint) y axis rotation&lt;br /&gt;
* rA_z - Right Arm (shoulder joint) z axis rotation&lt;br /&gt;
* rAO_x - Right Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* rH_x - Right Hand x axis rotation&lt;br /&gt;
* rH_y - Right Hand y axis rotation&lt;br /&gt;
* rH_z - Right Hand x axis rotation&lt;br /&gt;
&lt;br /&gt;
You can mess with the positions in a 3D modeling program or in FlightGear itself. Just look in the property tree under &amp;lt;tt&amp;gt;/airports/{icao}/ramps/ramp[n]&amp;lt;/tt&amp;gt; (find the correct 'n' index for the person last clicked on by looking at the &amp;lt;tt&amp;gt;/airports/active-ramp&amp;lt;/tt&amp;gt; property) and set the ramp marshaller's function to something random (so it isn't recognized) and change the values in the tree. Note: to get this to work properly, you first have to click on the nearest ramp marshaller, look up his index, and then click on a different marshaller so that the other marshaller's properties are not updated.&lt;br /&gt;
&lt;br /&gt;
If you would like to add a new hand position (say both hands out stright), then you'd add this to the bottom of the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
     hands_out_front: rmPos.new(lA_z:-90, rA_z:90)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that one only needs to specify the rotations that are non-zero using hash syntax (key:value) in the arguments to the rmPos.new function. Remember to put a comma after the line right before the new one you add, since each line needs to end with a comma.&lt;br /&gt;
&lt;br /&gt;
Now, you can call this position as '''pos.hands_out_front''' to be used in the sequence function. Or if you'd like to get or set one of the position values.&lt;br /&gt;
&lt;br /&gt;
To add the signal sequence, add a new '''if''' state at the end of the last '''if(me.function == &amp;quot;&amp;lt;function_name&amp;gt;&amp;quot;''' statement with the sequence. You can use me.phase to control the sequence phase/step. &lt;br /&gt;
&lt;br /&gt;
Then, add the signal sequence. &lt;br /&gt;
&lt;br /&gt;
HINT - To animate the marshaller to a position you specified and then to go to the next step when it's complete and be achieved like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(me.phase == 0) {&lt;br /&gt;
    if(!check_pos(ramp_tree, pos.hands_out_front)) {&lt;br /&gt;
	full_animate(ramp_tree, pos.hands_out_front, 100);&lt;br /&gt;
    } else {&lt;br /&gt;
        me.phase = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code checks if the marshallers is not in the '''hands_out_front''' pos already and if he isn't, he'll move his hands to that position. In the full_animate function, you can specify the speed his hands should move at in ''degrees per second''. In this case, he'll move his hands forward to the specified position at 100 degrees per second.&lt;br /&gt;
&lt;br /&gt;
==== Useful internal functions ====&lt;br /&gt;
&lt;br /&gt;
* '''rmPos.new(lA_x, lA_z, lAO_x, rA_x, rA_z, rAO_x)''' creates and returns a new instance of the rmPos hash. This hash is in the '''pos.&amp;lt;pos_name&amp;gt;''' format and can be used in the functions below.&lt;br /&gt;
&lt;br /&gt;
* '''getDeviation(heading, target)''' returns the deviation to a target heading from your current heading. This is used by the marshaller to help guide you to the ramp.&lt;br /&gt;
&lt;br /&gt;
* '''animate(property, target, rate)''' animates a property (slowly changes the property value) to a target value at the given rate. (Rate is in degrees per second)&lt;br /&gt;
&lt;br /&gt;
* '''get_pos_values(ramp_tree)''' returns the current position of the marshaller's arms in a hash similar to that of the pos.&amp;lt;pos_name&amp;gt; hash.&lt;br /&gt;
&lt;br /&gt;
* '''check_pos(ramp_tree, target) returns true if the marshaller is at a given position. '''target''' must be a hash similar to the '''pos.&amp;lt;pos_name&amp;gt;''' hash. It is best to simply send a position specified in the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
* '''full_animate(ramp_tree, pos_hash, rate) animates the ramp marshaller to the given position at the given rate.&lt;br /&gt;
&lt;br /&gt;
* '''load_ramps(icao)''' loads all ramps (and marshallers) at the given airport.&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' If any of the functions has '''ramp_tree''' as an argument and the function is being used within the ''main_loop'', the variable '''ramp_tree''' must be passed as an argument.&lt;br /&gt;
&lt;br /&gt;
=== Using different models or textures ===&lt;br /&gt;
&lt;br /&gt;
Soon, new features will becoming available which lets the ramp marshaller model be specified in the position config file.&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
&lt;br /&gt;
=== Visual Docking Guidance System ===&lt;br /&gt;
&lt;br /&gt;
===Prototype for a Visual Docking Guidance System (VDGS), entirely written in xml===&lt;br /&gt;
{{#ev:youtube | 5YYo2jPAlIw}}&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
===Wiki articles===&lt;br /&gt;
*[[Walk view]]&lt;br /&gt;
&lt;br /&gt;
===Forum topics===&lt;br /&gt;
*{{forum link|t=20572|title=Nasal based Independant Ramp Marshall}} (August 2013-Mars 2018)&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git Omega95's fgdata Gitorious archive] archived from the {{gitorious source|proj=fg|repo=omega95s-fgdata|text=original}} Mars 30, 2016.&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/?origin_url=https%3A%2F%2Fgitorious.org%2Ffg-singapore-scenery%2Ffg-singapore-devel.git FG Singapore Scenery Gitorious archive] archived from the {{gitorious source|proj=fg-singapore-scenery|repo=fg-singapore-devel|text=original}} Mars 30, 2016.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134684</id>
		<title>Ramp Marshall</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134684"/>
		<updated>2022-02-17T20:05:37Z</updated>

		<summary type="html">&lt;p&gt;Thilo: /* Prototype for a Visual Docking Guidance System (VDGS), entirely written in xml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''(ramp) marshaller''' is a person who guides [[aircraft]] using hand (and wand) signals at a parking ramp. This is a new feature that being worked on for a more generalized scale in [[FlightGear]]. Until this gets merged into the fgdata repository, you can get this from omega95's fgdata clone or the new Singapore Scenery development. &lt;br /&gt;
&lt;br /&gt;
Currently, support can be added to airports with the [[UFO]], but soon ramp marshallers will be added automatically if a parking spot's flag is set to enable it. This will integrate FlightGear parking positions, ramp marshallers and other features that might come up related to parking ramps or gates.&lt;br /&gt;
&lt;br /&gt;
These are videos of the first prototype of the ramp marshaller.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | c_KEbyv_h5A}} {{#ev:youtube | Hz4WU8nsdls}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== How to install the ramp marshaller ===&lt;br /&gt;
&lt;br /&gt;
# Download [https://github.com/RenanMsV/ramp-marshall this GitHub] and unzip it.&lt;br /&gt;
# Download this [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] &lt;br /&gt;
# Put the '''Ramp''' Folder (can be found under Models/Airports in the GitHub) in $FG-ROOT\Models\Airport&lt;br /&gt;
# Put the [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] and the '''addon-main.nas''' (can be found unter the GitHub) in $FG-ROOT\Nasal&lt;br /&gt;
# Put every File and Folder wich is left now from the GitHub in your addons folder (see: [[Addon|how to install addons in FlightGear]])&lt;br /&gt;
&lt;br /&gt;
== Using the ramp marshaller ==&lt;br /&gt;
To use the ramp marshaller with a compatible aircraft at a compatible airport (scroll down to see how you can make aircraft and/or airports compatible), simply taxi to the gate/ramp you want to park at and click on the marshaller waiting at the ramp. His hands should move from rest position (both wands down by his sides) to direct you to the ramp. It's recommended to taxi to the ramp on the taxiway lines as long as you can see them and once they go out of view, follow the marshaller's instructions. Make sure that you're not taxiing faster than 5 to 10 kts at the ramp.&lt;br /&gt;
&lt;br /&gt;
Currently, the ramp marshaller knows the following signals -&lt;br /&gt;
* Move forward&lt;br /&gt;
* Turn left&lt;br /&gt;
* Turn right&lt;br /&gt;
* Slow down and stop&lt;br /&gt;
* Immediate stop&lt;br /&gt;
&lt;br /&gt;
But we're teaching him new signals. If you want to teach him a signal, scroll down to find out how. To find out what the signals look like, take a look at the videos above.&lt;br /&gt;
&lt;br /&gt;
== Adding ramp marshalling support ==&lt;br /&gt;
=== Adding ramp marshalling compatibility to aircraft ===&lt;br /&gt;
[[File:A330-200 Ramp Marshall Compatibility - getting position with ac3D.png|thumb|270px|Demonstrating how to get x-position of nose gear with AC3D for ramp marshalling compatibility.]]&lt;br /&gt;
&lt;br /&gt;
It's actually very simple to add ramp marshalling compatibility to an aircraft, the only file required to be edited is the aircraft's [[Aircraft-set.xml|&amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file]] (or common xml file for aircraft groups). The user is still required to use some kind of 3D modeling program to get the position.&lt;br /&gt;
&lt;br /&gt;
# Open the aircraft's model file (containing the gears) with a 3D modeling program and get the '''x''' position of the center of the nose gear. (Or the position you want to rest at the ramp)&lt;br /&gt;
# Add the following code within the &amp;lt;code&amp;gt;&amp;lt;sim&amp;gt; ... &amp;lt;model&amp;gt; ... &amp;lt;/model&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft's &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file. (or common xml file for aircraft groups)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ramp&amp;gt;&lt;br /&gt;
    &amp;lt;x-m type=&amp;quot;float&amp;quot;&amp;gt;-15.9664&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;class type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;/ramp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The '''x''' position from the 3D model is in the &amp;lt;code&amp;gt;&amp;lt;x-m&amp;gt;&amp;lt;/code&amp;gt; tag and the aircraft class is in the &amp;lt;code&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/code&amp;gt; tag. With the current models, the aircraft classes are as follows -&lt;br /&gt;
:* 0 - 747s, 777-300s, A340s, A380s&lt;br /&gt;
:* 1 - 777-300s, A330-300s, 787s&lt;br /&gt;
:* 2 - A330-200s, 757s, 767s&lt;br /&gt;
:* 3 - A320s (includes A318s, A319s and A321s), 737s and other aircraft in general. This works for CRJs, E-jets etc.&lt;br /&gt;
&lt;br /&gt;
This should be all! The ramp marshaller should be able to ''recognize'' the aircraft and guide it to the right position at the ramp!&lt;br /&gt;
&lt;br /&gt;
=== Adding ramp marshallers to an airport ===&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' In the future, this will change because ramp marshall positions are going to be connected to an airport's '''groundnet.xml''' file.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp-marshall-arpt-1.png|thumb|270px|Placing ramp marshaller using ufo]]&lt;br /&gt;
[[File:ramp-marshall-arpt-2.png|thumb|270px|Converting STG file to ramps XML]]&lt;br /&gt;
&lt;br /&gt;
# Start up FlightGear with the UFO at the airport you want to place ramp marshallers.&lt;br /&gt;
# Hit the {{key press|L}} key on the keyboard to bring up the model selection dialog and select &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Models/Airport/Ramp/ramp.xml&amp;lt;/tt&amp;gt;. Using the ufo's scenery editing tools, place (and adjust) ramp marshallers everywhere you want. To make it simpler, click on the exact position you want the airplane to come to a stop. This will usually be at the end of a parking ramp's taxiway lines. Then, you will only have to change the heading.&lt;br /&gt;
# Once you've finished placing all the models, hit the {{key press|D}} key to dump the stg lines onto the console. (Do not close FlightGear yet) Copy the stg lines into a blank file. (name does not matter) And save it somewhere on your PC ($FG-HOME is a good place for that).&lt;br /&gt;
# Open up the Nasal console and execute the following function.&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;ramp_marshall.convert_stg();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Choose the stg file you pasted the dumped stg lines in to convert the file into a readable xml ramp position file. If you get following error: &amp;lt;code&amp;gt;(unauthorized directory - authorization no longer follows symlinks; to authorize reading additional directories, pass them to --allow-nasal-read)&amp;lt;/code&amp;gt;, type in Command line in the Launcher following phrase: &amp;lt;code&amp;gt;--allow-nasal-read=/path/to/directory&amp;lt;/code&amp;gt;. The converted file can be found &amp;lt;tt&amp;gt;[[$FG_HOME]]/Export&amp;lt;/tt&amp;gt; or under the Roaming folder in Windows.&lt;br /&gt;
# Copy the exported file (it will be called '''ramps-export.xml''') to &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/&amp;lt;icao&amp;gt;/ramps.xml&amp;lt;/tt&amp;gt;. For example, if you want these ramps at Singapore Changi Intl. Airport (WSSS), you'd put it in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/WSSS/ramps.xml&amp;lt;/tt&amp;gt;. (you have to rename the '''ramps-export.xml''' into '''ramps.xml'''). If there is no folder for your Airport, just create a new one with the icao of your Airport.&lt;br /&gt;
&lt;br /&gt;
== Contributing to the module ==&lt;br /&gt;
&lt;br /&gt;
=== Teach the ramp marshaller new signals ===&lt;br /&gt;
&lt;br /&gt;
The marshaller's signal positions are stored in the '''ramp_marhsall.nas''' Nasal file in a hash. This is so that the signals can be accessed easily by other functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var pos = {&lt;br /&gt;
	rest: rmPos.new(lA_x:80, rA_x:-80),&lt;br /&gt;
	stop: rmPos.new(lA_x:-55, lAO_x:-70, rA_x:55, rAO_x:70),&lt;br /&gt;
	fwd_out: rmPos.new(lA_z:-50, lAO_x:-30,  rA_z:50, rAO_x:30),&lt;br /&gt;
	fwd_in:  rmPos.new(lA_z:-50, lAO_x:-120, rA_z:50, rAO_x:120),&lt;br /&gt;
	left_in:   rmPos.new(lAO_x:-120),&lt;br /&gt;
	left_out:  rmPos.new(lAO_x:-30),&lt;br /&gt;
	right_in:  rmPos.new(rAO_x:120),&lt;br /&gt;
	right_out: rmPos.new(rAO_x:30)&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* lA_x - Left Arm (shoulder joint) x axis rotation&lt;br /&gt;
* lA_y - Left Arm (shoulder joint) y axis rotation&lt;br /&gt;
* lA_z - Left Arm (shoulder joint) z axis rotation&lt;br /&gt;
* lAO_x - Left Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* lH_x - Left Hand x axis rotation&lt;br /&gt;
* lH_y - Left Hand y axis rotation&lt;br /&gt;
* lH_z - Left Hand x axis rotation&lt;br /&gt;
* rA_x - Right Arm (shoulder joint) x axis rotation&lt;br /&gt;
* rA_y - Right Arm (shoulder joint) y axis rotation&lt;br /&gt;
* rA_z - Right Arm (shoulder joint) z axis rotation&lt;br /&gt;
* rAO_x - Right Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* rH_x - Right Hand x axis rotation&lt;br /&gt;
* rH_y - Right Hand y axis rotation&lt;br /&gt;
* rH_z - Right Hand x axis rotation&lt;br /&gt;
&lt;br /&gt;
You can mess with the positions in a 3D modeling program or in FlightGear itself. Just look in the property tree under &amp;lt;tt&amp;gt;/airports/{icao}/ramps/ramp[n]&amp;lt;/tt&amp;gt; (find the correct 'n' index for the person last clicked on by looking at the &amp;lt;tt&amp;gt;/airports/active-ramp&amp;lt;/tt&amp;gt; property) and set the ramp marshaller's function to something random (so it isn't recognized) and change the values in the tree. Note: to get this to work properly, you first have to click on the nearest ramp marshaller, look up his index, and then click on a different marshaller so that the other marshaller's properties are not updated.&lt;br /&gt;
&lt;br /&gt;
If you would like to add a new hand position (say both hands out stright), then you'd add this to the bottom of the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
     hands_out_front: rmPos.new(lA_z:-90, rA_z:90)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that one only needs to specify the rotations that are non-zero using hash syntax (key:value) in the arguments to the rmPos.new function. Remember to put a comma after the line right before the new one you add, since each line needs to end with a comma.&lt;br /&gt;
&lt;br /&gt;
Now, you can call this position as '''pos.hands_out_front''' to be used in the sequence function. Or if you'd like to get or set one of the position values.&lt;br /&gt;
&lt;br /&gt;
To add the signal sequence, add a new '''if''' state at the end of the last '''if(me.function == &amp;quot;&amp;lt;function_name&amp;gt;&amp;quot;''' statement with the sequence. You can use me.phase to control the sequence phase/step. &lt;br /&gt;
&lt;br /&gt;
Then, add the signal sequence. &lt;br /&gt;
&lt;br /&gt;
HINT - To animate the marshaller to a position you specified and then to go to the next step when it's complete and be achieved like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(me.phase == 0) {&lt;br /&gt;
    if(!check_pos(ramp_tree, pos.hands_out_front)) {&lt;br /&gt;
	full_animate(ramp_tree, pos.hands_out_front, 100);&lt;br /&gt;
    } else {&lt;br /&gt;
        me.phase = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code checks if the marshallers is not in the '''hands_out_front''' pos already and if he isn't, he'll move his hands to that position. In the full_animate function, you can specify the speed his hands should move at in ''degrees per second''. In this case, he'll move his hands forward to the specified position at 100 degrees per second.&lt;br /&gt;
&lt;br /&gt;
==== Useful internal functions ====&lt;br /&gt;
&lt;br /&gt;
* '''rmPos.new(lA_x, lA_z, lAO_x, rA_x, rA_z, rAO_x)''' creates and returns a new instance of the rmPos hash. This hash is in the '''pos.&amp;lt;pos_name&amp;gt;''' format and can be used in the functions below.&lt;br /&gt;
&lt;br /&gt;
* '''getDeviation(heading, target)''' returns the deviation to a target heading from your current heading. This is used by the marshaller to help guide you to the ramp.&lt;br /&gt;
&lt;br /&gt;
* '''animate(property, target, rate)''' animates a property (slowly changes the property value) to a target value at the given rate. (Rate is in degrees per second)&lt;br /&gt;
&lt;br /&gt;
* '''get_pos_values(ramp_tree)''' returns the current position of the marshaller's arms in a hash similar to that of the pos.&amp;lt;pos_name&amp;gt; hash.&lt;br /&gt;
&lt;br /&gt;
* '''check_pos(ramp_tree, target) returns true if the marshaller is at a given position. '''target''' must be a hash similar to the '''pos.&amp;lt;pos_name&amp;gt;''' hash. It is best to simply send a position specified in the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
* '''full_animate(ramp_tree, pos_hash, rate) animates the ramp marshaller to the given position at the given rate.&lt;br /&gt;
&lt;br /&gt;
* '''load_ramps(icao)''' loads all ramps (and marshallers) at the given airport.&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' If any of the functions has '''ramp_tree''' as an argument and the function is being used within the ''main_loop'', the variable '''ramp_tree''' must be passed as an argument.&lt;br /&gt;
&lt;br /&gt;
=== Using different models or textures ===&lt;br /&gt;
&lt;br /&gt;
Soon, new features will becoming available which lets the ramp marshaller model be specified in the position config file.&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
&lt;br /&gt;
=== Visual Docking Guidance System ===&lt;br /&gt;
&lt;br /&gt;
===Prototype for a Visual Docking Guidance System (VDGS), entirely written in xml===&lt;br /&gt;
https://youtu.be/5YYo2jPAlIw&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
===Wiki articles===&lt;br /&gt;
*[[Walk view]]&lt;br /&gt;
&lt;br /&gt;
===Forum topics===&lt;br /&gt;
*{{forum link|t=20572|title=Nasal based Independant Ramp Marshall}} (August 2013-Mars 2018)&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git Omega95's fgdata Gitorious archive] archived from the {{gitorious source|proj=fg|repo=omega95s-fgdata|text=original}} Mars 30, 2016.&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/?origin_url=https%3A%2F%2Fgitorious.org%2Ffg-singapore-scenery%2Ffg-singapore-devel.git FG Singapore Scenery Gitorious archive] archived from the {{gitorious source|proj=fg-singapore-scenery|repo=fg-singapore-devel|text=original}} Mars 30, 2016.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134683</id>
		<title>Ramp Marshall</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134683"/>
		<updated>2022-02-17T20:01:03Z</updated>

		<summary type="html">&lt;p&gt;Thilo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''(ramp) marshaller''' is a person who guides [[aircraft]] using hand (and wand) signals at a parking ramp. This is a new feature that being worked on for a more generalized scale in [[FlightGear]]. Until this gets merged into the fgdata repository, you can get this from omega95's fgdata clone or the new Singapore Scenery development. &lt;br /&gt;
&lt;br /&gt;
Currently, support can be added to airports with the [[UFO]], but soon ramp marshallers will be added automatically if a parking spot's flag is set to enable it. This will integrate FlightGear parking positions, ramp marshallers and other features that might come up related to parking ramps or gates.&lt;br /&gt;
&lt;br /&gt;
These are videos of the first prototype of the ramp marshaller.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | c_KEbyv_h5A}} {{#ev:youtube | Hz4WU8nsdls}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== How to install the ramp marshaller ===&lt;br /&gt;
&lt;br /&gt;
# Download [https://github.com/RenanMsV/ramp-marshall this GitHub] and unzip it.&lt;br /&gt;
# Download this [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] &lt;br /&gt;
# Put the '''Ramp''' Folder (can be found under Models/Airports in the GitHub) in $FG-ROOT\Models\Airport&lt;br /&gt;
# Put the [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] and the '''addon-main.nas''' (can be found unter the GitHub) in $FG-ROOT\Nasal&lt;br /&gt;
# Put every File and Folder wich is left now from the GitHub in your addons folder (see: [[Addon|how to install addons in FlightGear]])&lt;br /&gt;
&lt;br /&gt;
== Using the ramp marshaller ==&lt;br /&gt;
To use the ramp marshaller with a compatible aircraft at a compatible airport (scroll down to see how you can make aircraft and/or airports compatible), simply taxi to the gate/ramp you want to park at and click on the marshaller waiting at the ramp. His hands should move from rest position (both wands down by his sides) to direct you to the ramp. It's recommended to taxi to the ramp on the taxiway lines as long as you can see them and once they go out of view, follow the marshaller's instructions. Make sure that you're not taxiing faster than 5 to 10 kts at the ramp.&lt;br /&gt;
&lt;br /&gt;
Currently, the ramp marshaller knows the following signals -&lt;br /&gt;
* Move forward&lt;br /&gt;
* Turn left&lt;br /&gt;
* Turn right&lt;br /&gt;
* Slow down and stop&lt;br /&gt;
* Immediate stop&lt;br /&gt;
&lt;br /&gt;
But we're teaching him new signals. If you want to teach him a signal, scroll down to find out how. To find out what the signals look like, take a look at the videos above.&lt;br /&gt;
&lt;br /&gt;
== Adding ramp marshalling support ==&lt;br /&gt;
=== Adding ramp marshalling compatibility to aircraft ===&lt;br /&gt;
[[File:A330-200 Ramp Marshall Compatibility - getting position with ac3D.png|thumb|270px|Demonstrating how to get x-position of nose gear with AC3D for ramp marshalling compatibility.]]&lt;br /&gt;
&lt;br /&gt;
It's actually very simple to add ramp marshalling compatibility to an aircraft, the only file required to be edited is the aircraft's [[Aircraft-set.xml|&amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file]] (or common xml file for aircraft groups). The user is still required to use some kind of 3D modeling program to get the position.&lt;br /&gt;
&lt;br /&gt;
# Open the aircraft's model file (containing the gears) with a 3D modeling program and get the '''x''' position of the center of the nose gear. (Or the position you want to rest at the ramp)&lt;br /&gt;
# Add the following code within the &amp;lt;code&amp;gt;&amp;lt;sim&amp;gt; ... &amp;lt;model&amp;gt; ... &amp;lt;/model&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft's &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file. (or common xml file for aircraft groups)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ramp&amp;gt;&lt;br /&gt;
    &amp;lt;x-m type=&amp;quot;float&amp;quot;&amp;gt;-15.9664&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;class type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;/ramp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The '''x''' position from the 3D model is in the &amp;lt;code&amp;gt;&amp;lt;x-m&amp;gt;&amp;lt;/code&amp;gt; tag and the aircraft class is in the &amp;lt;code&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/code&amp;gt; tag. With the current models, the aircraft classes are as follows -&lt;br /&gt;
:* 0 - 747s, 777-300s, A340s, A380s&lt;br /&gt;
:* 1 - 777-300s, A330-300s, 787s&lt;br /&gt;
:* 2 - A330-200s, 757s, 767s&lt;br /&gt;
:* 3 - A320s (includes A318s, A319s and A321s), 737s and other aircraft in general. This works for CRJs, E-jets etc.&lt;br /&gt;
&lt;br /&gt;
This should be all! The ramp marshaller should be able to ''recognize'' the aircraft and guide it to the right position at the ramp!&lt;br /&gt;
&lt;br /&gt;
=== Adding ramp marshallers to an airport ===&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' In the future, this will change because ramp marshall positions are going to be connected to an airport's '''groundnet.xml''' file.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp-marshall-arpt-1.png|thumb|270px|Placing ramp marshaller using ufo]]&lt;br /&gt;
[[File:ramp-marshall-arpt-2.png|thumb|270px|Converting STG file to ramps XML]]&lt;br /&gt;
&lt;br /&gt;
# Start up FlightGear with the UFO at the airport you want to place ramp marshallers.&lt;br /&gt;
# Hit the {{key press|L}} key on the keyboard to bring up the model selection dialog and select &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Models/Airport/Ramp/ramp.xml&amp;lt;/tt&amp;gt;. Using the ufo's scenery editing tools, place (and adjust) ramp marshallers everywhere you want. To make it simpler, click on the exact position you want the airplane to come to a stop. This will usually be at the end of a parking ramp's taxiway lines. Then, you will only have to change the heading.&lt;br /&gt;
# Once you've finished placing all the models, hit the {{key press|D}} key to dump the stg lines onto the console. (Do not close FlightGear yet) Copy the stg lines into a blank file. (name does not matter) And save it somewhere on your PC ($FG-HOME is a good place for that).&lt;br /&gt;
# Open up the Nasal console and execute the following function.&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;ramp_marshall.convert_stg();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Choose the stg file you pasted the dumped stg lines in to convert the file into a readable xml ramp position file. If you get following error: &amp;lt;code&amp;gt;(unauthorized directory - authorization no longer follows symlinks; to authorize reading additional directories, pass them to --allow-nasal-read)&amp;lt;/code&amp;gt;, type in Command line in the Launcher following phrase: &amp;lt;code&amp;gt;--allow-nasal-read=/path/to/directory&amp;lt;/code&amp;gt;. The converted file can be found &amp;lt;tt&amp;gt;[[$FG_HOME]]/Export&amp;lt;/tt&amp;gt; or under the Roaming folder in Windows.&lt;br /&gt;
# Copy the exported file (it will be called '''ramps-export.xml''') to &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/&amp;lt;icao&amp;gt;/ramps.xml&amp;lt;/tt&amp;gt;. For example, if you want these ramps at Singapore Changi Intl. Airport (WSSS), you'd put it in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/WSSS/ramps.xml&amp;lt;/tt&amp;gt;. (you have to rename the '''ramps-export.xml''' into '''ramps.xml'''). If there is no folder for your Airport, just create a new one with the icao of your Airport.&lt;br /&gt;
&lt;br /&gt;
== Contributing to the module ==&lt;br /&gt;
&lt;br /&gt;
=== Teach the ramp marshaller new signals ===&lt;br /&gt;
&lt;br /&gt;
The marshaller's signal positions are stored in the '''ramp_marhsall.nas''' Nasal file in a hash. This is so that the signals can be accessed easily by other functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var pos = {&lt;br /&gt;
	rest: rmPos.new(lA_x:80, rA_x:-80),&lt;br /&gt;
	stop: rmPos.new(lA_x:-55, lAO_x:-70, rA_x:55, rAO_x:70),&lt;br /&gt;
	fwd_out: rmPos.new(lA_z:-50, lAO_x:-30,  rA_z:50, rAO_x:30),&lt;br /&gt;
	fwd_in:  rmPos.new(lA_z:-50, lAO_x:-120, rA_z:50, rAO_x:120),&lt;br /&gt;
	left_in:   rmPos.new(lAO_x:-120),&lt;br /&gt;
	left_out:  rmPos.new(lAO_x:-30),&lt;br /&gt;
	right_in:  rmPos.new(rAO_x:120),&lt;br /&gt;
	right_out: rmPos.new(rAO_x:30)&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* lA_x - Left Arm (shoulder joint) x axis rotation&lt;br /&gt;
* lA_y - Left Arm (shoulder joint) y axis rotation&lt;br /&gt;
* lA_z - Left Arm (shoulder joint) z axis rotation&lt;br /&gt;
* lAO_x - Left Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* lH_x - Left Hand x axis rotation&lt;br /&gt;
* lH_y - Left Hand y axis rotation&lt;br /&gt;
* lH_z - Left Hand x axis rotation&lt;br /&gt;
* rA_x - Right Arm (shoulder joint) x axis rotation&lt;br /&gt;
* rA_y - Right Arm (shoulder joint) y axis rotation&lt;br /&gt;
* rA_z - Right Arm (shoulder joint) z axis rotation&lt;br /&gt;
* rAO_x - Right Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* rH_x - Right Hand x axis rotation&lt;br /&gt;
* rH_y - Right Hand y axis rotation&lt;br /&gt;
* rH_z - Right Hand x axis rotation&lt;br /&gt;
&lt;br /&gt;
You can mess with the positions in a 3D modeling program or in FlightGear itself. Just look in the property tree under &amp;lt;tt&amp;gt;/airports/{icao}/ramps/ramp[n]&amp;lt;/tt&amp;gt; (find the correct 'n' index for the person last clicked on by looking at the &amp;lt;tt&amp;gt;/airports/active-ramp&amp;lt;/tt&amp;gt; property) and set the ramp marshaller's function to something random (so it isn't recognized) and change the values in the tree. Note: to get this to work properly, you first have to click on the nearest ramp marshaller, look up his index, and then click on a different marshaller so that the other marshaller's properties are not updated.&lt;br /&gt;
&lt;br /&gt;
If you would like to add a new hand position (say both hands out stright), then you'd add this to the bottom of the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
     hands_out_front: rmPos.new(lA_z:-90, rA_z:90)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that one only needs to specify the rotations that are non-zero using hash syntax (key:value) in the arguments to the rmPos.new function. Remember to put a comma after the line right before the new one you add, since each line needs to end with a comma.&lt;br /&gt;
&lt;br /&gt;
Now, you can call this position as '''pos.hands_out_front''' to be used in the sequence function. Or if you'd like to get or set one of the position values.&lt;br /&gt;
&lt;br /&gt;
To add the signal sequence, add a new '''if''' state at the end of the last '''if(me.function == &amp;quot;&amp;lt;function_name&amp;gt;&amp;quot;''' statement with the sequence. You can use me.phase to control the sequence phase/step. &lt;br /&gt;
&lt;br /&gt;
Then, add the signal sequence. &lt;br /&gt;
&lt;br /&gt;
HINT - To animate the marshaller to a position you specified and then to go to the next step when it's complete and be achieved like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(me.phase == 0) {&lt;br /&gt;
    if(!check_pos(ramp_tree, pos.hands_out_front)) {&lt;br /&gt;
	full_animate(ramp_tree, pos.hands_out_front, 100);&lt;br /&gt;
    } else {&lt;br /&gt;
        me.phase = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code checks if the marshallers is not in the '''hands_out_front''' pos already and if he isn't, he'll move his hands to that position. In the full_animate function, you can specify the speed his hands should move at in ''degrees per second''. In this case, he'll move his hands forward to the specified position at 100 degrees per second.&lt;br /&gt;
&lt;br /&gt;
==== Useful internal functions ====&lt;br /&gt;
&lt;br /&gt;
* '''rmPos.new(lA_x, lA_z, lAO_x, rA_x, rA_z, rAO_x)''' creates and returns a new instance of the rmPos hash. This hash is in the '''pos.&amp;lt;pos_name&amp;gt;''' format and can be used in the functions below.&lt;br /&gt;
&lt;br /&gt;
* '''getDeviation(heading, target)''' returns the deviation to a target heading from your current heading. This is used by the marshaller to help guide you to the ramp.&lt;br /&gt;
&lt;br /&gt;
* '''animate(property, target, rate)''' animates a property (slowly changes the property value) to a target value at the given rate. (Rate is in degrees per second)&lt;br /&gt;
&lt;br /&gt;
* '''get_pos_values(ramp_tree)''' returns the current position of the marshaller's arms in a hash similar to that of the pos.&amp;lt;pos_name&amp;gt; hash.&lt;br /&gt;
&lt;br /&gt;
* '''check_pos(ramp_tree, target) returns true if the marshaller is at a given position. '''target''' must be a hash similar to the '''pos.&amp;lt;pos_name&amp;gt;''' hash. It is best to simply send a position specified in the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
* '''full_animate(ramp_tree, pos_hash, rate) animates the ramp marshaller to the given position at the given rate.&lt;br /&gt;
&lt;br /&gt;
* '''load_ramps(icao)''' loads all ramps (and marshallers) at the given airport.&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' If any of the functions has '''ramp_tree''' as an argument and the function is being used within the ''main_loop'', the variable '''ramp_tree''' must be passed as an argument.&lt;br /&gt;
&lt;br /&gt;
=== Using different models or textures ===&lt;br /&gt;
&lt;br /&gt;
Soon, new features will becoming available which lets the ramp marshaller model be specified in the position config file.&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
&lt;br /&gt;
=== Visual Docking Guidance System ===&lt;br /&gt;
&lt;br /&gt;
===Prototype for a Visual Docking Guidance System (VDGS), entirely written in xml===&lt;br /&gt;
{{Youtube embed video simple v1|youtube_url_or_video_ID_from_youtube_url_required}}=https://youtu.be/5YYo2jPAlIw}}{{WIP}}&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
===Wiki articles===&lt;br /&gt;
*[[Walk view]]&lt;br /&gt;
&lt;br /&gt;
===Forum topics===&lt;br /&gt;
*{{forum link|t=20572|title=Nasal based Independant Ramp Marshall}} (August 2013-Mars 2018)&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git Omega95's fgdata Gitorious archive] archived from the {{gitorious source|proj=fg|repo=omega95s-fgdata|text=original}} Mars 30, 2016.&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/?origin_url=https%3A%2F%2Fgitorious.org%2Ffg-singapore-scenery%2Ffg-singapore-devel.git FG Singapore Scenery Gitorious archive] archived from the {{gitorious source|proj=fg-singapore-scenery|repo=fg-singapore-devel|text=original}} Mars 30, 2016.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134682</id>
		<title>Ramp Marshall</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134682"/>
		<updated>2022-02-17T19:56:34Z</updated>

		<summary type="html">&lt;p&gt;Thilo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''(ramp) marshaller''' is a person who guides [[aircraft]] using hand (and wand) signals at a parking ramp. This is a new feature that being worked on for a more generalized scale in [[FlightGear]]. Until this gets merged into the fgdata repository, you can get this from omega95's fgdata clone or the new Singapore Scenery development. &lt;br /&gt;
&lt;br /&gt;
Currently, support can be added to airports with the [[UFO]], but soon ramp marshallers will be added automatically if a parking spot's flag is set to enable it. This will integrate FlightGear parking positions, ramp marshallers and other features that might come up related to parking ramps or gates.&lt;br /&gt;
&lt;br /&gt;
These are videos of the first prototype of the ramp marshaller.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | c_KEbyv_h5A}} {{#ev:youtube | Hz4WU8nsdls}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== How to install the ramp marshaller ===&lt;br /&gt;
&lt;br /&gt;
# Download [https://github.com/RenanMsV/ramp-marshall this GitHub] and unzip it.&lt;br /&gt;
# Download this [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] &lt;br /&gt;
# Put the '''Ramp''' Folder (can be found under Models/Airports in the GitHub) in $FG-ROOT\Models\Airport&lt;br /&gt;
# Put the [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] and the '''addon-main.nas''' (can be found unter the GitHub) in $FG-ROOT\Nasal&lt;br /&gt;
# Put every File and Folder wich is left now from the GitHub in your addons folder (see: [[Addon|how to install addons in FlightGear]])&lt;br /&gt;
&lt;br /&gt;
== Using the ramp marshaller ==&lt;br /&gt;
To use the ramp marshaller with a compatible aircraft at a compatible airport (scroll down to see how you can make aircraft and/or airports compatible), simply taxi to the gate/ramp you want to park at and click on the marshaller waiting at the ramp. His hands should move from rest position (both wands down by his sides) to direct you to the ramp. It's recommended to taxi to the ramp on the taxiway lines as long as you can see them and once they go out of view, follow the marshaller's instructions. Make sure that you're not taxiing faster than 5 to 10 kts at the ramp.&lt;br /&gt;
&lt;br /&gt;
Currently, the ramp marshaller knows the following signals -&lt;br /&gt;
* Move forward&lt;br /&gt;
* Turn left&lt;br /&gt;
* Turn right&lt;br /&gt;
* Slow down and stop&lt;br /&gt;
* Immediate stop&lt;br /&gt;
&lt;br /&gt;
But we're teaching him new signals. If you want to teach him a signal, scroll down to find out how. To find out what the signals look like, take a look at the videos above.&lt;br /&gt;
&lt;br /&gt;
== Adding ramp marshalling support ==&lt;br /&gt;
=== Adding ramp marshalling compatibility to aircraft ===&lt;br /&gt;
[[File:A330-200 Ramp Marshall Compatibility - getting position with ac3D.png|thumb|270px|Demonstrating how to get x-position of nose gear with AC3D for ramp marshalling compatibility.]]&lt;br /&gt;
&lt;br /&gt;
It's actually very simple to add ramp marshalling compatibility to an aircraft, the only file required to be edited is the aircraft's [[Aircraft-set.xml|&amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file]] (or common xml file for aircraft groups). The user is still required to use some kind of 3D modeling program to get the position.&lt;br /&gt;
&lt;br /&gt;
# Open the aircraft's model file (containing the gears) with a 3D modeling program and get the '''x''' position of the center of the nose gear. (Or the position you want to rest at the ramp)&lt;br /&gt;
# Add the following code within the &amp;lt;code&amp;gt;&amp;lt;sim&amp;gt; ... &amp;lt;model&amp;gt; ... &amp;lt;/model&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft's &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file. (or common xml file for aircraft groups)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ramp&amp;gt;&lt;br /&gt;
    &amp;lt;x-m type=&amp;quot;float&amp;quot;&amp;gt;-15.9664&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;class type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;/ramp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The '''x''' position from the 3D model is in the &amp;lt;code&amp;gt;&amp;lt;x-m&amp;gt;&amp;lt;/code&amp;gt; tag and the aircraft class is in the &amp;lt;code&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/code&amp;gt; tag. With the current models, the aircraft classes are as follows -&lt;br /&gt;
:* 0 - 747s, 777-300s, A340s, A380s&lt;br /&gt;
:* 1 - 777-300s, A330-300s, 787s&lt;br /&gt;
:* 2 - A330-200s, 757s, 767s&lt;br /&gt;
:* 3 - A320s (includes A318s, A319s and A321s), 737s and other aircraft in general. This works for CRJs, E-jets etc.&lt;br /&gt;
&lt;br /&gt;
This should be all! The ramp marshaller should be able to ''recognize'' the aircraft and guide it to the right position at the ramp!&lt;br /&gt;
&lt;br /&gt;
=== Adding ramp marshallers to an airport ===&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' In the future, this will change because ramp marshall positions are going to be connected to an airport's '''groundnet.xml''' file.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp-marshall-arpt-1.png|thumb|270px|Placing ramp marshaller using ufo]]&lt;br /&gt;
[[File:ramp-marshall-arpt-2.png|thumb|270px|Converting STG file to ramps XML]]&lt;br /&gt;
&lt;br /&gt;
# Start up FlightGear with the UFO at the airport you want to place ramp marshallers.&lt;br /&gt;
# Hit the {{key press|L}} key on the keyboard to bring up the model selection dialog and select &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Models/Airport/Ramp/ramp.xml&amp;lt;/tt&amp;gt;. Using the ufo's scenery editing tools, place (and adjust) ramp marshallers everywhere you want. To make it simpler, click on the exact position you want the airplane to come to a stop. This will usually be at the end of a parking ramp's taxiway lines. Then, you will only have to change the heading.&lt;br /&gt;
# Once you've finished placing all the models, hit the {{key press|D}} key to dump the stg lines onto the console. (Do not close FlightGear yet) Copy the stg lines into a blank file. (name does not matter) And save it somewhere on your PC ($FG-HOME is a good place for that).&lt;br /&gt;
# Open up the Nasal console and execute the following function.&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;ramp_marshall.convert_stg();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Choose the stg file you pasted the dumped stg lines in to convert the file into a readable xml ramp position file. If you get following error: &amp;lt;code&amp;gt;(unauthorized directory - authorization no longer follows symlinks; to authorize reading additional directories, pass them to --allow-nasal-read)&amp;lt;/code&amp;gt;, type in Command line in the Launcher following phrase: &amp;lt;code&amp;gt;--allow-nasal-read=/path/to/directory&amp;lt;/code&amp;gt;. The converted file can be found &amp;lt;tt&amp;gt;[[$FG_HOME]]/Export&amp;lt;/tt&amp;gt; or under the Roaming folder in Windows.&lt;br /&gt;
# Copy the exported file (it will be called '''ramps-export.xml''') to &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/&amp;lt;icao&amp;gt;/ramps.xml&amp;lt;/tt&amp;gt;. For example, if you want these ramps at Singapore Changi Intl. Airport (WSSS), you'd put it in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/WSSS/ramps.xml&amp;lt;/tt&amp;gt;. (you have to rename the '''ramps-export.xml''' into '''ramps.xml'''). If there is no folder for your Airport, just create a new one with the icao of your Airport.&lt;br /&gt;
&lt;br /&gt;
== Contributing to the module ==&lt;br /&gt;
&lt;br /&gt;
=== Teach the ramp marshaller new signals ===&lt;br /&gt;
&lt;br /&gt;
The marshaller's signal positions are stored in the '''ramp_marhsall.nas''' Nasal file in a hash. This is so that the signals can be accessed easily by other functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var pos = {&lt;br /&gt;
	rest: rmPos.new(lA_x:80, rA_x:-80),&lt;br /&gt;
	stop: rmPos.new(lA_x:-55, lAO_x:-70, rA_x:55, rAO_x:70),&lt;br /&gt;
	fwd_out: rmPos.new(lA_z:-50, lAO_x:-30,  rA_z:50, rAO_x:30),&lt;br /&gt;
	fwd_in:  rmPos.new(lA_z:-50, lAO_x:-120, rA_z:50, rAO_x:120),&lt;br /&gt;
	left_in:   rmPos.new(lAO_x:-120),&lt;br /&gt;
	left_out:  rmPos.new(lAO_x:-30),&lt;br /&gt;
	right_in:  rmPos.new(rAO_x:120),&lt;br /&gt;
	right_out: rmPos.new(rAO_x:30)&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* lA_x - Left Arm (shoulder joint) x axis rotation&lt;br /&gt;
* lA_y - Left Arm (shoulder joint) y axis rotation&lt;br /&gt;
* lA_z - Left Arm (shoulder joint) z axis rotation&lt;br /&gt;
* lAO_x - Left Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* lH_x - Left Hand x axis rotation&lt;br /&gt;
* lH_y - Left Hand y axis rotation&lt;br /&gt;
* lH_z - Left Hand x axis rotation&lt;br /&gt;
* rA_x - Right Arm (shoulder joint) x axis rotation&lt;br /&gt;
* rA_y - Right Arm (shoulder joint) y axis rotation&lt;br /&gt;
* rA_z - Right Arm (shoulder joint) z axis rotation&lt;br /&gt;
* rAO_x - Right Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* rH_x - Right Hand x axis rotation&lt;br /&gt;
* rH_y - Right Hand y axis rotation&lt;br /&gt;
* rH_z - Right Hand x axis rotation&lt;br /&gt;
&lt;br /&gt;
You can mess with the positions in a 3D modeling program or in FlightGear itself. Just look in the property tree under &amp;lt;tt&amp;gt;/airports/{icao}/ramps/ramp[n]&amp;lt;/tt&amp;gt; (find the correct 'n' index for the person last clicked on by looking at the &amp;lt;tt&amp;gt;/airports/active-ramp&amp;lt;/tt&amp;gt; property) and set the ramp marshaller's function to something random (so it isn't recognized) and change the values in the tree. Note: to get this to work properly, you first have to click on the nearest ramp marshaller, look up his index, and then click on a different marshaller so that the other marshaller's properties are not updated.&lt;br /&gt;
&lt;br /&gt;
If you would like to add a new hand position (say both hands out stright), then you'd add this to the bottom of the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
     hands_out_front: rmPos.new(lA_z:-90, rA_z:90)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that one only needs to specify the rotations that are non-zero using hash syntax (key:value) in the arguments to the rmPos.new function. Remember to put a comma after the line right before the new one you add, since each line needs to end with a comma.&lt;br /&gt;
&lt;br /&gt;
Now, you can call this position as '''pos.hands_out_front''' to be used in the sequence function. Or if you'd like to get or set one of the position values.&lt;br /&gt;
&lt;br /&gt;
To add the signal sequence, add a new '''if''' state at the end of the last '''if(me.function == &amp;quot;&amp;lt;function_name&amp;gt;&amp;quot;''' statement with the sequence. You can use me.phase to control the sequence phase/step. &lt;br /&gt;
&lt;br /&gt;
Then, add the signal sequence. &lt;br /&gt;
&lt;br /&gt;
HINT - To animate the marshaller to a position you specified and then to go to the next step when it's complete and be achieved like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(me.phase == 0) {&lt;br /&gt;
    if(!check_pos(ramp_tree, pos.hands_out_front)) {&lt;br /&gt;
	full_animate(ramp_tree, pos.hands_out_front, 100);&lt;br /&gt;
    } else {&lt;br /&gt;
        me.phase = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code checks if the marshallers is not in the '''hands_out_front''' pos already and if he isn't, he'll move his hands to that position. In the full_animate function, you can specify the speed his hands should move at in ''degrees per second''. In this case, he'll move his hands forward to the specified position at 100 degrees per second.&lt;br /&gt;
&lt;br /&gt;
==== Useful internal functions ====&lt;br /&gt;
&lt;br /&gt;
* '''rmPos.new(lA_x, lA_z, lAO_x, rA_x, rA_z, rAO_x)''' creates and returns a new instance of the rmPos hash. This hash is in the '''pos.&amp;lt;pos_name&amp;gt;''' format and can be used in the functions below.&lt;br /&gt;
&lt;br /&gt;
* '''getDeviation(heading, target)''' returns the deviation to a target heading from your current heading. This is used by the marshaller to help guide you to the ramp.&lt;br /&gt;
&lt;br /&gt;
* '''animate(property, target, rate)''' animates a property (slowly changes the property value) to a target value at the given rate. (Rate is in degrees per second)&lt;br /&gt;
&lt;br /&gt;
* '''get_pos_values(ramp_tree)''' returns the current position of the marshaller's arms in a hash similar to that of the pos.&amp;lt;pos_name&amp;gt; hash.&lt;br /&gt;
&lt;br /&gt;
* '''check_pos(ramp_tree, target) returns true if the marshaller is at a given position. '''target''' must be a hash similar to the '''pos.&amp;lt;pos_name&amp;gt;''' hash. It is best to simply send a position specified in the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
* '''full_animate(ramp_tree, pos_hash, rate) animates the ramp marshaller to the given position at the given rate.&lt;br /&gt;
&lt;br /&gt;
* '''load_ramps(icao)''' loads all ramps (and marshallers) at the given airport.&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' If any of the functions has '''ramp_tree''' as an argument and the function is being used within the ''main_loop'', the variable '''ramp_tree''' must be passed as an argument.&lt;br /&gt;
&lt;br /&gt;
=== Using different models or textures ===&lt;br /&gt;
&lt;br /&gt;
Soon, new features will becoming available which lets the ramp marshaller model be specified in the position config file.&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
&lt;br /&gt;
=== Visual Docking Guidance System ===&lt;br /&gt;
&lt;br /&gt;
===Prototype for a Visual Docking Guidance System (VDGS), entirely written in xml===&lt;br /&gt;
&lt;br /&gt;
{{Https://youtu.be/5YYo2jPAlIw}}{{WIP}}&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
===Wiki articles===&lt;br /&gt;
*[[Walk view]]&lt;br /&gt;
&lt;br /&gt;
===Forum topics===&lt;br /&gt;
*{{forum link|t=20572|title=Nasal based Independant Ramp Marshall}} (August 2013-Mars 2018)&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git Omega95's fgdata Gitorious archive] archived from the {{gitorious source|proj=fg|repo=omega95s-fgdata|text=original}} Mars 30, 2016.&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/?origin_url=https%3A%2F%2Fgitorious.org%2Ffg-singapore-scenery%2Ffg-singapore-devel.git FG Singapore Scenery Gitorious archive] archived from the {{gitorious source|proj=fg-singapore-scenery|repo=fg-singapore-devel|text=original}} Mars 30, 2016.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134681</id>
		<title>Ramp Marshall</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=134681"/>
		<updated>2022-02-17T19:53:53Z</updated>

		<summary type="html">&lt;p&gt;Thilo: /* Visual Docking Guidance System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''(ramp) marshaller''' is a person who guides [[aircraft]] using hand (and wand) signals at a parking ramp. This is a new feature that being worked on for a more generalized scale in [[FlightGear]]. Until this gets merged into the fgdata repository, you can get this from omega95's fgdata clone or the new Singapore Scenery development. &lt;br /&gt;
&lt;br /&gt;
Currently, support can be added to airports with the [[UFO]], but soon ramp marshallers will be added automatically if a parking spot's flag is set to enable it. This will integrate FlightGear parking positions, ramp marshallers and other features that might come up related to parking ramps or gates.&lt;br /&gt;
&lt;br /&gt;
These are videos of the first prototype of the ramp marshaller.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | c_KEbyv_h5A}} {{#ev:youtube | Hz4WU8nsdls}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== How to install the ramp marshaller ===&lt;br /&gt;
&lt;br /&gt;
# Download [https://github.com/RenanMsV/ramp-marshall this GitHub] and unzip it.&lt;br /&gt;
# Download this [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] &lt;br /&gt;
# Put the '''Ramp''' Folder (can be found under Models/Airports in the GitHub) in $FG-ROOT\Models\Airport&lt;br /&gt;
# Put the [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] and the '''addon-main.nas''' (can be found unter the GitHub) in $FG-ROOT\Nasal&lt;br /&gt;
# Put every File and Folder wich is left now from the GitHub in your addons folder (see: [[Addon|how to install addons in FlightGear]])&lt;br /&gt;
&lt;br /&gt;
== Using the ramp marshaller ==&lt;br /&gt;
To use the ramp marshaller with a compatible aircraft at a compatible airport (scroll down to see how you can make aircraft and/or airports compatible), simply taxi to the gate/ramp you want to park at and click on the marshaller waiting at the ramp. His hands should move from rest position (both wands down by his sides) to direct you to the ramp. It's recommended to taxi to the ramp on the taxiway lines as long as you can see them and once they go out of view, follow the marshaller's instructions. Make sure that you're not taxiing faster than 5 to 10 kts at the ramp.&lt;br /&gt;
&lt;br /&gt;
Currently, the ramp marshaller knows the following signals -&lt;br /&gt;
* Move forward&lt;br /&gt;
* Turn left&lt;br /&gt;
* Turn right&lt;br /&gt;
* Slow down and stop&lt;br /&gt;
* Immediate stop&lt;br /&gt;
&lt;br /&gt;
But we're teaching him new signals. If you want to teach him a signal, scroll down to find out how. To find out what the signals look like, take a look at the videos above.&lt;br /&gt;
&lt;br /&gt;
== Adding ramp marshalling support ==&lt;br /&gt;
=== Adding ramp marshalling compatibility to aircraft ===&lt;br /&gt;
[[File:A330-200 Ramp Marshall Compatibility - getting position with ac3D.png|thumb|270px|Demonstrating how to get x-position of nose gear with AC3D for ramp marshalling compatibility.]]&lt;br /&gt;
&lt;br /&gt;
It's actually very simple to add ramp marshalling compatibility to an aircraft, the only file required to be edited is the aircraft's [[Aircraft-set.xml|&amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file]] (or common xml file for aircraft groups). The user is still required to use some kind of 3D modeling program to get the position.&lt;br /&gt;
&lt;br /&gt;
# Open the aircraft's model file (containing the gears) with a 3D modeling program and get the '''x''' position of the center of the nose gear. (Or the position you want to rest at the ramp)&lt;br /&gt;
# Add the following code within the &amp;lt;code&amp;gt;&amp;lt;sim&amp;gt; ... &amp;lt;model&amp;gt; ... &amp;lt;/model&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft's &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file. (or common xml file for aircraft groups)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ramp&amp;gt;&lt;br /&gt;
    &amp;lt;x-m type=&amp;quot;float&amp;quot;&amp;gt;-15.9664&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;class type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;/ramp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The '''x''' position from the 3D model is in the &amp;lt;code&amp;gt;&amp;lt;x-m&amp;gt;&amp;lt;/code&amp;gt; tag and the aircraft class is in the &amp;lt;code&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/code&amp;gt; tag. With the current models, the aircraft classes are as follows -&lt;br /&gt;
:* 0 - 747s, 777-300s, A340s, A380s&lt;br /&gt;
:* 1 - 777-300s, A330-300s, 787s&lt;br /&gt;
:* 2 - A330-200s, 757s, 767s&lt;br /&gt;
:* 3 - A320s (includes A318s, A319s and A321s), 737s and other aircraft in general. This works for CRJs, E-jets etc.&lt;br /&gt;
&lt;br /&gt;
This should be all! The ramp marshaller should be able to ''recognize'' the aircraft and guide it to the right position at the ramp!&lt;br /&gt;
&lt;br /&gt;
=== Adding ramp marshallers to an airport ===&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' In the future, this will change because ramp marshall positions are going to be connected to an airport's '''groundnet.xml''' file.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp-marshall-arpt-1.png|thumb|270px|Placing ramp marshaller using ufo]]&lt;br /&gt;
[[File:ramp-marshall-arpt-2.png|thumb|270px|Converting STG file to ramps XML]]&lt;br /&gt;
&lt;br /&gt;
# Start up FlightGear with the UFO at the airport you want to place ramp marshallers.&lt;br /&gt;
# Hit the {{key press|L}} key on the keyboard to bring up the model selection dialog and select &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Models/Airport/Ramp/ramp.xml&amp;lt;/tt&amp;gt;. Using the ufo's scenery editing tools, place (and adjust) ramp marshallers everywhere you want. To make it simpler, click on the exact position you want the airplane to come to a stop. This will usually be at the end of a parking ramp's taxiway lines. Then, you will only have to change the heading.&lt;br /&gt;
# Once you've finished placing all the models, hit the {{key press|D}} key to dump the stg lines onto the console. (Do not close FlightGear yet) Copy the stg lines into a blank file. (name does not matter) And save it somewhere on your PC ($FG-HOME is a good place for that).&lt;br /&gt;
# Open up the Nasal console and execute the following function.&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;ramp_marshall.convert_stg();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Choose the stg file you pasted the dumped stg lines in to convert the file into a readable xml ramp position file. If you get following error: &amp;lt;code&amp;gt;(unauthorized directory - authorization no longer follows symlinks; to authorize reading additional directories, pass them to --allow-nasal-read)&amp;lt;/code&amp;gt;, type in Command line in the Launcher following phrase: &amp;lt;code&amp;gt;--allow-nasal-read=/path/to/directory&amp;lt;/code&amp;gt;. The converted file can be found &amp;lt;tt&amp;gt;[[$FG_HOME]]/Export&amp;lt;/tt&amp;gt; or under the Roaming folder in Windows.&lt;br /&gt;
# Copy the exported file (it will be called '''ramps-export.xml''') to &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/&amp;lt;icao&amp;gt;/ramps.xml&amp;lt;/tt&amp;gt;. For example, if you want these ramps at Singapore Changi Intl. Airport (WSSS), you'd put it in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/WSSS/ramps.xml&amp;lt;/tt&amp;gt;. (you have to rename the '''ramps-export.xml''' into '''ramps.xml'''). If there is no folder for your Airport, just create a new one with the icao of your Airport.&lt;br /&gt;
&lt;br /&gt;
== Contributing to the module ==&lt;br /&gt;
&lt;br /&gt;
=== Teach the ramp marshaller new signals ===&lt;br /&gt;
&lt;br /&gt;
The marshaller's signal positions are stored in the '''ramp_marhsall.nas''' Nasal file in a hash. This is so that the signals can be accessed easily by other functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var pos = {&lt;br /&gt;
	rest: rmPos.new(lA_x:80, rA_x:-80),&lt;br /&gt;
	stop: rmPos.new(lA_x:-55, lAO_x:-70, rA_x:55, rAO_x:70),&lt;br /&gt;
	fwd_out: rmPos.new(lA_z:-50, lAO_x:-30,  rA_z:50, rAO_x:30),&lt;br /&gt;
	fwd_in:  rmPos.new(lA_z:-50, lAO_x:-120, rA_z:50, rAO_x:120),&lt;br /&gt;
	left_in:   rmPos.new(lAO_x:-120),&lt;br /&gt;
	left_out:  rmPos.new(lAO_x:-30),&lt;br /&gt;
	right_in:  rmPos.new(rAO_x:120),&lt;br /&gt;
	right_out: rmPos.new(rAO_x:30)&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* lA_x - Left Arm (shoulder joint) x axis rotation&lt;br /&gt;
* lA_y - Left Arm (shoulder joint) y axis rotation&lt;br /&gt;
* lA_z - Left Arm (shoulder joint) z axis rotation&lt;br /&gt;
* lAO_x - Left Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* lH_x - Left Hand x axis rotation&lt;br /&gt;
* lH_y - Left Hand y axis rotation&lt;br /&gt;
* lH_z - Left Hand x axis rotation&lt;br /&gt;
* rA_x - Right Arm (shoulder joint) x axis rotation&lt;br /&gt;
* rA_y - Right Arm (shoulder joint) y axis rotation&lt;br /&gt;
* rA_z - Right Arm (shoulder joint) z axis rotation&lt;br /&gt;
* rAO_x - Right Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* rH_x - Right Hand x axis rotation&lt;br /&gt;
* rH_y - Right Hand y axis rotation&lt;br /&gt;
* rH_z - Right Hand x axis rotation&lt;br /&gt;
&lt;br /&gt;
You can mess with the positions in a 3D modeling program or in FlightGear itself. Just look in the property tree under &amp;lt;tt&amp;gt;/airports/{icao}/ramps/ramp[n]&amp;lt;/tt&amp;gt; (find the correct 'n' index for the person last clicked on by looking at the &amp;lt;tt&amp;gt;/airports/active-ramp&amp;lt;/tt&amp;gt; property) and set the ramp marshaller's function to something random (so it isn't recognized) and change the values in the tree. Note: to get this to work properly, you first have to click on the nearest ramp marshaller, look up his index, and then click on a different marshaller so that the other marshaller's properties are not updated.&lt;br /&gt;
&lt;br /&gt;
If you would like to add a new hand position (say both hands out stright), then you'd add this to the bottom of the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
     hands_out_front: rmPos.new(lA_z:-90, rA_z:90)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that one only needs to specify the rotations that are non-zero using hash syntax (key:value) in the arguments to the rmPos.new function. Remember to put a comma after the line right before the new one you add, since each line needs to end with a comma.&lt;br /&gt;
&lt;br /&gt;
Now, you can call this position as '''pos.hands_out_front''' to be used in the sequence function. Or if you'd like to get or set one of the position values.&lt;br /&gt;
&lt;br /&gt;
To add the signal sequence, add a new '''if''' state at the end of the last '''if(me.function == &amp;quot;&amp;lt;function_name&amp;gt;&amp;quot;''' statement with the sequence. You can use me.phase to control the sequence phase/step. &lt;br /&gt;
&lt;br /&gt;
Then, add the signal sequence. &lt;br /&gt;
&lt;br /&gt;
HINT - To animate the marshaller to a position you specified and then to go to the next step when it's complete and be achieved like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(me.phase == 0) {&lt;br /&gt;
    if(!check_pos(ramp_tree, pos.hands_out_front)) {&lt;br /&gt;
	full_animate(ramp_tree, pos.hands_out_front, 100);&lt;br /&gt;
    } else {&lt;br /&gt;
        me.phase = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code checks if the marshallers is not in the '''hands_out_front''' pos already and if he isn't, he'll move his hands to that position. In the full_animate function, you can specify the speed his hands should move at in ''degrees per second''. In this case, he'll move his hands forward to the specified position at 100 degrees per second.&lt;br /&gt;
&lt;br /&gt;
==== Useful internal functions ====&lt;br /&gt;
&lt;br /&gt;
* '''rmPos.new(lA_x, lA_z, lAO_x, rA_x, rA_z, rAO_x)''' creates and returns a new instance of the rmPos hash. This hash is in the '''pos.&amp;lt;pos_name&amp;gt;''' format and can be used in the functions below.&lt;br /&gt;
&lt;br /&gt;
* '''getDeviation(heading, target)''' returns the deviation to a target heading from your current heading. This is used by the marshaller to help guide you to the ramp.&lt;br /&gt;
&lt;br /&gt;
* '''animate(property, target, rate)''' animates a property (slowly changes the property value) to a target value at the given rate. (Rate is in degrees per second)&lt;br /&gt;
&lt;br /&gt;
* '''get_pos_values(ramp_tree)''' returns the current position of the marshaller's arms in a hash similar to that of the pos.&amp;lt;pos_name&amp;gt; hash.&lt;br /&gt;
&lt;br /&gt;
* '''check_pos(ramp_tree, target) returns true if the marshaller is at a given position. '''target''' must be a hash similar to the '''pos.&amp;lt;pos_name&amp;gt;''' hash. It is best to simply send a position specified in the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
* '''full_animate(ramp_tree, pos_hash, rate) animates the ramp marshaller to the given position at the given rate.&lt;br /&gt;
&lt;br /&gt;
* '''load_ramps(icao)''' loads all ramps (and marshallers) at the given airport.&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' If any of the functions has '''ramp_tree''' as an argument and the function is being used within the ''main_loop'', the variable '''ramp_tree''' must be passed as an argument.&lt;br /&gt;
&lt;br /&gt;
=== Using different models or textures ===&lt;br /&gt;
&lt;br /&gt;
Soon, new features will becoming available which lets the ramp marshaller model be specified in the position config file.&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
&lt;br /&gt;
=== Visual Docking Guidance System ===&lt;br /&gt;
&lt;br /&gt;
===Prototype for a Visual Docking Guidance System (VDGS), entirely written in xml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;1264&amp;quot; height=&amp;quot;711&amp;quot; src=&amp;quot;https://www.youtube.com/embed/5YYo2jPAlIw&amp;quot; title=&amp;quot;YouTube video player&amp;quot; frameborder=&amp;quot;0&amp;quot; allow=&amp;quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;{{WIP}}&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
===Wiki articles===&lt;br /&gt;
*[[Walk view]]&lt;br /&gt;
&lt;br /&gt;
===Forum topics===&lt;br /&gt;
*{{forum link|t=20572|title=Nasal based Independant Ramp Marshall}} (August 2013-Mars 2018)&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git Omega95's fgdata Gitorious archive] archived from the {{gitorious source|proj=fg|repo=omega95s-fgdata|text=original}} Mars 30, 2016.&lt;br /&gt;
*[https://archive.softwareheritage.org/browse/origin/?origin_url=https%3A%2F%2Fgitorious.org%2Ffg-singapore-scenery%2Ffg-singapore-devel.git FG Singapore Scenery Gitorious archive] archived from the {{gitorious source|proj=fg-singapore-scenery|repo=fg-singapore-devel|text=original}} Mars 30, 2016.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=134520</id>
		<title>Discord</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=134520"/>
		<updated>2022-01-25T13:17:22Z</updated>

		<summary type="html">&lt;p&gt;Thilo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Discord''' is used in the FlightGear community as an alternative to [[Mumble]], [[TeamSpeak]], [[FGCom]] or [[Ventrilo]].&lt;br /&gt;
&lt;br /&gt;
Discord is a free voice and chat software that can be downloaded as an app or used in a browser.&lt;br /&gt;
&lt;br /&gt;
== Invite links ==&lt;br /&gt;
{{note|1=Its advised that you create a permanent account, instead of creating guest accounts as some people create duplicate accounts which clogs up the member logs and makes it more difficult to @mention people.}}&lt;br /&gt;
&lt;br /&gt;
Furthermore many other FlightGear servers exist that you may need an personal invite to join. The easiest way to find them is to go to the FlightGear server and ask or ask in forums.&lt;br /&gt;
&lt;br /&gt;
== FlightGear Communities on Discord ==&lt;br /&gt;
&lt;br /&gt;
=== General, Help and Support, Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear&lt;br /&gt;
| https://discord.gg/rzuV2DR&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear FDM School&lt;br /&gt;
| https://discord.gg/Uyrtsar&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Air Race League&lt;br /&gt;
| https://discord.gg/HCAuU9D&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Virtual Alliance&lt;br /&gt;
| https://discord.gg/VqzTG2N&lt;br /&gt;
|-&lt;br /&gt;
| FG Events&lt;br /&gt;
| https://discord.gg/GY4N6Cu&lt;br /&gt;
|-&lt;br /&gt;
| FG FDM School&lt;br /&gt;
| https://discord.gg/U5KXyMU&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Republic, A friendly community about FlightGear.&lt;br /&gt;
| https://discord.gg/sBJy46Uq7z&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Military Aviation Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Operation Red Flag military FG community (OPRF)&lt;br /&gt;
| https://discord.gg/ptVapkE&lt;br /&gt;
|-&lt;br /&gt;
| Combined Joint Task Force 50 (OPRF event planning/hosting and more)&lt;br /&gt;
| https://discord.gg/2nxjb6y&lt;br /&gt;
|-&lt;br /&gt;
| Warbirds, WWII-era aircraft&lt;br /&gt;
| https://discord.gg/yJaP5Wn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Country Specific Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Australia (Scenery Development &amp;amp; Community)&lt;br /&gt;
| https://discord.gg/JzTEXsZ&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Italia (ITA Mercenaries)&lt;br /&gt;
| https://discord.gg/5RzyXRf&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Germany&lt;br /&gt;
| https://discord.gg/FNnpjCPSze&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Indian Community&lt;br /&gt;
| https://discord.gg/Tu7n5FmG5S&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Asia&lt;br /&gt;
| https://discord.gg/7saCkA2jQj&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Hong Kong&lt;br /&gt;
| https://discord.gg/9QVKcT6skU&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Myanmar&lt;br /&gt;
|https://discord.gg/VbT88KEGrk&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Aircraft-specific ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Aircraft !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Aermacchi MB-339&lt;br /&gt;
| https://discord.gg/vNZ5ZPv&lt;br /&gt;
|-&lt;br /&gt;
| Airbus [[Airbus A320 Family|A320]] &amp;amp; A330 Development&lt;br /&gt;
| https://discord.gg/7kzg9Te&lt;br /&gt;
|-&lt;br /&gt;
| Airbus A350 Development&lt;br /&gt;
| https://discord.gg/vK5f2s6&lt;br /&gt;
|-&lt;br /&gt;
| Boeing F/A-18C Hornet&lt;br /&gt;
| https://discord.gg/8GzpdK4j8P&lt;br /&gt;
|-&lt;br /&gt;
| LincolnWorks (747 and A380)&lt;br /&gt;
| https://discord.gg/2DMVpnJ&lt;br /&gt;
|-&lt;br /&gt;
| F-111 Aardvark&lt;br /&gt;
| https://discord.gg/DSrSbmx&lt;br /&gt;
|-&lt;br /&gt;
| [[General Dynamics F-16 Fighting Falcon]]&lt;br /&gt;
| https://discord.gg/8RcYnjA&lt;br /&gt;
|-&lt;br /&gt;
| MD-11 and Autoflight by Octal&lt;br /&gt;
| https://discord.gg/gxAhC3j&lt;br /&gt;
|-&lt;br /&gt;
| [[Mikoyan-Gurevich MiG-21bis]]&lt;br /&gt;
| https://discord.gg/bs8xyz3&lt;br /&gt;
|-&lt;br /&gt;
| [[Mirage 2000]]&lt;br /&gt;
| https://discord.gg/xZ3r2KR&lt;br /&gt;
|-&lt;br /&gt;
| Panavia Tornado&lt;br /&gt;
| https://discord.gg/26rvkr2&lt;br /&gt;
|-&lt;br /&gt;
| [[Saab 37 Viggen]]&lt;br /&gt;
| https://discord.gg/RJTwS9a&lt;br /&gt;
|-&lt;br /&gt;
| SEPECAT Jaguar&lt;br /&gt;
| https://discord.gg/G5q5XYN&lt;br /&gt;
|-&lt;br /&gt;
| FG-1000 Stealth Fighter&lt;br /&gt;
| https://discord.gg/3MFZauxyPW&lt;br /&gt;
|-&lt;br /&gt;
|Boeing 777&lt;br /&gt;
|https://discord.gg/8McTuYdK&lt;br /&gt;
|-&lt;br /&gt;
|A-10A Warthog&lt;br /&gt;
|https://discord.gg/RmtjmsT5vS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* https://discord.com/ Official website&lt;br /&gt;
&lt;br /&gt;
[[de:Discord]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=134462</id>
		<title>Discord</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Discord&amp;diff=134462"/>
		<updated>2022-01-17T13:04:23Z</updated>

		<summary type="html">&lt;p&gt;Thilo: added ULM school&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Discord''' is used in the FlightGear community as an alternative to [[Mumble]], [[TeamSpeak]], [[FGCom]] or [[Ventrilo]].&lt;br /&gt;
&lt;br /&gt;
Discord is a free voice and chat software that can be downloaded as an app or used in a browser.&lt;br /&gt;
&lt;br /&gt;
== Invite links ==&lt;br /&gt;
{{note|1=Its advised that you create a permanent account, instead of creating guest accounts as some people create duplicate accounts which clogs up the member logs and makes it more difficult to @mention people.}}&lt;br /&gt;
&lt;br /&gt;
Furthermore many other FlightGear servers exist that you may need an personal invite to join. The easiest way to find them is to go to the FlightGear server and ask or ask in forums.&lt;br /&gt;
&lt;br /&gt;
== FlightGear Communities on Discord ==&lt;br /&gt;
&lt;br /&gt;
=== General, Help and Support, Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear&lt;br /&gt;
| https://discord.gg/rzuV2DR&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear FDM School&lt;br /&gt;
| https://discord.gg/Uyrtsar&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Air Race League&lt;br /&gt;
| https://discord.gg/HCAuU9D&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Virtual Alliance&lt;br /&gt;
| https://discord.gg/VqzTG2N&lt;br /&gt;
|-&lt;br /&gt;
| FG Events&lt;br /&gt;
| https://discord.gg/GY4N6Cu&lt;br /&gt;
|-&lt;br /&gt;
| FG FDM School&lt;br /&gt;
| https://discord.gg/U5KXyMU&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Republic, A friendly community about FlightGear.&lt;br /&gt;
| https://discord.gg/sBJy46Uq7z&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear ULM (Ultralight Aircraft) Flightschool&lt;br /&gt;
|https://discord.gg/ECFhEWNBrv&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Military Aviation Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Operation Red Flag military FG community (OPRF)&lt;br /&gt;
| https://discord.gg/ptVapkE&lt;br /&gt;
|-&lt;br /&gt;
| Combined Joint Task Force 50 (OPRF event planning/hosting and more)&lt;br /&gt;
| https://discord.gg/2nxjb6y&lt;br /&gt;
|-&lt;br /&gt;
| Warbirds, WWII-era aircraft&lt;br /&gt;
| https://discord.gg/yJaP5Wn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Country Specific Communities ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Topic !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Australia (Scenery Development &amp;amp; Community)&lt;br /&gt;
| https://discord.gg/JzTEXsZ&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Italia (ITA Mercenaries)&lt;br /&gt;
| https://discord.gg/5RzyXRf&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Germany&lt;br /&gt;
| https://discord.gg/FNnpjCPSze&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Indian Community&lt;br /&gt;
| https://discord.gg/Tu7n5FmG5S&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Asia&lt;br /&gt;
| https://discord.gg/7saCkA2jQj&lt;br /&gt;
|-&lt;br /&gt;
| FlightGear Hong Kong&lt;br /&gt;
| https://discord.gg/9QVKcT6skU&lt;br /&gt;
|-&lt;br /&gt;
|FlightGear Myanmar&lt;br /&gt;
|https://discord.gg/VbT88KEGrk&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Aircraft-specific ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Aircraft !! Invite link&lt;br /&gt;
|-&lt;br /&gt;
| Aermacchi MB-339&lt;br /&gt;
| https://discord.gg/vNZ5ZPv&lt;br /&gt;
|-&lt;br /&gt;
| Airbus [[Airbus A320 Family|A320]] &amp;amp; A330 Development&lt;br /&gt;
| https://discord.gg/7kzg9Te&lt;br /&gt;
|-&lt;br /&gt;
| Airbus A350 Development&lt;br /&gt;
| https://discord.gg/vK5f2s6&lt;br /&gt;
|-&lt;br /&gt;
| Boeing F/A-18C Hornet&lt;br /&gt;
| https://discord.gg/8GzpdK4j8P&lt;br /&gt;
|-&lt;br /&gt;
| LincolnWorks (747 and A380)&lt;br /&gt;
| https://discord.gg/2DMVpnJ&lt;br /&gt;
|-&lt;br /&gt;
| F-111 Aardvark&lt;br /&gt;
| https://discord.gg/DSrSbmx&lt;br /&gt;
|-&lt;br /&gt;
| [[General Dynamics F-16 Fighting Falcon]]&lt;br /&gt;
| https://discord.gg/8RcYnjA&lt;br /&gt;
|-&lt;br /&gt;
| MD-11 and Autoflight by Octal&lt;br /&gt;
| https://discord.gg/gxAhC3j&lt;br /&gt;
|-&lt;br /&gt;
| [[Mikoyan-Gurevich MiG-21bis]]&lt;br /&gt;
| https://discord.gg/bs8xyz3&lt;br /&gt;
|-&lt;br /&gt;
| [[Mirage 2000]]&lt;br /&gt;
| https://discord.gg/xZ3r2KR&lt;br /&gt;
|-&lt;br /&gt;
| Panavia Tornado&lt;br /&gt;
| https://discord.gg/26rvkr2&lt;br /&gt;
|-&lt;br /&gt;
| [[Saab 37 Viggen]]&lt;br /&gt;
| https://discord.gg/RJTwS9a&lt;br /&gt;
|-&lt;br /&gt;
| SEPECAT Jaguar&lt;br /&gt;
| https://discord.gg/G5q5XYN&lt;br /&gt;
|-&lt;br /&gt;
| FG-1000 Stealth Fighter&lt;br /&gt;
| https://discord.gg/3MFZauxyPW&lt;br /&gt;
|-&lt;br /&gt;
|Boeing 777&lt;br /&gt;
|https://discord.gg/8McTuYdK&lt;br /&gt;
|-&lt;br /&gt;
|A-10A Warthog&lt;br /&gt;
|https://discord.gg/RmtjmsT5vS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* https://discord.com/ Official website&lt;br /&gt;
&lt;br /&gt;
[[de:Discord]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=131414</id>
		<title>Ramp Marshall</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=131414"/>
		<updated>2021-04-27T10:50:51Z</updated>

		<summary type="html">&lt;p&gt;Thilo: Some updates in the installation page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''(ramp) marshaller''' is a person who guides [[aircraft]] using hand (and wand) signals at a parking ramp. This is a new feature that being worked on for a more generalized scale in [[FlightGear]]. Until this gets merged into the fgdata repository, you can get this from omega95's fgdata clone or the new Singapore Scenery development. &lt;br /&gt;
&lt;br /&gt;
Currently, support can be added to airports with the [[UFO]], but soon ramp marshallers will be added automatically if a parking spot's flag is set to enable it. This will integrate FlightGear parking positions, ramp marshallers and other features that might come up related to parking ramps or gates.&lt;br /&gt;
&lt;br /&gt;
These are videos of the first prototype of the ramp marshaller.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | c_KEbyv_h5A}} {{#ev:youtube | Hz4WU8nsdls}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== How to install the ramp marshaller ===&lt;br /&gt;
&lt;br /&gt;
# Download [https://github.com/RenanMsV/ramp-marshall this GitHub] and unzip it.&lt;br /&gt;
# Download this [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] &lt;br /&gt;
# Put the '''Ramp''' Folder (can be found under Models/Airports in the GitHub) in $FG-ROOT\Models\Airport&lt;br /&gt;
# Put the [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] and the '''addon-main.nas''' (can be found unter the GitHub) in $FG-ROOT\Nasal&lt;br /&gt;
# Put every File and Folder wich is left now from the GitHub in your addons folder (see: [[Addon|how to install addons in FlightGear]])&lt;br /&gt;
&lt;br /&gt;
== Using the ramp marshaller ==&lt;br /&gt;
To use the ramp marshaller with a compatible aircraft at a compatible airport (scroll down to see how you can make aircraft and/or airports compatible), simply taxi to the gate/ramp you want to park at and click on the marshaller waiting at the ramp. His hands should move from rest position (both wands down by his sides) to direct you to the ramp. It's recommended to taxi to the ramp on the taxiway lines as long as you can see them and once they go out of view, follow the marshaller's instructions. Make sure that you're not taxiing faster than 5 to 10 kts at the ramp.&lt;br /&gt;
&lt;br /&gt;
Currently, the ramp marshaller knows the following signals -&lt;br /&gt;
* Move forward&lt;br /&gt;
* Turn left&lt;br /&gt;
* Turn right&lt;br /&gt;
* Slow down and stop&lt;br /&gt;
* Immediate stop&lt;br /&gt;
&lt;br /&gt;
But we're teaching him new signals. If you want to teach him a signal, scroll down to find out how. To find out what the signals look like, take a look at the videos above.&lt;br /&gt;
&lt;br /&gt;
== Adding ramp marshalling support ==&lt;br /&gt;
=== Adding ramp marshalling compatibility to aircraft ===&lt;br /&gt;
[[File:A330-200 Ramp Marshall Compatibility - getting position with ac3D.png|thumb|270px|Demonstrating how to get x-position of nose gear with AC3D for ramp marshalling compatibility.]]&lt;br /&gt;
&lt;br /&gt;
It's actually very simple to add ramp marshalling compatibility to an aircraft, the only file required to be edited is the aircraft's [[Aircraft-set.xml|&amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file]] (or common xml file for aircraft groups). The user is still required to use some kind of 3D modeling program to get the position.&lt;br /&gt;
&lt;br /&gt;
# Open the aircraft's model file (containing the gears) with a 3D modeling program and get the '''x''' position of the center of the nose gear. (Or the position you want to rest at the ramp)&lt;br /&gt;
# Add the following code within the &amp;lt;code&amp;gt;&amp;lt;sim&amp;gt; ... &amp;lt;model&amp;gt; ... &amp;lt;/model&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft's &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file. (or common xml file for aircraft groups)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ramp&amp;gt;&lt;br /&gt;
    &amp;lt;x-m type=&amp;quot;float&amp;quot;&amp;gt;-15.9664&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;class type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;/ramp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The '''x''' position from the 3D model is in the &amp;lt;code&amp;gt;&amp;lt;x-m&amp;gt;&amp;lt;/code&amp;gt; tag and the aircraft class is in the &amp;lt;code&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/code&amp;gt; tag. With the current models, the aircraft classes are as follows -&lt;br /&gt;
:* 0 - 747s, 777-300s, A340s, A380s&lt;br /&gt;
:* 1 - 777-300s, A330-300s, 787s&lt;br /&gt;
:* 2 - A330-200s, 757s, 767s&lt;br /&gt;
:* 3 - A320s (includes A318s, A319s and A321s), 737s and other aircraft in general. This works for CRJs, E-jets etc.&lt;br /&gt;
&lt;br /&gt;
This should be all! The ramp marshaller should be able to ''recognize'' the aircraft and guide it to the right position at the ramp!&lt;br /&gt;
&lt;br /&gt;
=== Adding ramp marshallers to an airport ===&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' In the future, this will change because ramp marshall positions are going to be connected to an airport's '''groundnet.xml''' file.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp-marshall-arpt-1.png|thumb|270px|Placing ramp marshaller using ufo]]&lt;br /&gt;
[[File:ramp-marshall-arpt-2.png|thumb|270px|Converting STG file to ramps XML]]&lt;br /&gt;
&lt;br /&gt;
# Start up FlightGear with the UFO at the airport you want to place ramp marshallers.&lt;br /&gt;
# Hit the {{key press|L}} key on the keyboard to bring up the model selection dialog and select &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Models/Airport/Ramp/ramp.xml&amp;lt;/tt&amp;gt;. Using the ufo's scenery editing tools, place (and adjust) ramp marshallers everywhere you want. To make it simpler, click on the exact position you want the airplane to come to a stop. This will usually be at the end of a parking ramp's taxiway lines. Then, you will only have to change the heading.&lt;br /&gt;
# Once you've finished placing all the models, hit the {{key press|D}} key to dump the stg lines onto the console. (Do not close FlightGear yet) Copy the stg lines into a blank file. (name does not matter) And save it somewhere on your PC ($FG-HOME is a good place for that).&lt;br /&gt;
# Open up the Nasal console and execute the following function.&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;ramp_marshall.convert_stg();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Choose the stg file you pasted the dumped stg lines in to convert the file into a readable xml ramp position file. If you get following error: &amp;lt;code&amp;gt;(unauthorized directory - authorization no longer follows symlinks; to authorize reading additional directories, pass them to --allow-nasal-read)&amp;lt;/code&amp;gt;, type in Command line in the Launcher following phrase: &amp;lt;code&amp;gt;--allow-nasal-read=/path/to/directory&amp;lt;/code&amp;gt;. The converted file can be found &amp;lt;tt&amp;gt;[[$FG_HOME]]/Export&amp;lt;/tt&amp;gt; or under the Roaming folder in Windows.&lt;br /&gt;
# Copy the exported file (it will be called '''ramps-export.xml''') to &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/&amp;lt;icao&amp;gt;/ramps.xml&amp;lt;/tt&amp;gt;. For example, if you want these ramps at Singapore Changi Intl. Airport (WSSS), you'd put it in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/WSSS/ramps.xml&amp;lt;/tt&amp;gt;. (you have to rename the '''ramps-export.xml''' into '''ramps.xml'''). If there is no folder for your Airport, just create a new one with the icao of your Airport.&lt;br /&gt;
&lt;br /&gt;
== Contributing to the module ==&lt;br /&gt;
&lt;br /&gt;
=== Teach the ramp marshaller new signals ===&lt;br /&gt;
&lt;br /&gt;
The marshaller's signal positions are stored in the '''ramp_marhsall.nas''' Nasal file in a hash. This is so that the signals can be accessed easily by other functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var pos = {&lt;br /&gt;
	rest: rmPos.new(lA_x:80, rA_x:-80),&lt;br /&gt;
	stop: rmPos.new(lA_x:-55, lAO_x:-70, rA_x:55, rAO_x:70),&lt;br /&gt;
	fwd_out: rmPos.new(lA_z:-50, lAO_x:-30,  rA_z:50, rAO_x:30),&lt;br /&gt;
	fwd_in:  rmPos.new(lA_z:-50, lAO_x:-120, rA_z:50, rAO_x:120),&lt;br /&gt;
	left_in:   rmPos.new(lAO_x:-120),&lt;br /&gt;
	left_out:  rmPos.new(lAO_x:-30),&lt;br /&gt;
	right_in:  rmPos.new(rAO_x:120),&lt;br /&gt;
	right_out: rmPos.new(rAO_x:30)&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* lA_x - Left Arm (shoulder joint) x axis rotation&lt;br /&gt;
* lA_y - Left Arm (shoulder joint) y axis rotation&lt;br /&gt;
* lA_z - Left Arm (shoulder joint) z axis rotation&lt;br /&gt;
* lAO_x - Left Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* lH_x - Left Hand x axis rotation&lt;br /&gt;
* lH_y - Left Hand y axis rotation&lt;br /&gt;
* lH_z - Left Hand x axis rotation&lt;br /&gt;
* rA_x - Right Arm (shoulder joint) x axis rotation&lt;br /&gt;
* rA_y - Right Arm (shoulder joint) y axis rotation&lt;br /&gt;
* rA_z - Right Arm (shoulder joint) z axis rotation&lt;br /&gt;
* rAO_x - Right Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* rH_x - Right Hand x axis rotation&lt;br /&gt;
* rH_y - Right Hand y axis rotation&lt;br /&gt;
* rH_z - Right Hand x axis rotation&lt;br /&gt;
&lt;br /&gt;
You can mess with the positions in a 3D modeling program or in FlightGear itself. Just look in the property tree under &amp;lt;tt&amp;gt;/airports/{icao}/ramps/ramp[n]&amp;lt;/tt&amp;gt; (find the correct 'n' index for the person last clicked on by looking at the &amp;lt;tt&amp;gt;/airports/active-ramp&amp;lt;/tt&amp;gt; property) and set the ramp marshaller's function to something random (so it isn't recognized) and change the values in the tree. Note: to get this to work properly, you first have to click on the nearest ramp marshaller, look up his index, and then click on a different marshaller so that the other marshaller's properties are not updated.&lt;br /&gt;
&lt;br /&gt;
If you would like to add a new hand position (say both hands out stright), then you'd add this to the bottom of the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
     hands_out_front: rmPos.new(lA_z:-90, rA_z:90)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that one only needs to specify the rotations that are non-zero using hash syntax (key:value) in the arguments to the rmPos.new function. Remember to put a comma after the line right before the new one you add, since each line needs to end with a comma.&lt;br /&gt;
&lt;br /&gt;
Now, you can call this position as '''pos.hands_out_front''' to be used in the sequence function. Or if you'd like to get or set one of the position values.&lt;br /&gt;
&lt;br /&gt;
To add the signal sequence, add a new '''if''' state at the end of the last '''if(me.function == &amp;quot;&amp;lt;function_name&amp;gt;&amp;quot;''' statement with the sequence. You can use me.phase to control the sequence phase/step. &lt;br /&gt;
&lt;br /&gt;
Then, add the signal sequence. &lt;br /&gt;
&lt;br /&gt;
HINT - To animate the marshaller to a position you specified and then to go to the next step when it's complete and be achieved like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(me.phase == 0) {&lt;br /&gt;
    if(!check_pos(ramp_tree, pos.hands_out_front)) {&lt;br /&gt;
	full_animate(ramp_tree, pos.hands_out_front, 100);&lt;br /&gt;
    } else {&lt;br /&gt;
        me.phase = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code checks if the marshallers is not in the '''hands_out_front''' pos already and if he isn't, he'll move his hands to that position. In the full_animate function, you can specify the speed his hands should move at in ''degrees per second''. In this case, he'll move his hands forward to the specified position at 100 degrees per second.&lt;br /&gt;
&lt;br /&gt;
==== Useful internal functions ====&lt;br /&gt;
&lt;br /&gt;
* '''rmPos.new(lA_x, lA_z, lAO_x, rA_x, rA_z, rAO_x)''' creates and returns a new instance of the rmPos hash. This hash is in the '''pos.&amp;lt;pos_name&amp;gt;''' format and can be used in the functions below.&lt;br /&gt;
&lt;br /&gt;
* '''getDeviation(heading, target)''' returns the deviation to a target heading from your current heading. This is used by the marshaller to help guide you to the ramp.&lt;br /&gt;
&lt;br /&gt;
* '''animate(property, target, rate)''' animates a property (slowly changes the property value) to a target value at the given rate. (Rate is in degrees per second)&lt;br /&gt;
&lt;br /&gt;
* '''get_pos_values(ramp_tree)''' returns the current position of the marshaller's arms in a hash similar to that of the pos.&amp;lt;pos_name&amp;gt; hash.&lt;br /&gt;
&lt;br /&gt;
* '''check_pos(ramp_tree, target) returns true if the marshaller is at a given position. '''target''' must be a hash similar to the '''pos.&amp;lt;pos_name&amp;gt;''' hash. It is best to simply send a position specified in the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
* '''full_animate(ramp_tree, pos_hash, rate) animates the ramp marshaller to the given position at the given rate.&lt;br /&gt;
&lt;br /&gt;
* '''load_ramps(icao)''' loads all ramps (and marshallers) at the given airport.&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' If any of the functions has '''ramp_tree''' as an argument and the function is being used within the ''main_loop'', the variable '''ramp_tree''' must be passed as an argument.&lt;br /&gt;
&lt;br /&gt;
=== Using different models or textures ===&lt;br /&gt;
&lt;br /&gt;
Soon, new features will becoming available which lets the ramp marshaller model be specified in the position config file.&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
&lt;br /&gt;
=== Visual Docking Guidance System ===&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Walk view]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=20572|title=Nasal based Independant Ramp Marshall}} (August 2013-Mars 2018)&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
* [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git Omega95's fgdata Gitorious archive] archived from the {{gitorious source|proj=fg|repo=omega95s-fgdata|text=original}} Mars 30, 2016.&lt;br /&gt;
* [https://archive.softwareheritage.org/browse/origin/?origin_url=https%3A%2F%2Fgitorious.org%2Ffg-singapore-scenery%2Ffg-singapore-devel.git FG Singapore Scenery Gitorious archive] archived from the {{gitorious source|proj=fg-singapore-scenery|repo=fg-singapore-devel|text=original}} Mars 30, 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=131413</id>
		<title>Ramp Marshall</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=131413"/>
		<updated>2021-04-27T10:27:39Z</updated>

		<summary type="html">&lt;p&gt;Thilo: Some updates in the installation page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''(ramp) marshaller''' is a person who guides [[aircraft]] using hand (and wand) signals at a parking ramp. This is a new feature that being worked on for a more generalized scale in [[FlightGear]]. Until this gets merged into the fgdata repository, you can get this from omega95's fgdata clone or the new Singapore Scenery development. &lt;br /&gt;
&lt;br /&gt;
Currently, support can be added to airports with the [[UFO]], but soon ramp marshallers will be added automatically if a parking spot's flag is set to enable it. This will integrate FlightGear parking positions, ramp marshallers and other features that might come up related to parking ramps or gates.&lt;br /&gt;
&lt;br /&gt;
These are videos of the first prototype of the ramp marshaller.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | c_KEbyv_h5A}} {{#ev:youtube | Hz4WU8nsdls}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== How to install the ramp marshaller ===&lt;br /&gt;
&lt;br /&gt;
# Download [https://github.com/RenanMsV/ramp-marshall this GitHub] and unzip it.&lt;br /&gt;
# Download this [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] &lt;br /&gt;
# Put the '''Ramp''' Folder (can be found under Models/Airports in the GitHub) in $FG-ROOT\Models\Airport&lt;br /&gt;
# Put every File and Folder wich is left now (inclusive the [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal ramp_marshall.nas]) of the GitHub in your addons folder (see: [[Addon|how to install addons in FlightGear]])&lt;br /&gt;
&lt;br /&gt;
== Using the ramp marshaller ==&lt;br /&gt;
To use the ramp marshaller with a compatible aircraft at a compatible airport (scroll down to see how you can make aircraft and/or airports compatible), simply taxi to the gate/ramp you want to park at and click on the marshaller waiting at the ramp. His hands should move from rest position (both wands down by his sides) to direct you to the ramp. It's recommended to taxi to the ramp on the taxiway lines as long as you can see them and once they go out of view, follow the marshaller's instructions. Make sure that you're not taxiing faster than 5 to 10 kts at the ramp.&lt;br /&gt;
&lt;br /&gt;
Currently, the ramp marshaller knows the following signals -&lt;br /&gt;
* Move forward&lt;br /&gt;
* Turn left&lt;br /&gt;
* Turn right&lt;br /&gt;
* Slow down and stop&lt;br /&gt;
* Immediate stop&lt;br /&gt;
&lt;br /&gt;
But we're teaching him new signals. If you want to teach him a signal, scroll down to find out how. To find out what the signals look like, take a look at the videos above.&lt;br /&gt;
&lt;br /&gt;
== Adding ramp marshalling support ==&lt;br /&gt;
=== Adding ramp marshalling compatibility to aircraft ===&lt;br /&gt;
[[File:A330-200 Ramp Marshall Compatibility - getting position with ac3D.png|thumb|270px|Demonstrating how to get x-position of nose gear with AC3D for ramp marshalling compatibility.]]&lt;br /&gt;
&lt;br /&gt;
It's actually very simple to add ramp marshalling compatibility to an aircraft, the only file required to be edited is the aircraft's [[Aircraft-set.xml|&amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file]] (or common xml file for aircraft groups). The user is still required to use some kind of 3D modeling program to get the position.&lt;br /&gt;
&lt;br /&gt;
# Open the aircraft's model file (containing the gears) with a 3D modeling program and get the '''x''' position of the center of the nose gear. (Or the position you want to rest at the ramp)&lt;br /&gt;
# Add the following code within the &amp;lt;code&amp;gt;&amp;lt;sim&amp;gt; ... &amp;lt;model&amp;gt; ... &amp;lt;/model&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft's &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file. (or common xml file for aircraft groups)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ramp&amp;gt;&lt;br /&gt;
    &amp;lt;x-m type=&amp;quot;float&amp;quot;&amp;gt;-15.9664&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;class type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;/ramp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The '''x''' position from the 3D model is in the &amp;lt;code&amp;gt;&amp;lt;x-m&amp;gt;&amp;lt;/code&amp;gt; tag and the aircraft class is in the &amp;lt;code&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/code&amp;gt; tag. With the current models, the aircraft classes are as follows -&lt;br /&gt;
:* 0 - 747s, 777-300s, A340s, A380s&lt;br /&gt;
:* 1 - 777-300s, A330-300s, 787s&lt;br /&gt;
:* 2 - A330-200s, 757s, 767s&lt;br /&gt;
:* 3 - A320s (includes A318s, A319s and A321s), 737s and other aircraft in general. This works for CRJs, E-jets etc.&lt;br /&gt;
&lt;br /&gt;
This should be all! The ramp marshaller should be able to ''recognize'' the aircraft and guide it to the right position at the ramp!&lt;br /&gt;
&lt;br /&gt;
=== Adding ramp marshallers to an airport ===&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' In the future, this will change because ramp marshall positions are going to be connected to an airport's '''groundnet.xml''' file.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp-marshall-arpt-1.png|thumb|270px|Placing ramp marshaller using ufo]]&lt;br /&gt;
[[File:ramp-marshall-arpt-2.png|thumb|270px|Converting STG file to ramps XML]]&lt;br /&gt;
&lt;br /&gt;
# Start up FlightGear with the UFO at the airport you want to place ramp marshallers.&lt;br /&gt;
# Hit the {{key press|L}} key on the keyboard to bring up the model selection dialog and select &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Models/Airport/Ramp/ramp.xml&amp;lt;/tt&amp;gt;. Using the ufo's scenery editing tools, place (and adjust) ramp marshallers everywhere you want. To make it simpler, click on the exact position you want the airplane to come to a stop. This will usually be at the end of a parking ramp's taxiway lines. Then, you will only have to change the heading.&lt;br /&gt;
# Once you've finished placing all the models, hit the {{key press|D}} key to dump the stg lines onto the console. (Do not close FlightGear yet) Copy the stg lines into a blank file. (name does not matter) And save it somewhere on your PC ($FG-HOME is a good place for that).&lt;br /&gt;
# Open up the Nasal console and execute the following function.&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;ramp_marshall.convert_stg();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Choose the stg file you pasted the dumped stg lines in to convert the file into a readable xml ramp position file. If you get following error: &amp;lt;code&amp;gt;(unauthorized directory - authorization no longer follows symlinks; to authorize reading additional directories, pass them to --allow-nasal-read)&amp;lt;/code&amp;gt;, type in Command line in the Launcher following phrase: &amp;lt;code&amp;gt;--allow-nasal-read=/path/to/directory&amp;lt;/code&amp;gt;. The converted file can be found &amp;lt;tt&amp;gt;[[$FG_HOME]]/Export&amp;lt;/tt&amp;gt; or under the Roaming folder in Windows.&lt;br /&gt;
# Copy the exported file (it will be called '''ramps-export.xml''') to &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/&amp;lt;icao&amp;gt;/ramps.xml&amp;lt;/tt&amp;gt;. For example, if you want these ramps at Singapore Changi Intl. Airport (WSSS), you'd put it in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/WSSS/ramps.xml&amp;lt;/tt&amp;gt;. (you have to rename the '''ramps-export.xml''' into '''ramps.xml'''). If there is no folder for your Airport, just create a new one with the icao of your Airport.&lt;br /&gt;
&lt;br /&gt;
== Contributing to the module ==&lt;br /&gt;
&lt;br /&gt;
=== Teach the ramp marshaller new signals ===&lt;br /&gt;
&lt;br /&gt;
The marshaller's signal positions are stored in the '''ramp_marhsall.nas''' Nasal file in a hash. This is so that the signals can be accessed easily by other functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var pos = {&lt;br /&gt;
	rest: rmPos.new(lA_x:80, rA_x:-80),&lt;br /&gt;
	stop: rmPos.new(lA_x:-55, lAO_x:-70, rA_x:55, rAO_x:70),&lt;br /&gt;
	fwd_out: rmPos.new(lA_z:-50, lAO_x:-30,  rA_z:50, rAO_x:30),&lt;br /&gt;
	fwd_in:  rmPos.new(lA_z:-50, lAO_x:-120, rA_z:50, rAO_x:120),&lt;br /&gt;
	left_in:   rmPos.new(lAO_x:-120),&lt;br /&gt;
	left_out:  rmPos.new(lAO_x:-30),&lt;br /&gt;
	right_in:  rmPos.new(rAO_x:120),&lt;br /&gt;
	right_out: rmPos.new(rAO_x:30)&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* lA_x - Left Arm (shoulder joint) x axis rotation&lt;br /&gt;
* lA_y - Left Arm (shoulder joint) y axis rotation&lt;br /&gt;
* lA_z - Left Arm (shoulder joint) z axis rotation&lt;br /&gt;
* lAO_x - Left Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* lH_x - Left Hand x axis rotation&lt;br /&gt;
* lH_y - Left Hand y axis rotation&lt;br /&gt;
* lH_z - Left Hand x axis rotation&lt;br /&gt;
* rA_x - Right Arm (shoulder joint) x axis rotation&lt;br /&gt;
* rA_y - Right Arm (shoulder joint) y axis rotation&lt;br /&gt;
* rA_z - Right Arm (shoulder joint) z axis rotation&lt;br /&gt;
* rAO_x - Right Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* rH_x - Right Hand x axis rotation&lt;br /&gt;
* rH_y - Right Hand y axis rotation&lt;br /&gt;
* rH_z - Right Hand x axis rotation&lt;br /&gt;
&lt;br /&gt;
You can mess with the positions in a 3D modeling program or in FlightGear itself. Just look in the property tree under &amp;lt;tt&amp;gt;/airports/{icao}/ramps/ramp[n]&amp;lt;/tt&amp;gt; (find the correct 'n' index for the person last clicked on by looking at the &amp;lt;tt&amp;gt;/airports/active-ramp&amp;lt;/tt&amp;gt; property) and set the ramp marshaller's function to something random (so it isn't recognized) and change the values in the tree. Note: to get this to work properly, you first have to click on the nearest ramp marshaller, look up his index, and then click on a different marshaller so that the other marshaller's properties are not updated.&lt;br /&gt;
&lt;br /&gt;
If you would like to add a new hand position (say both hands out stright), then you'd add this to the bottom of the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
     hands_out_front: rmPos.new(lA_z:-90, rA_z:90)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that one only needs to specify the rotations that are non-zero using hash syntax (key:value) in the arguments to the rmPos.new function. Remember to put a comma after the line right before the new one you add, since each line needs to end with a comma.&lt;br /&gt;
&lt;br /&gt;
Now, you can call this position as '''pos.hands_out_front''' to be used in the sequence function. Or if you'd like to get or set one of the position values.&lt;br /&gt;
&lt;br /&gt;
To add the signal sequence, add a new '''if''' state at the end of the last '''if(me.function == &amp;quot;&amp;lt;function_name&amp;gt;&amp;quot;''' statement with the sequence. You can use me.phase to control the sequence phase/step. &lt;br /&gt;
&lt;br /&gt;
Then, add the signal sequence. &lt;br /&gt;
&lt;br /&gt;
HINT - To animate the marshaller to a position you specified and then to go to the next step when it's complete and be achieved like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(me.phase == 0) {&lt;br /&gt;
    if(!check_pos(ramp_tree, pos.hands_out_front)) {&lt;br /&gt;
	full_animate(ramp_tree, pos.hands_out_front, 100);&lt;br /&gt;
    } else {&lt;br /&gt;
        me.phase = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code checks if the marshallers is not in the '''hands_out_front''' pos already and if he isn't, he'll move his hands to that position. In the full_animate function, you can specify the speed his hands should move at in ''degrees per second''. In this case, he'll move his hands forward to the specified position at 100 degrees per second.&lt;br /&gt;
&lt;br /&gt;
==== Useful internal functions ====&lt;br /&gt;
&lt;br /&gt;
* '''rmPos.new(lA_x, lA_z, lAO_x, rA_x, rA_z, rAO_x)''' creates and returns a new instance of the rmPos hash. This hash is in the '''pos.&amp;lt;pos_name&amp;gt;''' format and can be used in the functions below.&lt;br /&gt;
&lt;br /&gt;
* '''getDeviation(heading, target)''' returns the deviation to a target heading from your current heading. This is used by the marshaller to help guide you to the ramp.&lt;br /&gt;
&lt;br /&gt;
* '''animate(property, target, rate)''' animates a property (slowly changes the property value) to a target value at the given rate. (Rate is in degrees per second)&lt;br /&gt;
&lt;br /&gt;
* '''get_pos_values(ramp_tree)''' returns the current position of the marshaller's arms in a hash similar to that of the pos.&amp;lt;pos_name&amp;gt; hash.&lt;br /&gt;
&lt;br /&gt;
* '''check_pos(ramp_tree, target) returns true if the marshaller is at a given position. '''target''' must be a hash similar to the '''pos.&amp;lt;pos_name&amp;gt;''' hash. It is best to simply send a position specified in the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
* '''full_animate(ramp_tree, pos_hash, rate) animates the ramp marshaller to the given position at the given rate.&lt;br /&gt;
&lt;br /&gt;
* '''load_ramps(icao)''' loads all ramps (and marshallers) at the given airport.&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' If any of the functions has '''ramp_tree''' as an argument and the function is being used within the ''main_loop'', the variable '''ramp_tree''' must be passed as an argument.&lt;br /&gt;
&lt;br /&gt;
=== Using different models or textures ===&lt;br /&gt;
&lt;br /&gt;
Soon, new features will becoming available which lets the ramp marshaller model be specified in the position config file.&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
&lt;br /&gt;
=== Visual Docking Guidance System ===&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Walk view]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=20572|title=Nasal based Independant Ramp Marshall}} (August 2013-Mars 2018)&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
* [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git Omega95's fgdata Gitorious archive] archived from the {{gitorious source|proj=fg|repo=omega95s-fgdata|text=original}} Mars 30, 2016.&lt;br /&gt;
* [https://archive.softwareheritage.org/browse/origin/?origin_url=https%3A%2F%2Fgitorious.org%2Ffg-singapore-scenery%2Ffg-singapore-devel.git FG Singapore Scenery Gitorious archive] archived from the {{gitorious source|proj=fg-singapore-scenery|repo=fg-singapore-devel|text=original}} Mars 30, 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=131412</id>
		<title>Ramp Marshall</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Ramp_Marshall&amp;diff=131412"/>
		<updated>2021-04-27T10:18:06Z</updated>

		<summary type="html">&lt;p&gt;Thilo: Added a Installation page and added some more phrases for more clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''(ramp) marshaller''' is a person who guides [[aircraft]] using hand (and wand) signals at a parking ramp. This is a new feature that being worked on for a more generalized scale in [[FlightGear]]. Until this gets merged into the fgdata repository, you can get this from omega95's fgdata clone or the new Singapore Scenery development. &lt;br /&gt;
&lt;br /&gt;
Currently, support can be added to airports with the [[UFO]], but soon ramp marshallers will be added automatically if a parking spot's flag is set to enable it. This will integrate FlightGear parking positions, ramp marshallers and other features that might come up related to parking ramps or gates.&lt;br /&gt;
&lt;br /&gt;
These are videos of the first prototype of the ramp marshaller.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | c_KEbyv_h5A}} {{#ev:youtube | Hz4WU8nsdls}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== How to install the ramp marshaller ===&lt;br /&gt;
&lt;br /&gt;
# Download [https://github.com/RenanMsV/ramp-marshall this GitHub] and unzip it.&lt;br /&gt;
# Download this [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marshall.nas'''] &lt;br /&gt;
# Put the '''Ramp''' Folder (can be found under Models/Airports in the GitHub) in $FG-ROOT\Models\Airport&lt;br /&gt;
# Put the '''ramp-marshall-dlg.xml''' (can be found under gui/dialogs in the GitHub) into $FG-ROOT\gui\dialogs&lt;br /&gt;
# Put every File which is not under any folder in the GitHub in your addons folder (see: [[Addon|how to install addons in FlightGear]])&lt;br /&gt;
# Now put the [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git&amp;amp;path=Nasal '''ramp_marhsall.nas'''] and the '''addon-main.nas''' (which can be found under the GitHub) in $FG-ROOT\Nasal&lt;br /&gt;
&lt;br /&gt;
== Using the ramp marshaller ==&lt;br /&gt;
To use the ramp marshaller with a compatible aircraft at a compatible airport (scroll down to see how you can make aircraft and/or airports compatible), simply taxi to the gate/ramp you want to park at and click on the marshaller waiting at the ramp. His hands should move from rest position (both wands down by his sides) to direct you to the ramp. It's recommended to taxi to the ramp on the taxiway lines as long as you can see them and once they go out of view, follow the marshaller's instructions. Make sure that you're not taxiing faster than 5 to 10 kts at the ramp.&lt;br /&gt;
&lt;br /&gt;
Currently, the ramp marshaller knows the following signals -&lt;br /&gt;
* Move forward&lt;br /&gt;
* Turn left&lt;br /&gt;
* Turn right&lt;br /&gt;
* Slow down and stop&lt;br /&gt;
* Immediate stop&lt;br /&gt;
&lt;br /&gt;
But we're teaching him new signals. If you want to teach him a signal, scroll down to find out how. To find out what the signals look like, take a look at the videos above.&lt;br /&gt;
&lt;br /&gt;
== Adding ramp marshalling support ==&lt;br /&gt;
=== Adding ramp marshalling compatibility to aircraft ===&lt;br /&gt;
[[File:A330-200 Ramp Marshall Compatibility - getting position with ac3D.png|thumb|270px|Demonstrating how to get x-position of nose gear with AC3D for ramp marshalling compatibility.]]&lt;br /&gt;
&lt;br /&gt;
It's actually very simple to add ramp marshalling compatibility to an aircraft, the only file required to be edited is the aircraft's [[Aircraft-set.xml|&amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file]] (or common xml file for aircraft groups). The user is still required to use some kind of 3D modeling program to get the position.&lt;br /&gt;
&lt;br /&gt;
# Open the aircraft's model file (containing the gears) with a 3D modeling program and get the '''x''' position of the center of the nose gear. (Or the position you want to rest at the ramp)&lt;br /&gt;
# Add the following code within the &amp;lt;code&amp;gt;&amp;lt;sim&amp;gt; ... &amp;lt;model&amp;gt; ... &amp;lt;/model&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft's &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file. (or common xml file for aircraft groups)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ramp&amp;gt;&lt;br /&gt;
    &amp;lt;x-m type=&amp;quot;float&amp;quot;&amp;gt;-15.9664&amp;lt;/x-m&amp;gt;&lt;br /&gt;
    &amp;lt;class type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;/ramp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:The '''x''' position from the 3D model is in the &amp;lt;code&amp;gt;&amp;lt;x-m&amp;gt;&amp;lt;/code&amp;gt; tag and the aircraft class is in the &amp;lt;code&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/code&amp;gt; tag. With the current models, the aircraft classes are as follows -&lt;br /&gt;
:* 0 - 747s, 777-300s, A340s, A380s&lt;br /&gt;
:* 1 - 777-300s, A330-300s, 787s&lt;br /&gt;
:* 2 - A330-200s, 757s, 767s&lt;br /&gt;
:* 3 - A320s (includes A318s, A319s and A321s), 737s and other aircraft in general. This works for CRJs, E-jets etc.&lt;br /&gt;
&lt;br /&gt;
This should be all! The ramp marshaller should be able to ''recognize'' the aircraft and guide it to the right position at the ramp!&lt;br /&gt;
&lt;br /&gt;
=== Adding ramp marshallers to an airport ===&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' In the future, this will change because ramp marshall positions are going to be connected to an airport's '''groundnet.xml''' file.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp-marshall-arpt-1.png|thumb|270px|Placing ramp marshaller using ufo]]&lt;br /&gt;
[[File:ramp-marshall-arpt-2.png|thumb|270px|Converting STG file to ramps XML]]&lt;br /&gt;
&lt;br /&gt;
# Start up FlightGear with the UFO at the airport you want to place ramp marshallers.&lt;br /&gt;
# Hit the {{key press|L}} key on the keyboard to bring up the model selection dialog and select &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Models/Airport/Ramp/ramp.xml&amp;lt;/tt&amp;gt;. Using the ufo's scenery editing tools, place (and adjust) ramp marshallers everywhere you want. To make it simpler, click on the exact position you want the airplane to come to a stop. This will usually be at the end of a parking ramp's taxiway lines. Then, you will only have to change the heading.&lt;br /&gt;
# Once you've finished placing all the models, hit the {{key press|D}} key to dump the stg lines onto the console. (Do not close FlightGear yet) Copy the stg lines into a blank file. (name does not matter) And save it somewhere on your PC ($FG-HOME is a good place for that).&lt;br /&gt;
# Open up the Nasal console and execute the following function.&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;ramp_marshall.convert_stg();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Choose the stg file you pasted the dumped stg lines in to convert the file into a readable xml ramp position file. If you get following error: &amp;lt;code&amp;gt;(unauthorized directory - authorization no longer follows symlinks; to authorize reading additional directories, pass them to --allow-nasal-read)&amp;lt;/code&amp;gt;, type in Command line in the Launcher following phrase: &amp;lt;code&amp;gt;--allow-nasal-read=/path/to/directory&amp;lt;/code&amp;gt;. The converted file can be found &amp;lt;tt&amp;gt;[[$FG_HOME]]/Export&amp;lt;/tt&amp;gt; or under the Roaming folder in Windows.&lt;br /&gt;
# Copy the exported file (it will be called '''ramps-export.xml''') to &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/&amp;lt;icao&amp;gt;/ramps.xml&amp;lt;/tt&amp;gt;. For example, if you want these ramps at Singapore Changi Intl. Airport (WSSS), you'd put it in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Airports/WSSS/ramps.xml&amp;lt;/tt&amp;gt;. (you have to rename the '''ramps-export.xml''' into '''ramps.xml'''). If there is no folder for your Airport, just create a new one with the icao of your Airport.&lt;br /&gt;
&lt;br /&gt;
== Contributing to the module ==&lt;br /&gt;
&lt;br /&gt;
=== Teach the ramp marshaller new signals ===&lt;br /&gt;
&lt;br /&gt;
The marshaller's signal positions are stored in the '''ramp_marhsall.nas''' Nasal file in a hash. This is so that the signals can be accessed easily by other functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var pos = {&lt;br /&gt;
	rest: rmPos.new(lA_x:80, rA_x:-80),&lt;br /&gt;
	stop: rmPos.new(lA_x:-55, lAO_x:-70, rA_x:55, rAO_x:70),&lt;br /&gt;
	fwd_out: rmPos.new(lA_z:-50, lAO_x:-30,  rA_z:50, rAO_x:30),&lt;br /&gt;
	fwd_in:  rmPos.new(lA_z:-50, lAO_x:-120, rA_z:50, rAO_x:120),&lt;br /&gt;
	left_in:   rmPos.new(lAO_x:-120),&lt;br /&gt;
	left_out:  rmPos.new(lAO_x:-30),&lt;br /&gt;
	right_in:  rmPos.new(rAO_x:120),&lt;br /&gt;
	right_out: rmPos.new(rAO_x:30)&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* lA_x - Left Arm (shoulder joint) x axis rotation&lt;br /&gt;
* lA_y - Left Arm (shoulder joint) y axis rotation&lt;br /&gt;
* lA_z - Left Arm (shoulder joint) z axis rotation&lt;br /&gt;
* lAO_x - Left Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* lH_x - Left Hand x axis rotation&lt;br /&gt;
* lH_y - Left Hand y axis rotation&lt;br /&gt;
* lH_z - Left Hand x axis rotation&lt;br /&gt;
* rA_x - Right Arm (shoulder joint) x axis rotation&lt;br /&gt;
* rA_y - Right Arm (shoulder joint) y axis rotation&lt;br /&gt;
* rA_z - Right Arm (shoulder joint) z axis rotation&lt;br /&gt;
* rAO_x - Right Arm Outer (elbow joint) x axis rotation&lt;br /&gt;
* rH_x - Right Hand x axis rotation&lt;br /&gt;
* rH_y - Right Hand y axis rotation&lt;br /&gt;
* rH_z - Right Hand x axis rotation&lt;br /&gt;
&lt;br /&gt;
You can mess with the positions in a 3D modeling program or in FlightGear itself. Just look in the property tree under &amp;lt;tt&amp;gt;/airports/{icao}/ramps/ramp[n]&amp;lt;/tt&amp;gt; (find the correct 'n' index for the person last clicked on by looking at the &amp;lt;tt&amp;gt;/airports/active-ramp&amp;lt;/tt&amp;gt; property) and set the ramp marshaller's function to something random (so it isn't recognized) and change the values in the tree. Note: to get this to work properly, you first have to click on the nearest ramp marshaller, look up his index, and then click on a different marshaller so that the other marshaller's properties are not updated.&lt;br /&gt;
&lt;br /&gt;
If you would like to add a new hand position (say both hands out stright), then you'd add this to the bottom of the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
     hands_out_front: rmPos.new(lA_z:-90, rA_z:90)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that one only needs to specify the rotations that are non-zero using hash syntax (key:value) in the arguments to the rmPos.new function. Remember to put a comma after the line right before the new one you add, since each line needs to end with a comma.&lt;br /&gt;
&lt;br /&gt;
Now, you can call this position as '''pos.hands_out_front''' to be used in the sequence function. Or if you'd like to get or set one of the position values.&lt;br /&gt;
&lt;br /&gt;
To add the signal sequence, add a new '''if''' state at the end of the last '''if(me.function == &amp;quot;&amp;lt;function_name&amp;gt;&amp;quot;''' statement with the sequence. You can use me.phase to control the sequence phase/step. &lt;br /&gt;
&lt;br /&gt;
Then, add the signal sequence. &lt;br /&gt;
&lt;br /&gt;
HINT - To animate the marshaller to a position you specified and then to go to the next step when it's complete and be achieved like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(me.phase == 0) {&lt;br /&gt;
    if(!check_pos(ramp_tree, pos.hands_out_front)) {&lt;br /&gt;
	full_animate(ramp_tree, pos.hands_out_front, 100);&lt;br /&gt;
    } else {&lt;br /&gt;
        me.phase = 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code checks if the marshallers is not in the '''hands_out_front''' pos already and if he isn't, he'll move his hands to that position. In the full_animate function, you can specify the speed his hands should move at in ''degrees per second''. In this case, he'll move his hands forward to the specified position at 100 degrees per second.&lt;br /&gt;
&lt;br /&gt;
==== Useful internal functions ====&lt;br /&gt;
&lt;br /&gt;
* '''rmPos.new(lA_x, lA_z, lAO_x, rA_x, rA_z, rAO_x)''' creates and returns a new instance of the rmPos hash. This hash is in the '''pos.&amp;lt;pos_name&amp;gt;''' format and can be used in the functions below.&lt;br /&gt;
&lt;br /&gt;
* '''getDeviation(heading, target)''' returns the deviation to a target heading from your current heading. This is used by the marshaller to help guide you to the ramp.&lt;br /&gt;
&lt;br /&gt;
* '''animate(property, target, rate)''' animates a property (slowly changes the property value) to a target value at the given rate. (Rate is in degrees per second)&lt;br /&gt;
&lt;br /&gt;
* '''get_pos_values(ramp_tree)''' returns the current position of the marshaller's arms in a hash similar to that of the pos.&amp;lt;pos_name&amp;gt; hash.&lt;br /&gt;
&lt;br /&gt;
* '''check_pos(ramp_tree, target) returns true if the marshaller is at a given position. '''target''' must be a hash similar to the '''pos.&amp;lt;pos_name&amp;gt;''' hash. It is best to simply send a position specified in the '''pos''' hash.&lt;br /&gt;
&lt;br /&gt;
* '''full_animate(ramp_tree, pos_hash, rate) animates the ramp marshaller to the given position at the given rate.&lt;br /&gt;
&lt;br /&gt;
* '''load_ramps(icao)''' loads all ramps (and marshallers) at the given airport.&lt;br /&gt;
&lt;br /&gt;
'''NOTE -''' If any of the functions has '''ramp_tree''' as an argument and the function is being used within the ''main_loop'', the variable '''ramp_tree''' must be passed as an argument.&lt;br /&gt;
&lt;br /&gt;
=== Using different models or textures ===&lt;br /&gt;
&lt;br /&gt;
Soon, new features will becoming available which lets the ramp marshaller model be specified in the position config file.&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
&lt;br /&gt;
=== Visual Docking Guidance System ===&lt;br /&gt;
&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Walk view]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=20572|title=Nasal based Independant Ramp Marshall}} (August 2013-Mars 2018)&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
* [https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://gitorious.org/fg/omega95s-fgdata.git Omega95's fgdata Gitorious archive] archived from the {{gitorious source|proj=fg|repo=omega95s-fgdata|text=original}} Mars 30, 2016.&lt;br /&gt;
* [https://archive.softwareheritage.org/browse/origin/?origin_url=https%3A%2F%2Fgitorious.org%2Ffg-singapore-scenery%2Ffg-singapore-devel.git FG Singapore Scenery Gitorious archive] archived from the {{gitorious source|proj=fg-singapore-scenery|repo=fg-singapore-devel|text=original}} Mars 30, 2016.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Thilo</name></author>
	</entry>
</feed>