FG1000: Difference between revisions

2,450 bytes added ,  26 August 2020
(Wiki links + source templates)
(16 intermediate revisions by 2 users not shown)
Line 13: Line 13:
}}
}}


The FG1000 is a simulation of the Garmin G1000 glass panel flight deck.  The FG1000 was developed in reference to the pilot's manual for the Cessna NAVIII variant, as fitted to the Cessna 182, but is designed to be flexible and also work with other airframes.  For detailed instructions on how to use it, refer to the [https://static.garmin.com/pumac/G1000:CessnaNavIII_PilotsGuide_SystemSoftwareVersion0563.11orlater_.pdf Garmin Pilot's Guide].  Or read the Cheat's guide below.


== Current Status ==
== Current Status (26/08/2020) ==


The following aircraft are available from the official hangar with the FG1000:
Key features:
* Primary Flight Display (PFD).  Fully functional and 99% complete vs. the real thing.  (Alerts, ALT units and alternative HSI displays are the remaining pieces)
* Multi Function Display (MFD).  Fully functional and 90% complete vs. the real thing.  Includes moving map, navigation features, flightplan, traffic, engine information. .
* MFD and PFD can be displayed
** as part of an aircraft cockpit
** as a window within FlightGear
** on a separate window or monitor using [[FGQCanvas]]. 
* GFC700 autopilot.  Fully functional and integrated with the route manager, PFD and MFD.  Includes all modes apart from VNV (vertical navigation to follow a flightplan) and BC (ILS back-course).
 
The following aircraft are available from the official hangar and use the FG1000:
* [[Cessna 182S|Cessna 182T]] (c182t)
* [[Cessna 182S|Cessna 182T]] (c182t)
* [[Diamond DA40]] (da40)
* [[Diamond DA40]] (da40)
 
* [[Piper J3 Cub]] (j3cub)
21/02/2019:
* PFD is largely complete. NRST, ALT units and alternative units still to implement.
* MFD is functional, and now includes display and editing of the current flightplan, along with moving map, engine information.
* MFD and PFD can be displayed as a GUI window under Debug menu or added to an aircraft with the GDU-1045 model as part of a 3D cockpit.
* GFC700 autopilot is integrated and includes all modes apart from VNV (vertical navigation to follow a flightplan) and BC (ILS back-course).
* A reference implementation is available for the Cessna 182T https://github.com/HHS81/c182s/tree/C182T
 
There's still a number of pages to write, and the more complex pages around route planning will likely be particularly challenging, but it should be far faster now these blocks are in place.  See the Design Notes for details.


Next steps:
Next steps:
Line 52: Line 54:
* Use the RANGE knob to zoom map views in/out.
* Use the RANGE knob to zoom map views in/out.


===MFD===
===PFD===
* Artificial horizon, compass rose, altimeter and airspeed indicator are all hopefully obvious!
* Artificial horizon, compass rose, altimeter and airspeed indicator are all hopefully obvious!
* HSI can display NAV1, NAV2, GPS information (press the CDI softkey)
* HSI can display NAV1, NAV2, GPS information (press the CDI softkey)
Line 61: Line 63:
* DirectTo GPS (press DTO)
* DirectTo GPS (press DTO)
* Transponder (press XPDR)
* Transponder (press XPDR)
* NRST scrolls through information on the 10 nearest airports (press NRST)


===MFD===
===MFD===
Line 118: Line 121:
== Aircraft Installation ==
== Aircraft Installation ==


