ATC Tower Simulator


The purpose of this ATC & Tower simulator is to provide real-time air traffic control training for multiple airports to several trainees simultaneously. The project has been carried out by WM Simulator co., ltd. located in Bangkok Thailand. VirtualSim has supported the team effort with on-site consulting.

The main requested features are as follow:

  • 3D tower view of the airport area in 360°
  • High fidelity 3D models for aircraft, helicopter and vehicles
  • Day and night visual operations combined with different weather conditions
  • Multiple airports with runways, taxiways, parking gates, utility vehicles, etc.
  • One Instructor station to prepare offline scenarios stored into SQL database
  • Record & Replay of the full system with pause, rewind, forward and fly-out.
  • Faster than real-time simulation
  • ARINC 424 support for flight plans definition and map display
  • Up to 6 ATC radar view stations including flight strip boards
  • Up to 6 pilot stations to translate radio communication to aircraft controls
  • 2D display of the airport, flight-plan and surrounding
  • Automatic push-back, taxi, follow-me and parking
  • ILS capture and landing
  • Collision detection and ground avoidance
  • Formation flight for up to 4 aircraft with special maneuvers for landing
  • VFR approaches, Touch & Go and Go Around capabilities
  • Failures (gears, engine…) and landing/take-off accident support
  • Ground and Service vehicle controls (fire & fuel truck, baggage cart, ambulance…)
  • Up to 100 simultaneous aircraft
  • 6 months for delivery
WM-SIM ATC trainer using vsTASKER


vsTASKER has been selected to produce the simulation hub, named flight server. The distributed architecture around the flight server allowed serialization of the development workload imposed by the tight schedule. It also insures the scalability of the system as more stations can be added very easily.

  • Main code simulation engine produced by vsTASKER
  • Qt + vsTASKER backbone and 2D maps for all stations
  • VegaPrime to handle the 3D view on multiple channels and screens
Example of push-back and take-off


The Flight Server (FS) acts as the central hub which sends/receives data and events to/from all others work stations. All the network traffic is recorded for later replay. As the simulation engine generated by vsTASKER is license free, the cost for a large number of running instances remains the same, mostly when embedded into a Qt visual interface.

A second network is used for the voice communication between ATC operator and Pseudo Pilots. This network has its own recording capability. It has been provided by Calytrix Technologies.

vsTASKER GUI is used to define all the logic and components shared among the various stations. Four databases are created, one for the FS, one for ATC Radar Views, one for the Pseudo Pilots and one for the Scenario Preparation. Each database holds as many scenarios as supported airports. Aircraft models are defined in the Catalog and are instantiated at runtime.

During a training session, any station sends messages to the Flight Server (FS) to control various aircraft or initiate specific operations. The FS processes every command and return acknowledge to the sender.

The following computers and stations are used for particular purposes:

  • Flight Server: simulates all aircraft in real-time and listen to all stations
  • ATC Radar View: displays all aircraft broadcasted by the Flight Server
  • Pseudo Pilot: operator acting like a pilot regarding the ATC trainee
  • 3D Engine: Used to display the tower view in 360°
  • Instructor Station: Select scenarios, set weather conditions and add runtime aircraft or incidents (birds on runways, strong wind, etc.)
  • Data Preparation: prepares scenarios with air traffic

All stations are connected to the broadcast network, listening from messages sent by the Flight Server at 2 Hz frequency for aircraft positions and every 5 seconds for some low band entity status. The Flight Server runs at 30 Hz and controls the 3D visual using CIGI protocol at a dynamic frequency (high for visible entities, low for out of sight ones).

The Flight Server (FS) is the core simulation engine which handles all aircraft, airports, logic and ATC components. It is responsible for the ground and air movement of all vehicles. It uses embedded dynamic models which are fast enough to support 30hz base frequency with hundreds of entities.

Each scenario has a Player which accesses the SQL database to create inbound and outbound tracks and flight plans according to the data preparation settings.

The Prepare logic processes the SQL scenario data (see below) and the CIGI initiates VegaPrime with 3D terrain and weather settings.

