86
edits
m (Re ordered Pushback section, Positive Examples first, caveats last) |
m (Groundnets Intro and Tech perspective refresh & udpate) |
||
Line 288: | Line 288: | ||
== Ground networks == | == Ground networks == | ||
[[File:LFPG T2E ParkPos.jpg|thumb|Using a Groundnet, AI aircrafts can park precisely at the Terminal gates]] | |||
Using the traffic files information above, the AI Traffic Manager knows which AI aircraft should land at (and take off from) each airport and when. It will automatically place the relevant aircraft models in the scenery and animate them so they navigate from the runways to the gates and vice versa, according to their individual schedule. | |||
Although the physical layout of each airport is stored in FlightGear's APT.DAT master file, the information is not accurate enough to determine which specific routes AI models can use; Instead, Traffic manager will rely on a dedicated file containing a simple wireframe/network of taxiways and gates AI aircrafts can follow whilst on the ground ie a GroundNet. A groundnet is made of 3 different elements: Parking Positions, Nodes and Segments (to join nodes and Parking together). | |||
This routing information is aggregated, per airport, in a XML, stored and distributed by Terrasync as '''/Terrasync/Airports/[I]/[C]/[A]/[ICAO].groundnet.xml''' where ICAO stands for the 4 letter ICAO code of the relevant airport. | |||
Similarly to Terrain and Objects, Terrasync groundnets can be overridden by placing a personalized version in your custom scenery folder, using the same path structure: /Custom Scenery/Airports/[I]/[C]/[A]/[ICAO].groundnet.xml. | |||
Older versions of FlightGear store groundnets on your computer as $FG_SCENERY/Airports/[I]/[C]/[A]/[ICAO].groundnet.xml | |||
Groundnets are not mandatory but, in absence of this routing information, AI Aircrafts cannot park anywhere; they will still try to stick to their schedule, appearing magically at the centre of the airport and taxiing directly to the runways’ thresholds, over grass, buildings and static objects, on time. | |||
Groundnets rely on the runway threshold information stored in /Terrasync/Airports/[I]/[C]/[A]/[ICAO].threshold.xml to calculate the point at which an AI aircraft has reached a runway and can initiate take off, along the headings stored in this very same file. | |||
=== A technical perspective === | === A technical perspective === | ||
A ground network xml file consists of four | A ground network xml file consists of four tables: | ||
* The | * '''<frequencies>''' The Airport’s radio frequencies (Optional). As of v1.9.0, FlightGear uses these to display some ATC messages like start-up approval requests. You can "hear" them by tuning to the first ground frequency listed in the section. | ||
* The | * '''<parkingList>''' The details of each parking/gate at the airport and the characteristics of which AI aircrafts can use them. | ||
* The | * '''<TaxiNodes>''' The list of all the nodes in the ground network. | ||
* | * '''<TaxiWaySegments>''' A list of all links/segments (or "arcs" as David Luff called them initially) existing between all nodes and Parking Positions. | ||
Each | Each Parking and Node element in the groundnet has a unique index number, allowing routes be formed (from one ID to the next via a segment/arc) between parking positions and runways | ||
''Parking Positions Parameters:'' | |||
* '''type:''' | * '''index''' Unique ID, internal to the file structure | ||
* '''lat''' latitude in decimal minutes format, for example <code>N50 56.988</code>) | |||
* '''lon''' longitude in decimal minutes format, for example <code>W01 21.756</code>) | |||
* '''name & number ''' (gate identification as found on airport charts, for example <code>D23</code> or <code>C1</code>). | |||
* '''type:''' The type of aircraft which can use this space. Matched to the <flighttype> parameter found in traffic files: | |||
** '''ga''' (general aviation), | ** '''ga''' (general aviation), | ||
** '''cargo''' (cargo) | ** '''cargo''' (cargo/freighter) | ||
** '''gate''' (commercial passenger traffic) | ** '''gate''' (commercial passenger traffic) | ||
** '''mil-fighter''' (military fighter) | ** '''mil-fighter''' (military fighter) | ||
** '''mil-cargo''' (military transport) | ** '''mil-cargo''' (military transport) | ||
* '''heading:''' The heading at which the aircraft parks in this space. | |||
* '''radius:''' The size of the parking spot. Matched to the aircraft <radius> parameter in traffic files to determine if a given AI Aircraft model will fit the position. See [[aircraft radii]] | |||
* '''airlineCodes:''' a comma-separated list of ICAO airline codes allowed to park at this gate. Matched to the aircraft <airline> parameter of traffic files. Leave blank for all airline to be able to use the gate. | |||
* '''pushBackRoute:''' The ID of the next node in the network along a pushback route. In a correctly configured network, the AI aircraft will taxi to this node in reverse, thus simulating being pushed back. See the documentation for the PushBack hold point type below. | |||
''Nodes parameters:'' | |||
* ''' | * '''isOnRunway'''' A logical value that is 1 when the node is on the runway, 0 otherwise. Aircrafts waiting to take off will line up behind the last node marked “not on runway” (“0”) until the runway is clear | ||
* ''' | * '''holdPointType''' can have the following values: | ||
* ''' | ** '''None''' Not a holding point (normal taxi-through node) | ||
* ''' | ** '''PushBack''' The node marks the end of a pushback route, where the aircraft stops rolling backward and start rolling forward upon clearance. A pushback Holding Point can be part of more than one pushback route. See Pushback below. | ||
* ''' | ** '''Normal''' (Not yet supported): a regular taxiway holding point. | ||
** '''CAT II/III''' (Not yet supported): a special holding point for IFR conditions. | |||
''segments parameters:'' | |||
* '''begin''' The id of the parking space or AINode where this segment starts | * '''begin''' The id of the parking space or AINode where this segment starts | ||
* '''end''' The id of the parking space or AINode where this segment ends | * '''end''' The id of the parking space or AINode where this segment ends |
edits