Adding the FG1000 to an aircraft is intended to be fairly straightforward.
Adding the FG1000 to an aircraft is intended to be fairly straightforward, but there is a little complexity due to properties that different aircraft use, and the Engine Information System (EIS) needing to be different for different powerplants.  The J3Cub is a good example to use to see how the FG1000 integration can be done (the c182t isn't a good example as it uses the default FG1000 implementation).


=== Add the GDU to the cockpit ===
=== Add the GDU to the cockpit ===
Line 167: Line 170:


You may want to create your own version depending on what properties you are
You may want to create your own version depending on what properties you are
using for the NAV/COM, and your engine configuration.
using for the NAV/COM, and your engine configuration. In which case you should
copy /Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas
into your aircraft Nasal directory, edit it to load any updated interfaces and
load it instead:
 
<syntaxhighlight lang="nasal">
var aircraft_dir = getprop("/sim/aircraft-dir");
io.load_nasal(aircraft_dir ~ '/Nasal/GenericInterfaceController.nas', "fg1000");
 
var interfaceController = fg1000.GenericInterfaceController.getOrCreateInstance();
interfaceController.start();
</syntaxhighlight>


Note that you should only start the interface after you've started the FG1000
Note that you should only start the interface after you've started the FG1000
Line 174: Line 188:
=== Create an EIS Display ===
=== Create an EIS Display ===


This is the Engine Information System and displays on the left side of the MFD.
This is the Engine Information System and displays on the left side of the MFD.


A simply EIS for the Cessna 182T is provided.  For other aircraft you will need to create your own.  The simplest way to do this is  
A simply EIS for the Cessna 182T is provided.  For other aircraft you will need to create your own.  The simplest way to do this is  
Line 182: Line 196:
# Edit the SVG and EIS-[aircraft].nas as appropriate.  In particular note that the Fuel submenu is used to set the contents of the fuel tanks manually, with a fuel totalizer approach.
# Edit the SVG and EIS-[aircraft].nas as appropriate.  In particular note that the Fuel submenu is used to set the contents of the fuel tanks manually, with a fuel totalizer approach.
# Copy Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericEISPublisher.nas into your Nasal directory, and rename it (e.g. [aircraft]EISPublisher.nas.  Don't forget to rename the class itself! Modify it to publish the correct set of properties to Emesary.  Note that for multiple engine aircraft you need to modify the publish() method.
# Copy Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericEISPublisher.nas into your Nasal directory, and rename it (e.g. [aircraft]EISPublisher.nas.  Don't forget to rename the class itself! Modify it to publish the correct set of properties to Emesary.  Note that for multiple engine aircraft you need to modify the publish() method.
# Copy Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas into your Nasal directory, and rename it (e.g. [aircraft]InterfaceController.nas).  Modify it to refer to your new [aircraft]EISPublisher.
# As noted above, you will need to load a modified version of GenericInterfaceController.nas
# Finally, modify whatever Nasal you use to load the FG1000 to pass in the new EIS class and SVG file.  Note that you need to load the EIS Controller, style and Options classes as well.
# Finally, modify whatever Nasal you use to load the FG1000 to pass in the new EIS class and SVG file.  Note that you need to load the EIS Controller, style and Options classes as well.


Line 188: Line 202:


<syntaxhighlight lang="nasal">
<syntaxhighlight lang="nasal">
# Load custom Interface controller, which will refer to the EISPublisher.
 
io.load_nasal('AircraftInterfaceController.nas');
# Load a customer Interface controller
var interfaceController = AircraftInterfaceController.getOrCreateInstance();
var aircraft_dir = getprop("/sim/aircraft-dir");
io.load_nasal(aircraft_dir ~ '/Nasal/GenericInterfaceController.nas', "fg1000");
 
var interfaceController = fg1000.GenericInterfaceController.getOrCreateInstance();
interfaceController.start();
interfaceController.start();


# Load the custom EIS display
io.load_nasal(aircraft_dir ~ '/Nasal/EIS/EIS-J3Cub.nas', "fg1000");
io.load_nasal('EIS.nas', "eis");
io.load_nasal(aircraft_dir ~ '/Nasal/EIS/EISController.nas', "fg1000");
io.load_nasal('EISController.nas', "eis");
io.load_nasal(aircraft_dir ~ '/Nasal/EIS/EISStyles.nas', "fg1000");
io.load_nasal('EISStyles.nas', "eis");
io.load_nasal(aircraft_dir ~ '/Nasal/EIS/EISOptions.nas', "fg1000");
io.load_nasal('EISOptions.nas', "eis");
 
var EIS_Class = eis.EIS;
# This is the class in EIS-J3Cub.nas, loaded above.
var EIS_Class = fg1000.EISJ3Cub;
 
# Create the FG1000 using custom EIS Class, and the appropriate .svg file.
var fg1000system = fg1000.FG1000.getOrCreateInstance(EIS_Class:EIS_Class, EIS_SVG: "Nasal/EIS/EIS-J3Cub.svg");
</syntaxhighlight>
 
=== Using custom SVG files ===


# Create the FG1000 using custom EIS
To assist in implementing related glass cockpits (e.g. Garmin Perspective on the Cirrus SR22T), you can specify a directory to be used instead of /Aircraft/Instruments-3d/FG1000/MFDPages/ for the SVG files used by the MFD.  Note that you must copy across all the .svg files.
var fg1000system = fg1000.FG1000.getOrCreateInstance(EIS_Class:EIS_Class, EIS_SVG:"Nasal/EIS.svg);
 
<syntaxhighlight lang="nasal">
# Create the FG1000 using custom EIS Class, and the appropriate .svg file, and a custom path to other SVG files
var fg1000system = fg1000.FG1000.getOrCreateInstance(EIS_Class:EIS_Class, EIS_SVG: "Nasal/EIS/EIS-J3Cub.svg", SVG_Path: "MFDPages/");
</syntaxhighlight>
</syntaxhighlight>


=== Add multikey support ===
=== Add multikey support ===
Line 536: Line 565:
{| class="wikitable"
{| class="wikitable"
|-
|-
! Layer !! [[Canvas MapStructure Layers|MapStructure Layer]] !! Status !! Page in <ref name="Pilot's Guide" /> || Notes
! Layer !! [[Canvas MapStructure Layers|MapStructure Layer]] !! Type !! Status !! Page in <ref name="Pilot's Guide" /> || Notes
|-
|-
| Flight Plan Route Lines || {{MapStructure_File|name=RTE|type=lcontroller}} || Requires styling || 190 ||
| Flight Plan Route Lines || {{MapStructure_File|name=RTE|type=lcontroller}} || offline || Requires styling || 190 ||
|-
|-
| Flight Plan Route Waypoints || {{MapStructure_File|name=WPT|type=lcontroller}} || Requires styling || 190 ||  
| Flight Plan Route Waypoints || {{MapStructure_File|name=WPT|type=lcontroller}} || offline || Requires styling || 190 ||  
|-
|-
| Rivers/Lakes || {{MapStructure_File|name=VFRChart|type=lcontroller}}   ||  || 148 || Currently using downloaded raster from web.  Perhaps generate similarly to Atlas<ref>{{cite web
| Rivers/Lakes || {{MapStructure_File|name=VFRChart|type=lcontroller}} || online  ||  || 148 || Currently using downloaded raster from web.  Perhaps generate similarly to Atlas<ref>{{cite web
   |url    =  https://forum.flightgear.org/viewtopic.php?p=203495#p203495  
   |url    =  https://forum.flightgear.org/viewtopic.php?p=203495#p203495  
   |title  =  <nowiki> Re: Atlas still in use ? </nowiki>  
   |title  =  <nowiki> Re: Atlas still in use ? </nowiki>  
Line 551: Line 580:
   }}</ref>, or could be vector data from scenery. {{AtlasVsCanvasCameras}}
   }}</ref>, or could be vector data from scenery. {{AtlasVsCanvasCameras}}
|-
|-
| Topography Data || {{MapStructure_File|name=VFRChart|type=lcontroller}} || Synthetic  || 145 || Height-map at chart-resolution.  Perhaps generate similarly to Atlas? {{AtlasVsCanvasCameras}}
| Topography Data || {{MapStructure_File|name=VFRChart|type=lcontroller}}|| online || Synthetic  || 145 || Height-map at chart-resolution.  Perhaps generate similarly to Atlas? {{AtlasVsCanvasCameras}}
|-
|-
| International Borders ||  ||  || 148 || Vector data from scenery?
| International Borders ||  || ||  || 148 || Vector data from scenery?
|-
|-
| Track Vector ||  ||  || 156 || Forward looking display of track. Look-ahead time selectable.  
| Track Vector ||  || ||  || 156 || Forward looking display of track. Look-ahead time selectable.  
|-
|-
| Navigation Range Ring ||  ||  || 159 || Straightforward extension of {{MapStructure_File|name=APS|type=lcontroller}}.
| Navigation Range Ring ||  || offline||  || 159 || Straightforward extension of {{MapStructure_File|name=APS|type=lcontroller}}.
|-
|-
| Fuel Range Ring ||  ||  || 159 || Straightforward extension of {{MapStructure_File|name=APS|type=lcontroller}}.
| Fuel Range Ring || || offline   ||  || 159 || Straightforward extension of {{MapStructure_File|name=APS|type=lcontroller}}.
|-
|-
| Terrain Data ||  ||  || 364 || Should be straightforward, with exception of obstacles.  [[Spoken GCA|Profile view]] also required.
| Terrain Data ||  || - ||  || 364 || Should be straightforward, with exception of obstacles.  [[Spoken GCA|Profile view]] also required.
|-
|-
| Traffic || {{MapStructure_File|name=TFC|type=lcontroller}} ||  || 394, 423 || Various options, each with different iconography and data displayed.  
| Traffic || {{MapStructure_File|name=TFC|type=lcontroller}} || offline||  || 394, 423 || Various options, each with different iconography and data displayed.  
|-
|-
| Airways || {{MapStructure_File|name=VFRChart|type=lcontroller}} ||  ||  154 || Needs to be replaced with vector data
| Airways || {{MapStructure_File|name=VFRChart|type=lcontroller}} || online||  ||  154 || Needs to be replaced with vector data
|-
|-
| NEXRAD ||  ||  || 282 || Heaps of weather data with complex symbology.
| NEXRAD || || unknown   ||  || 282 || Heaps of weather data with complex symbology.
|-
|-
| XM Lightning Data || {{MapStructure_File|name=WXR|type=lcontroller}} || Change to symbol for lightning? || 294 || Optional   
| XM Lightning Data || {{MapStructure_File|name=WXR|type=lcontroller}} || offline|| Change to symbol for lightning? || 294 || Optional   
|-
|-
| Airports || {{MapStructure_File|name=APT|type=lcontroller}}, {{MapStructure_File|name=RWY|type=lcontroller}} || Require re-style based on size  ||  149, 163 ||
| Airports || {{MapStructure_File|name=APT|type=lcontroller}}, {{MapStructure_File|name=RWY|type=lcontroller}} || offline|| Require re-style based on size  ||  149, 163 ||
|-
|-
| Runway Labels || {{MapStructure_File|name=RWY|type=lcontroller}} ||  || 148 || Needs to be added to {{MapStructure_File|name=RWY|type=symbol}}.  Should be straightforward
| Runway Labels || {{MapStructure_File|name=RWY|type=lcontroller}} || offline||  || 148 || Needs to be added to {{MapStructure_File|name=RWY|type=symbol}}.  Should be straightforward
|-
|-
| Restricted ||  {{MapStructure_File|name=OpenAIP|type=lcontroller}}  ||  ||  182 || {{NeedVectorData}}
| Restricted ||  {{MapStructure_File|name=OpenAIP|type=lcontroller}}  || online ||  ||  182 || {{NeedVectorData}}
|-
|-
| MOA (Military) ||  {{MapStructure_File|name=OpenAIP|type=lcontroller}} ||  ||  182 || {{NeedVectorData}}
| MOA (Military) ||  {{MapStructure_File|name=OpenAIP|type=lcontroller}} || online ||  ||  182 || {{NeedVectorData}}
|-
|-
| User Waypoints ||  ||  ||   
| User Waypoints || || offline   ||  ||   
|-
|-
| Latitude/Longitude Grid || {{MapStructure_File|name=GRID|type=lcontroller}} ||  ||   
| Latitude/Longitude Grid || {{MapStructure_File|name=GRID|type=lcontroller}} || offline||  ||   
|-
|-
| NAVAIDs || {{MapStructure_File|name=APT|type=lcontroller}}, {{MapStructure_File|name=VOR|type=lcontroller}}, {{MapStructure_File|name=FIX|type=lcontroller}}, {{MapStructure_File|name=NDB|type=lcontroller}} || APT, requires styling  ||  162 ||  
| NAVAIDs || {{MapStructure_File|name=APT|type=lcontroller}}, {{MapStructure_File|name=VOR|type=lcontroller}}, {{MapStructure_File|name=FIX|type=lcontroller}}, {{MapStructure_File|name=NDB|type=lcontroller}} || offline|| APT, requires styling  ||  162 ||  
|-
|-
| Class B Airspaces/TMA || {{MapStructure_File|name=OpenAIP|type=lcontroller}}  ||  || 182 || {{NeedVectorData}}
| Class B Airspaces/TMA || {{MapStructure_File|name=OpenAIP|type=lcontroller}}  || online ||  || 182 || {{NeedVectorData}}
|-
|-
| Class C Airspaces/TCA || {{MapStructure_File|name=OpenAIP|type=lcontroller}} ||  ||  182 || {{NeedVectorData}}
| Class C Airspaces/TCA || {{MapStructure_File|name=OpenAIP|type=lcontroller}} || online||  ||  182 || {{NeedVectorData}}
|-
|-
| Class D Airspaces || {{MapStructure_File|name=OpenAIP|type=lcontroller}}  ||  ||  182 || {{NeedVectorData}}
| Class D Airspaces || {{MapStructure_File|name=OpenAIP|type=lcontroller}}  || online||  ||  182 || {{NeedVectorData}}
|-
|-
| Other Airspaces/ADIZ || {{MapStructure_File|name=OpenAIP|type=lcontroller}}  ||  ||  182 || {{NeedVectorData}}
| Other Airspaces/ADIZ || {{MapStructure_File|name=OpenAIP|type=lcontroller}}  || online||  ||  182 || {{NeedVectorData}}
|-
|-
| TFRs ||  ||  || 310 ||  
| TFRs || || unknown   ||  || 310 ||  
|-
|-
| Obstacles || {{MapStructure_File|name=OpenAIP|type=lcontroller}}  ||  ||  182 || {{NeedVectorData}}
| Obstacles || {{MapStructure_File|name=OpenAIP|type=lcontroller}}  || online||  ||  182 || {{NeedVectorData}}
|-
|-
| Land/Country Text ||  ||  || 148 || Currently using raster data from web. Replace with {{MapStructure_File|name=POI|type=lcontroller}}?  
| Land/Country Text || || online   ||  || 148 || Currently using raster data from web. Replace with {{MapStructure_File|name=POI|type=lcontroller}}?  
|-
|-
| Cities  || {{MapStructure_File|name=VFRChart|type=lcontroller}} ||  ||  148 || Currently using raster data from web.  Perhaps generate similarly to Atlas, or could be vector data from scenery. {{AtlasVsCanvasCameras}}
| Cities  || {{MapStructure_File|name=VFRChart|type=lcontroller}}|| online ||  ||  148 || Currently using raster data from web.  Perhaps generate similarly to Atlas, or could be vector data from scenery. {{AtlasVsCanvasCameras}} [https://forum.flightgear.org/viewtopic.php?f=31&t=37158&p=364650&#p364643]
|-
|-
| Roads || {{MapStructure_File|name=VFRChart|type=lcontroller}} ||  ||  148 || Currently using raster data from web.  Requires vector data from scenery
| Roads || {{MapStructure_File|name=VFRChart|type=lcontroller}} || online ||  ||  148 || Currently using raster data from web.  Requires vector data from scenery
|-
|-
| Railroads || {{MapStructure_File|name=VFRChart|type=lcontroller}} ||  ||  148 || Currently using raster data from web.  Requires vector data from scenery
| Railroads || {{MapStructure_File|name=VFRChart|type=lcontroller}} || online ||  ||  148 || Currently using raster data from web.  Requires vector data from scenery
|-
|-
| State/Province Boundaries || {{MapStructure_File|name=VFRChart|type=lcontroller}}  ||  ||  148 || Currently using raster data from web.  Requires vector data from scenery
| State/Province Boundaries || {{MapStructure_File|name=VFRChart|type=lcontroller}}  || online||  ||  148 || Currently using raster data from web.  Requires vector data from scenery
|-
|-
| River/Lake Names || {{MapStructure_File|name=VFRChart|type=lcontroller}} ||  ||  148 || Currently using raster data from web.  Replace with {{MapStructure_File|name=POI|type=lcontroller}}?
| River/Lake Names || {{MapStructure_File|name=VFRChart|type=lcontroller}} || online ||  ||  148 || Currently using raster data from web.  Replace with {{MapStructure_File|name=POI|type=lcontroller}}?
|-
|-
| Selected Altitude Intercept Arc ||  ||  ||  161 || Simple extention to APS
| Selected Altitude Intercept Arc |||| offline   ||  ||  161 || Simple extention to APS
|-
|-
| SafeTaxi (Optional) || {{MapStructure_File|name=RWY|type=lcontroller}}, {{MapStructure_File|name=TAXI|type=lcontroller}} ||  || 493  || We don't currently have the data to display taxiway identifier or holding points
| SafeTaxi (Optional) || {{MapStructure_File|name=RWY|type=lcontroller}}, {{MapStructure_File|name=TAXI|type=lcontroller}} || offline||  || 493  || We don't currently have the data to display taxiway identifier or holding points
|-
|-
| ChartView (Optional) || ||  || 503  || [[Canvas_Sandbox#CanvasPDF|Rendering of PDFs.]]  Might be possible to integrate with NaviGraph chart data?
| ChartView (Optional) || || offline||  || 503  || [[Canvas_Sandbox#CanvasPDF|Rendering of PDFs.]]  Might be possible to integrate with NaviGraph chart data?
|-
|-
| FliteChart (Optional) || ||  || 521  || [[Canvas_Sandbox#CanvasPDF|Rendering of PDFs.]]  Might be possible to integrate with NaviGraph chart data?
| FliteChart (Optional) || || offline||  || 521  || [[Canvas_Sandbox#CanvasPDF|Rendering of PDFs.]]  Might be possible to integrate with NaviGraph chart data?
|}
|}