The FS uses a unique Catalog of all aircraft shared by all scenarios. Each aircraft has been designed to represent a specific model. It holds the 3D OpenFlight model, the associated flight dynamics, some bespoke components required by the simulator and a flight management system for automatic landing and flight plans following.

The above screen shot shows a portion of the list of available aircraft and helicopters. The FS can instantiate hundreds of these Catalog’s entities and position them anywhere on the airport ground or controlled airspace.

Each entity refers to some logic and components which are shared by all. Only parameters differ and are defined by the user to specialize the model. Aircraft share same behavior. Each vehicle has its own logic according to its type. See below picture.

Main Components

Each aircraft embed the following components:

  • FlightManager: handles the ILS, VFR and plan following
  • MotionTaxiWay: maneuvers aircraft along taxiways
  • MotionGoto: moves an aircraft or vehicle towards a specific point
  • LandDyn_High: high fidelity dynamic component for grounded vehicles
  • WingDyn_High: high fidelity dynamic component for aircraft
  • HeloDyn_High: high fidelity dynamic component for helicopters
  • CigiEntity: formatted data sent to the IG for entity display
  • CigiLandingGear: formatted data to visually control the aircraft landing gears
  • LandingGears: handles the landing gears motions and failures
  • PtfBody: stores the dimensions and characteristic of an aircraft or ground vehicle
  • PtfStatus: stores the current status of the aircraft or ground vehicle
  • AcInfoData: custom data sent to all stations for each aircraft
  • Export: updates each aircraft and vehicle on the GUI map
Main Behavior

Each aircraft shares the same behavior (logic set). Inputs are provided by Pseudo Pilot stations which controls aircraft outside their flight plans or automatic procedures (taxi, take-off, approach and landing). All logic are independent at runtime. Let’s see how each of them are defined:

For some specific sub logic, like pushback request, a specific group is defined. The aircraft requests a pushback and the first available tug responds, if within a certain distance and available. According to the position, size and type of the aircraft, the tug decides about pushing or dragging the plane backward. After the procedure, the aircraft can automatically taxi towards the runway or follow a follow-me car.

Although most of the logic are triggered by messages coming from Pseudo Pilot stations, some are triggered by specific conditions (ground entities, collision detection, failure systems, internal status, etc.) The A_C logic gathers all these equipment and controllers which may enable or disable some logics. For example, each aircraft has two separate dynamic models: one when grounded, using wheels and another one when airborne, using wings. A specific controller is responsible for the switch between the two, at take off and landing and the synchronization of the data to avoid visual jerks at swap time.


This ATC trainer supports military formation patterns. Fighters must be able to taxi in line, perform rollout takeoff and join in diamond shape. They also can join in flight from any position. Only the leader responds to the ground controller. Approach and landing obeys to specific maneuvers (speed, altitude, path) then formation breaks before sequencing land, taxi and park.

