VEMMIS Data - ilabs-kdc/bluesky Wiki

Within the iLabs version of BlueSky, it is possible to load VEMMIS data (radar data from the LVNL) into BlueSky. In the first section it is explained how to load VEMMIS data into BlueSky. The reading, processing and initializing of the VEMMIS data is done within the python file tools/vemmisread.py, which contains two classes. The first class (VEMMISRead) is used to read and process the data, which is explained in the second section. The second class (VEMMISSource) is used to initialize the scenario, which is explained in the third section.

Using VEMMIS data

The VEMMIS data contains of 6 csv files:

  • Commands: Commands issued by the air traffic controller
  • Flights: Flight information (e.g. callsign, aircraft type, ... etc.)
  • Flighttimes: Trajectory information (e.g. TMA entry, waypoints, ... etc.)
  • Landings: Information for inbound flights (e.g. runway, stack/arrival, ... etc.)
  • Takeoffs: Information for outbound flights (e.g. runway, SID, ... etc.)
  • Tracks: Radar data (e.g. latitude, longitude, ... etc.)

These files should be stored in a folder inside the folder scenario/LVNL/Data. By using the REPLAY or PLAYBACK command, the scenario can be started. More information about this can be found here.

Reading and processing

Reading and processing the VEMMIS data is done in the first class (VEMMISRead) in the pyhton file tools/vemmisread.py, by using a number of methods (functions in a class). For this Pandas DataFrames are used. There are several methods that are usefull when you want to change some things in the scenario:

  • select_flights(): Within this method it is possible to select the desired flight, for example when you want only inbound or outbound flights. This would look something like this:
self.flightdata = self.flightdata.loc[self.flightdata['FLIGHT_TYPE'] == 'INBOUND']
  • get_initial(): Within this method, the desired initial commands can be selected. This is done by calling the method that creates the initial commands and their corresponding time. This would look something like this (for an arbitrary "simulationname"):
cmds, cmdst = self.initial_simulationname()
  • initial_simulationname(): This is a method you can create yourself. The "standard" method is self.initial(swdatafeed). Within these methods you can create commands for all flights or for a group of flights based on a parameter. This would look something like this:
# For all flights
cmds += list('DELRTE '+self.flightdata['CALLSIGN'])  # A list with the commands for all flights
cmdst += list(self.flightdata['SIM_START'] + 0.01)  # A list with the execute time (0.01 is added for safety, such that the command is executed after the flight is created)

# For a group of flights
outbound = self.flightdata.loc[self.flightdata['FLIGHT_TYPE'] == 'OUTBOUND']  # Select outbound flights
cmds += list("SID "+outbound['CALLSIGN']+", "+outbound['SID']+", OFF")
cmdst += list(outbound['SIM_START'] + 0.01)

Initializing

!!!To Do!!!