ROTOR

ROTOR is my recreation of the experience of the 1990’s IUKADGE air defence system using secondary radar from an ADS-B compatible datasource instead of the T84 and T85 primary radar and nodding height finders.

T Shirt Sizing: XL

This is a project that’s been itching to get out of my head and into code for many years, and with the availability of ADS-B aircraft telemetry and some time on my hands, ROTOR was finally born.

ROTOR simulates the detection and display of radar tracks as if you were sat in an R3 bunker in the heyday of the Cold War, but instead of 1970s VAX/VMS mainframes, round display consoles, trackballs and T84 and T85 primary radar from the 1950s, ROTOR is built on a modern containerised event driven web stack using ADS-B data to simulate the detection and tracking of targets.

I’ve built the system from the ground up to store, process, and analyse upwards of 35 million aircraft movements per day acquired from an ADS-B compatible data source at a 2 second resolution. Considerable attention has been made in optimising the data acquisition, storage and processing such that the entire system and its microservices can be deployed as docker containers on commodity hardware.

The responsive frontend has been developed in Vue3 with a mix of Laravel and raw PHP in the backend, supported by two Postgis database servers set up with replication and a large codebase of custom PSQL geospatial functions and triggers, all orchestrated using Terraform, Ansible and Docker Swarm with observability provided by Zabbix and Grafana. I also made extensive use of QGis to manage the geospatial data used to represent the various overlay layers.

This project also offered an opportunity to develop my skills in data analysis against a large and constantly updated dataset, and I built a feature into ROTOR to allow playback and display of data at wire speed to render interesting timelapse representations of aircraft movements filtered by location, origin and destination, military activity, etc.

Features:

◾ A user interface modelled on my memory of the 1990’s-era consoles in the R3 bunker. The UI includes sophisticated filtering and display options, along with a wide range of overlays for showing navaids, airfields, fixes, etc. As a backend developer, this is by far the most extensive and intensive use I’ve made of Vue3.

◾ A unified timeseries datastore built on Postgis for high precision aircraft position updates, with datasource plugins providing the data acquisition. Currently supported datasources include ADS-B live and replay and a plugin I developed for XPlane12 to emit its internal simulated aircraft movements as an ADS-B data source.

◾ The missing map for serious XPlane12/Zibo-mod pilots, providing all the aircraft surveillance, categorisation and filtering features from a live data source, but with mission planning and flight plan generation straight into the B738’s FMC. The XPlane12 integration provides a simulation within a simulation of an E3-D AWACS platform with the Zibo mod B738 CDU overriden to provide a simulated Link16 datasource from the simulated E3-D into the real world ROTOR air picture.

◾ Automated aircraft categorisation to identify an individual track as heavy/light civilian aircraft, SAR, police and civilian helicopters, gliders and drones, and military aircraft.

◾ Automated detection of origin and destination airfields and runways and correlation against real-world flight plans. To add to the realism of the air defence simulation, uncorrelated tracks are classified as potentially hostile, with the an intercept course fed straight into the XPlane12 CDU.

Screenshots

Renderings of time-lapse data

ROTOR can replay recorded ADS-B data, and with filters set for interesting events a time-lapse can be created showing the history of all aircraft movements during the recording period.

See more

https://rotor.webdevops.uk

Tech stack tags