Example of the AutoLand Task code…
  if (phase == 1) {  // go perpendicular, left or right
     printf("%s perpendicular left\n", E:getName());
     E:setAltitude(entry_pt.alt, _m);
     phase = 2;
  if (phase == 2) { // wait 1 minute
     float b = R2D(E:getDyn()->getBearingTo(entry_pt));
     if ((chrono.greater("timer", 60) || E:getDyn()->headingOk()) &&
         fabs(b) > 80)
     {  // go downwind
        printf("%s going downwind\n", E:getName());
        logk()->sFact("startSepar", 5);
        phase = 3;
  if (phase == 3) { // wait until correct distance
     float d = E:pos.distanceTo2D(entry_pt);
     if (d < convert(1, _mi, _m)) {
        E:setSpeed(150, _kt);
        E:setAltitude(800, _ft);
     if (d < 200) {  // start base approach
        printf("%s base approach\n", E:getName());
        E:setAltitude(700, _ft);
        phase = 4;
  if (phase == 4) { // engage ILS approach for final
     if (ent()->getDyn()->headingOk(10, _deg)) {
        char* airport = S:getName();
        printf("%s starting VRF Landing\n", E:getName());
        FlightManager* fms = E:findFlightManager();
        fms->engageILScapture(true, rwy->ident, airport, "VT");
        L:sFact("stopSepar", 5);
        return DONE;

Formation landing

ATC Radar View

These dedicated stations are used for the training of controller students. There can be several of them to manage dedicated area, airspace or ground traffic. Trainees are monitoring the real-time traffic simulated by the flight server, can question each aircraft, reorder their progress strips and use the radio to give orders to pilots. On another rooms, pseudo pilots listen to controller commands and controls aircraft accordingly.

The Radar display is generated using a free Qt SimpleUI example provided with vsTASKER software. As the Qt code and UI are supplied, user can modify and customize it according to its need. The map display is embedded. The sample uses the vsTASKER libraries and specific code generated data. Both Qt and vsTASKER libraries are linked together to produce the license free deployable application.

The Radar application uses its own vsTASKER database with logics to process HMI actions and network access (aircraft messages from Flight Server and other stations).

Pseudo Pilot

Several stations are used by operators to simulate pilot. Operators respond to ATC requests by using the user interface to control specific aircraft. Operator use radio device and listen to the ATC air and ground channels. He can take control of any available aircraft and acquire it. Other operators see owned aircraft as unavailable. Operator control owned aircraft for the duration of the exercise.

Pseudo Pilot Interface example of use

The Pseudo Pilot is also responsible for controlling ground vehicles. He may send bag carts to some designated aircraft, send ambulance and fire-trucks to damaged aircraft. Tugs and follow-me cars are automatically handled by the Flight Server if required by specific procedures. Below are some of its main features:

  • Aircraft selection, acquire and release ownership
  • Command to taxi to a specified location, alone or with follow-me car
  • Command to align on a runway before stop or rollout take-off
  • Authorization to initiate or abort take-off (before V1)
  • Set or change of a flight plan
  • Command to follow a specified SID or STAR procedure
  • Activate ILS landing, VFR approach and landing
  • Set or change the Squawk code
  • Control flight parameters (heading, speed, altitude and climb/descent)
  • Control holding procedure (immediate or planned)
  • Manually retract or extend landing gears
  • Management of formation (members join or leave, leader control, landing)
  • Activate or deactivate failures

The Pseudo Pilot has been developed with Qt and vsTASKER

The Pseudo Pilot is a combination of Qt and vsTASKER. The Map display (on the right) is generated using the vsTASKER HMI toolkit. Buttons (top), reactions, logics, network connection (…) are defined in vsTASKER and code generated. The left inside panel is designed under Qt. It uses the vsTASKER libraries and specific code generated data. Both Qt and vsTASKER libraries are linked together to produce the license free control station.

Flight Plan Editor

The flight plan editor is a Qt and vsTASKER application designed to prepare scenario and exercise. The operator works offline and populate the airport and the airspace with entities. Aircraft and helicopter can be put on ground, on any parking gates or in air, at a designated Waypoint or Navaid and with or without a flight plan. Each aircraft has a beginning and ending time, to sequence a traffic during the course of the exercise, without manual interaction.

  • Outgoing aircraft may have a departure time and a flight plan including a SID.
  • Incoming aircraft may have a flight plan including a STAR
  • All defined scenarios are stored into an SQL database

Training System

The training center occupies two rooms. One which simulate the ATC center with a 360° fix tower view. Thirty monitors are used and mounted side by side around a circle (see below picture). VegaPrime (from Presagis) is used for the 3D view. It is controlled by the Flight Server using CIGI protocol. The instructor station, data preparation console and all traffic radar panels are located here.

The second room is occupied with the Pseudo Pilot stations. All pilots are using a radio communication system and the graphic panel to follow instructions from the ATC and behave like real pilots. Each of them can control several aircraft.

During runtime, a scenario can be paused and resumed by the instructor. Faster than real-time allows fast forward. Any previous sessions can be replayed on all stations (including 3D view), at various speeds.