13,208
edits
No edit summary |
(+-cleanup: Heading levels and line breaks; +-Image layout flow adjustment; +-Code tags for command line and code; +Related content section; +-Some more things) |
||
Line 1: | Line 1: | ||
{{note | | {{note |SpokenGCA is being replaced by the [[PAR_instrument|PAR addon]].<br /> We strongly recommend using the new PAR. | ||
}} | }} | ||
<!-- | <!-- | ||
Line 8: | Line 8: | ||
[[Spoken GCA]] allows the pilot to listen to the directives of the ''Ground Controlled Approach''. | [[Spoken GCA]] allows the pilot to listen to the directives of the ''Ground Controlled Approach''. | ||
(see [[Howto:Implementing_a_simple_GCA_system]]) | (see [[Howto:Implementing_a_simple_GCA_system]]) | ||
= Background = | |||
== Background == | |||
{{FGCquote | {{FGCquote | ||
|Is there any work on GCA (ground controlled approach) in progress, or have missed it? GCA is surprisingly accurate and easy to use, both as a pilot and a controller. |{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=193941#p193941 | |Is there any work on GCA (ground controlled approach) in progress, or have missed it? GCA is surprisingly accurate and easy to use, both as a pilot and a controller. |{{cite web |url=http://forum.flightgear.org/viewtopic.php?p=193941#p193941 | ||
Line 16: | Line 17: | ||
}} | }} | ||
}} | }} | ||
= What GCA is = | |||
== What GCA is == | |||
* https://secretsofcoldwarradar.omeka.net/exhibits/show/cold-war-radar-technology/radar-equipment/ground-controlled-approach-and | * https://secretsofcoldwarradar.omeka.net/exhibits/show/cold-war-radar-technology/radar-equipment/ground-controlled-approach-and | ||
* https://aroundthepattern.com/training/ground-controlled-approaches-gca/ | * https://aroundthepattern.com/training/ground-controlled-approaches-gca/ | ||
Line 22: | Line 24: | ||
* http://www.rquirk.com/cdnradar/cor/chapter21.pdf | * http://www.rquirk.com/cdnradar/cor/chapter21.pdf | ||
= What can you expect from GCA = | == What can you expect from GCA == | ||
[[File:Gca1.png|left|thumb|Horizontal trajectory when pilot follows GCA instructions]] | |||
Arriving in the vicinity of the airport with little or no visibility, the pilot can request the GCA service. | |||
{{-}} | |||
[[File:Gca2.png|left|thumb|Vertical trajectory when pilot follows GCA instructions]] | |||
The Controller, assisted by a PAR (''Precision Approach Radar''), will guide you through a safe path (both in heading and in altitude) that will take you to the head of the used runway. | |||
{{-}} | |||
== How to install == | |||
{{note | This is the latest version (Nov 24, 2017) | |||
Latest modifications: | |||
* plot2D helpers available. | * plot2D helpers available. | ||
* {{key press|Track}} button at PAR screen chooses which aircraft must be tracked. | * {{key press|Track}} button at PAR screen chooses which aircraft must be tracked. | ||
Line 37: | Line 42: | ||
* {{key press|RWY}}, {{key press|FLIP}} and {{key press|+}} {{key press|-}} zoom buttons at PAR screen. | * {{key press|RWY}}, {{key press|FLIP}} and {{key press|+}} {{key press|-}} zoom buttons at PAR screen. | ||
}} | }} | ||
If your FGFS version accepts [[Addons]], you can download this feature from the [https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/trunk/Addons/SpokenGCA/ Addons Repository]. Download all the 9 files into the directory of your choice. | |||
Launch FlightGear including --addon argument, | If your FGFS version accepts [[Addons]], you can download this feature from the [https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/trunk/Addons/SpokenGCA/ Addons Repository]{{fgaddon source |path=Addons/SpokenGCA |text=Addons Repository}}. Download all the 9 files into the directory of your choice. | ||
Launch FlightGear including <code>--addon</code> argument, in essence: | |||
<syntaxhighlight> | <syntaxhighlight> | ||
fgfs <usual args> --addon=/path/to/fgaddon/SpokenGCA</syntaxhighlight | fgfs <usual args> --addon=/path/to/fgaddon/SpokenGCA</syntaxhighlight> | ||
Otherwise, you can install it as a submodule. Contact the author for further instructions. | Otherwise, you can install it as a submodule. Contact the author for further instructions. | ||
And that's all ! | And that's all! | ||
= How to use it = | If you prefer (as I do), you can bind an unused joystick button to request GCA service. | ||
== How to use it == | |||
[[File:PARS-by-rleibner.png|thumb|Screenshot showing the latest GCA addon, featuring support for plotting terrain profiles and customizing other parameters of the GCA addon at runtime]] | [[File:PARS-by-rleibner.png|thumb|Screenshot showing the latest GCA addon, featuring support for plotting terrain profiles and customizing other parameters of the GCA addon at runtime]] | ||
When you are about 10 or 15 miles from your destination, tune Comm1 to an available ATC frequency (you can find them at ''Menu/Location/Airfield information''), | When you are about 10 or 15 miles from your destination, tune Comm1 to an available ATC frequency (you can find them at ''Menu/Location/Airfield information''), | ||
and press the {{key press|>}} key to request GCA assistance. | and press the {{key press|>}} key to request GCA assistance. | ||
You will hear the GCA's answer ''"<callsign>, this will be a PAR approach to <airport> runway <rwy>."' | |||
You will hear the GCA's answer ''"<callsign>, this will be a PAR approach to <airport> runway <rwy>."' | |||
Depending on your position and altitude, it will give you a vector towards the base leg or towards the final one. Also will instruct to climb or descend if necessary. | |||
Follow closely those instructions making standard turns first, and half standard ones when indicated. | Follow closely those instructions making standard turns first, and half standard ones when indicated. | ||
Adopt about 90 to 110 kts IAS until you hear ''"Begin descent"'', and configure a "final" atitude then. | Adopt about 90 to 110 kts IAS until you hear ''"Begin descent"'', and configure a "final" atitude then. | ||
If you are adviced ''"<Well/Slightly> <left/right> of course."'' then make "S" turns to fix that. Little ones if "Slightly", big ones if "Well". | |||
< | Correct your vertical speed if you hear ''"<Above/Below> glidepath."'' | ||
== The PAR screen == | |||
From version 0.5 onwards, the script calls an enhanced PARscreen. Unlike ''parscreen_class.nas'', which it replaces, the new ''par_class.nas'' provides a stand-alone canvas window. | |||
That means that you can instance as many PAR objects as you like. | That means that you can instance as many PAR objects as you like. | ||
From the Nasal console try this: | From the Nasal console try this: | ||
Line 72: | Line 80: | ||
var par06= gca.PAR(icao:"SUMU", rwy:"06").flipX(); | var par06= gca.PAR(icao:"SUMU", rwy:"06").flipX(); | ||
</syntaxhighlight>[[File:TouchAndGo.png|none]] | </syntaxhighlight>[[File:TouchAndGo.png|none]] | ||
This way (choosing opposite runways) you can check your ''touch-n-go'' skills. And this without using the GCA itself at all! | This way (choosing opposite runways) you can check your ''touch-n-go'' skills. And this without using the GCA itself at all! | ||
= Phraseology customization = | == Phraseology customization == | ||
You can customize the phraseology by editing the "''phraseology.xml''" file. | You can customize the phraseology by editing the "''phraseology.xml''" file. | ||
There you can find groups of tags like: | There you can find groups of tags like: | ||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
Line 84: | Line 94: | ||
<foo type="string">to fly. </foo> | <foo type="string">to fly. </foo> | ||
. . . . </syntaxhighlight> | . . . . </syntaxhighlight> | ||
which will be read as a single sentence (''"Hello world. It is a good day to fly. "''). | |||
which will be read as a single sentence (''"Hello world. It is a good day to fly. "''). | |||
=== Literals === | === Literals === | ||
Those in the example above are literal sentences that you can change by the strings you want. | Those in the example above are literal sentences that you can change by the strings you want. | ||
{{note | | {{note | | ||
* You should not include either " or ' . | * You should not include either <code>"</code> or <code>'</code>. | ||
* Punctuation is meaningfull. }} | * Punctuation is meaningfull. }} | ||
=== Substitutions === | === Substitutions === | ||
Strings starting by | Strings starting by <code>%</code> will call some <code>property value</code>. | ||
In the example above replace | In the example above replace <code>day</code> by <code>% /sim/startup/time-offset-type</code>. | ||
Now the sentence will be read as ''"Hello world. It is a good morning to fly. "'' or ''"Hello world. It is a good evening to fly. "'' depending on the time. | |||
Now the sentence will be read as ''"Hello world. It is a good morning to fly. "'' or ''"Hello world. It is a good evening to fly. "'' depending on the time. | |||
{{note | | {{note | | ||
* The called property must be a string.}} | * The called property must be a string.}} | ||
=== Concatenation === | === Concatenation === | ||
Strings starting by | Strings starting by <code>~</code> will append the sentence with another one. | ||
Try this: | Try this: | ||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
Line 106: | Line 123: | ||
<foo type="string">Have a nice fly, </foo> | <foo type="string">Have a nice fly, </foo> | ||
<foo type="string">~short</foo> | <foo type="string">~short</foo> | ||
. . . . </syntaxhighlight>when calling ''foo'' you should hear ''"Have a nice fly, <your-callsign> , "'' | . . . . </syntaxhighlight>when calling ''foo'' you should hear ''"Have a nice fly, <your-callsign> , "'' | ||
=== Word Replacement === | === Word Replacement === | ||
If you find that the word ''Wind'' is not pronounced clearly, you can change it by ''Winnded'' or similar to increase its intelligibility.. | If you find that the word ''Wind'' is not pronounced clearly, you can change it by ''Winnded'' or similar to increase its intelligibility.. | ||
Better? Fine, but what about the message on the screen? | Better? Fine, but what about the message on the screen? | ||
Include a tag with the pattern <replace type="string">'''old''':'''new'''</replace> : | Include a tag with the pattern <code><nowiki><replace type="string">'''old''':'''new'''</replace></nowiki></code>: | ||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
. . . . | . . . . | ||
<replace type="string">Winnded:Wind</replace> | <replace type="string">Winnded:Wind</replace> | ||
. . . . </syntaxhighlight | . . . . </syntaxhighlight> | ||
= How control.nas script works = | == How control.nas script works == | ||
[[File:Gca schema1.png|right|This is the general (simplified) scheme of the gca module:<ref>{{cite web |url = https://forum.flightgear.org/viewtopic.php?p=319409#p319409 |title = <nowiki> Re: Spoken GCA </nowiki> |author = <nowiki> rleibner </nowiki> |date = Sep 26th, 2017 |added = Sep 26th, 2017 |script_version = 0.40 }}</ref>]] | [[File:Gca schema1.png|right|This is the general (simplified) scheme of the gca module:<ref>{{cite web |url = https://forum.flightgear.org/viewtopic.php?p=319409#p319409 |title = <nowiki> Re: Spoken GCA </nowiki> |author = <nowiki> rleibner </nowiki> |date = Sep 26th, 2017 |added = Sep 26th, 2017 |script_version = 0.40 }}</ref>]] | ||
The | The <code>gca.Control()</code> function instances an object from <code>gca_class</code> and sets destination values. | ||
That <code>GCAobject</code> contains all the AI to design the approaching path and will check the aircraft's position once per second. Instructions are built and transmitted to the caller. | |||
It also instances an object from | It also instances an object from <code>PARScreen_class</code> to track the aircraft on the PAR screen. | ||
Each second, the script receives an instruction. But it is neither possible nor convenient to pass these instructions to the pilot every second ! | Each second, the script receives an instruction. But it is neither possible nor convenient to pass these instructions to the pilot every second! | ||
So it checks the | |||
So it checks the <code>demo.phrase</code> and <code>demo.maxsecs</code> members. (<code>demo.phrase</code> is not the instruction itself, but the <code>instruction-type</code>. And <code>demo.maxsecs</code> is the maximum elapsed time between consecutive "spoken" instructions.) | |||
If the received <code>demo.phrase</code> is the same as the previous one, the script waits <code><nowiki><</nowiki>''demo.maxsecs<nowiki>></nowiki></code> seconds before instruct the pilot. | |||
But if <code>demo.phrase</code> changes, then the pilot will be instructed immediately. | |||
<big>(To be continued . . . )</big> | |||
== Roadmap == | |||
* In gca_class.nas: add validation of all setters arguments. {{done}} | * In gca_class.nas: add validation of all setters arguments. {{done}} | ||
* Let user to open the UI dialog from the "Set" button" at Par screen. {{progressbar|20}} | * Let user to open the UI dialog from the "Set" button" at Par screen. {{progressbar|20}} | ||
Line 151: | Line 171: | ||
* add [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Nasal/canvas/gui/widgets/CheckBox.nas checkboxes] to the PAR dialog to show/hide optional elements (labels, flight history etc) ? | * add [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Nasal/canvas/gui/widgets/CheckBox.nas checkboxes] to the PAR dialog to show/hide optional elements (labels, flight history etc) ? | ||
= Addon | == Addon version == | ||
now structured our prototype as an Addon and uploaded to the [https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/trunk/Addons/SpokenGCA/ Addons repository] | now structured our prototype as an Addon and uploaded to the [https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/trunk/Addons/SpokenGCA/ Addons repository] | ||
= Testing = | == Testing == | ||
For testing/debugging I'm using a challenging situation:<ref>{{cite web | For testing/debugging I'm using a challenging situation:<ref>{{cite web | ||
|url = https://forum.flightgear.org/viewtopic.php?p=319553#p319553 | |url = https://forum.flightgear.org/viewtopic.php?p=319553#p319553 | ||
Line 186: | Line 206: | ||
Try editing "Final Approach" and "Glide Slope" values (use the "Apply" button). | Try editing "Final Approach" and "Glide Slope" values (use the "Apply" button). | ||
= References = | == References == | ||
{{Appendix}} | {{Appendix}} | ||
== Related content == | |||
=== Wiki articles === | |||
* [[Spoken ATC]] | |||
* [[Howto:Implementing a simple GCA system]] | |||
[[Category:Air Traffic Control]] |