Dual control

From FlightGear wiki
(Redirected from Dual Control)
Jump to: navigation, search
Caution  Developer information:

Some, and possibly most, of the details below are likely to be affected, or even deprecated, by the ongoing work on implementing and improving HLA support in FlightGear. For recent updates, please refer to HLA Timeline.
Please see: High-Level Architecture for further information
To avoid conflicting efforts, you are advised not to start working on anything directly related to this without first coordinating your ideas with FlightGear core developers using the FlightGear developers mailing list. talk page..


Dual Control is a system for FlightGear that adds basic support for shared control of an aircraft over the FlightGear multiplayer network.

Note: FlightGear 1.9.0 or later is needed to use Dual Control.


Currently there are a small number of aircraft with dual control support:

  • Airbus A320 Family, pilot and co-pilot (A3xx-xx1, A320-copilot). Available from Gitorious project page. Be sure to rename the aircraft directory to "A320-family" after checking out/downloading.
  • Airbus A340-600, pilot and co-pilot (A340-600, A346-copilot). Available in FlightGear 2.0 or later, Latest beta versions available on the forum.
  • Blackburn Buccaneer, pilot and systems officer (buccaneer, buccaneer-obs). Available in FlightGear 1.9.0 or later.
  • Boeing 747-400, pilot flying and pilot monitoring (747-400, 747-400-fo). Available in FlightGear/Git.
  • c172p Skyhawk, pilot and copilot (c172p-pilot and c172p-copilot). Based on David Megginson's c172p single control aircraft. Available from the dual-control aircraft hangar. The tar.gz archive for the aircraft should be extracted in $FG_ROOT/Aircraft/.
  • Bombardier CRJ700 (all variants), pilot and first officer (CRJ700, et al and CRJ700-firstofficer). Copilot can control aircraft using joystick and keyboard shortcuts but not toggle any switches. Available in FlightGear 2.0.0 or later.
  • Dornier Do X, phenomenal experience, pilot and radio operator working on interactive dual coordination for navigation. Available from The Lake of Constance
  • fr/Douglas DC-3-C47, pilot and copilot can control aircraft, and passenger 1 to 4 (dc-3, dc-3-copilot, dc-3-psg1, dc-3-psg2, dc-3-psg3, dc-3-psg4). Available in GIT.
  • Embraer E-jets Family, pilot and co-pilot (Embraer-17X, Embraer-17X-Copilot), Avaliable from http://theomegahangar.flymerlion.org
  • Grumman F-14 Tomcat, pilot and RIO (f-14b, f-14b-bs). Available in FlightGear 2.0.0 or later.
  • Hughes OH-6 Cayuse, pilot and co-pilot (OH-6, OH-6-cp). Available on the wiki page.
  • Schleicher ASK-13 glider, pilot and passenger (ask13, ask13-passenger). Available in FlightGear/Git.
  • Submarine Scout, pilot and observer (Submarine_Scout, Submarine_Scout-observer). Available in FlightGear 1.9.0 or later.
  • Fieseler Fi 156 Storch, pilot and passenger (Fi-156-de, Fi-156-passenger). Available in FlightGear 2.0.0 or later.
  • Zeppelin NT, pilot and copilot (ZLT-NT, ZLT-NT-copilot). Available in FlightGear 1.9.0 or later.

To connect the pilot and copilot selects each other in the Copilot dialog (FlightGear 2.0.0 or later) or set properties as explained in the usage instructions below.

Dual control enables a pilot and copilot to jointly fly the aircraft over the FlightGear multiplayer network. Depending on the aircraft the pilot and copilot have shared control over primary flight controls, throttle, mixture and so on. Exactly which controls are shared varies between the aircraft but usually include elevator trim, flaps, brakes, cockpit switches, the radio stack and some instrument settings. The copilot usually has a subset of the full instrumentation (also depending on the aircraft), usually including airspeed, altimeter, VSI, HSI, turn coordinator, engine RPM and the radio stack. Typically Nav/Comm 1 and the first VOR indicator is best controlled by the pilot, while Nav/Comm 2 and the corresponding VOR indicator is faster for the copilot.


Side-by-side presentation of the Zeppelin NT pilot's (left) and copilot's (right) views.

Usage instruction

The system consists of two "aircraft":

The pilot uses a special variant of the c172p, c172p-pilot. The pilot needs to specify the callsign of the copilot (other copilots will be ignored). For the Zeppelin NT the aircraft names are ZLT-NT and ZLT-NT-copilot, respectively.

In the current version the pilot and copilot can select each other in their Co/Pilot selection dialogs available from the "Zeppelin NT/c172p-dual-control"->"MP-(Co)Pilot" menus.

Alternatively the relevant properties can be set from the command line or via the property browser.

Pilot usage example:

fgfs --aircraft=c172p-pilot --prop:/sim/remote/pilot-callsign="someone" 

The copilot uses a special "aircraft", c172p-copilot, which piggybacks on the designated pilot and captures the local control inputs. A current limitation is that only the cockpit views are jitter free. There is also a noticeable delay between control inputs and effect, since they are passed via the the multiplayer protocol. The severity of this delay depend on round trip time and some other factors - the delay seems significantly longer than the round trip time itself which is due to buffering in the MP protocol receiver. That said, I have flown successfully as copilot in a setup with 100-120ms round trip time between both pilot and server and copilot and server (total delay >500ms). Landing is a bit exciting in that case, however.

Copilot usage example:

fgfs --aircraft=c172p-copilot --prop:/sim/remote/pilot-callsign="anybody"

Note: External views are jitter prone for the copilot.

Developer information

Cquote1.png Normally the only Nasal available will be loaded from the model xml. The -set is effectively a placeholder for an invisible craft as you'll be sitting inside someone else's MP aircraft. The normal -set file isn't loaded at all. All properties need to be transmitted over MP, so if /instrumentation/cdu/serviceable is missing it'll need to be sent. It's a really strange concept that all of the normal stuff isn't where it usually is. It took me a while to figure out this for the F-14 RIO which I think is done in the same way
— Richard (Apr 17th, 2016). Re: Dual control for Boeing 777.
(powered by Instant-Cquotes)
Cquote1.png it's roughly like this.

The nasal modules in f-14b-bs-set.xml are loaded and do the work of connecting the RIO to the pilot's aircraft. However the mp-network cannot be loaded until the model is loaded (can't remember exactly why, but it has to be done this way). So the approach to take is to ensure that you use /sim/multiplay/generic/float or /sim/multiplay/generic/int (0..19 of each) to share the important properties over mp. This is the easiest way. If you look at the F-14 you'll see that a whole heap of animations and gauges are connected to the multiplay properties, because these will work either when flying or as an MP aircraft. If you don't want to change the animations then a nasal module inside the co-pilot to copy the multiplay/generic into the right place will work. See backseat instruments for an example of how this is done.

It gets more difficult if you need to transmit more than the permitted amount of parameters (40). Then you either have to start packing using bits, or use one of the string parameters to share the rest. Using the string parameters (as in the F-14 and the F-15) is quite inefficient and it is something that I'm working on fixing so that we have much better interaction between the front and back seats - but the first thing I'll do is to get the key properties transmitted using ints or floats, and then do the rest probably using the Emesary multiplayer bridge that I'm working on.
— Richard (Apr 17th, 2016). Re: Dual control for Boeing 777.
(powered by Instant-Cquotes)

The main part of the Dual Control system is a set of generic Nasal modules and modified instrument files that form the core of the networked shared control functionality. See the link below for some more information.

External links