currently in early active development current phase: Complete the Ground Picture X-Plane 12 first · MSFS after core maturity

System Architecture

How VibePilot ATC Is Being Built

A signal pipeline from live simulator data to ATC speech. VibePilot first builds runway context, then checks whether controller action is earned before a phrase is allowed to leave the system.

I Seeing the aircraft
01 Live Simulator Data
Operational

X-Plane sends live telemetry every simulation tick. This layer receives the aircraft's position, motion, altitude, and ground state so VibePilot can start listening like a controller.

Raw simulator transport and metadata normalisation. UDP telemetry is received, validated, and mapped into VibePilot's internal vocabulary.
NetworkServiceReceives simulator UDP frames and forwards validated telemetry internally. XPlaneMetadataBridgeExtracts aircraft identity and environment context from simulator metadata.
Receives: UDP Payload
latitude, longitude float heading_true float groundspeed float altitude_msl, vertical_speed float on_ground, sim_time bool/float
Emits: AircraftStateRaw
lat, lon float headingTrue float groundspeedKt float altitudeFt, verticalSpeedFpm float onGround, timestamp bool/float
AircraftStateRaw
02 Aircraft State
Operational

The raw frame becomes a clean aircraft state. VibePilot now knows where the aircraft is, how fast it is moving, what changed since the previous frame, and whether it is airborne or on the runway.

Constructs a stable, continuous aircraft object. This is the first continuity layer, preserving previous samples for motion and timing calculations.
AircraftStateFirst normalised aircraft object combining raw motion and simulator metadata. .fromTelemetry()Constructs the operational AircraftState from normalised telemetry input.
Receives: AircraftStateRaw
lat, lon, headingTrue groundspeedKt, altitudeFt verticalSpeedFpm, onGround timestamp
Emits: AircraftState
position {lat,lon} heading, track float groundspeed, altitude float previousPosition {lat,lon} deltaTime float
AircraftState
03 Runway Geometry
Operational

This is where the aircraft first gets a measurable relationship to a runway. VibePilot calculates threshold distance, centerline offset, heading alignment, and runway-relative movement.

Converts aircraft state into runway-relative geometry. First layer where runway relation becomes measurable, fed continuously by L04 runway candidates.
GeoMathLow-level spatial calculations used across geometry and runway logic. GeoCalculatorDerives headings, distances, bearings and positional deltas. MagneticModelConverts true bearings into local magnetic reference. RunwayHeadingResolverAligns aircraft track against runway magnetic heading families.
Receives
AircraftState RunwayCandidateSet ← L04
Emits: GeometryState
distanceToThreshold bearingToThreshold crossTrackMeters alongTrackMeters headingDelta alignedRunways[]
GeometryState
↶ cross-layer feed: RunwayCandidateSet from L04 on every frame
04 Runway Reference
Operational

A loaded runway reference map gives the aircraft something to be measured against. For a nearby airport, it supplies threshold coordinates, headings, dimensions, and runway identities in real time.

Persistent runway reference layer supplying geometry and runway intelligence with spatial context.
AptDatLoaderParses X-Plane apt.dat runway definitions into structured memory. RunwayRepositoryPersistent runway dataset used by all higher runway logic. RunwayFamilyIndexGroups reciprocal runways into operational families. AirportSpatialIndexFast lookup structure for nearby airport geometry.
Receives: Context Request
aircraft position search radius
Emits: RunwayCandidateSet
runwayId, airportIcao thresholdA {lat,lon} thresholdB {lat,lon} heading, length, width
RunwayCandidateSet
47,824 airports · 75,000+ runways · X-Plane apt.dat ↷ feeds L03 (geometry) and L05 (RISEngine) on every frame
II Understanding intent
05 RISEngine | Approach Understanding
Operational

Geometry says where the aircraft is. RISEngine says what the aircraft is doing relative to the runway: joining final, stabilising, crossing the threshold, touching down, rolling out, or vacating.

Converts geometry into runway intent. RISEngine orchestrates the call chain. Corridor and lateral detectors run as sibling branches feeding RunwayIntentPredictor after phase is resolved.
RISEngineCentral runway-intelligence orchestrator resolving runway intent. RunwayPhaseResolverDetermines whether aircraft is approach, rollout, or airborne relative to runway. ApproachCorridorDetectorMeasures corridor alignment before runway threshold entry. branch RunwayLateralDetectorTracks lateral displacement relative to runway centreline. ApproachStabilityMonitorEvaluates approach continuity before intent confirmation. RunwayIntentPredictorPredicts target runway before physical threshold crossing.
Receives
AircraftState GeometryState RunwayCandidateSet ← L04
Emits: RunwayIntentState
assignedRunway phase stableApproach bool lateralConfidence float occupancyPrediction
RunwayIntentState
Touchdown · Rollout · Vacated latch
06 Stability & Readiness
Operational

Before the system speaks, it checks whether the aircraft is actually ready for controller action. Alignment, vertical path, trend, runway phase, and timing all have to support the same answer.

Turns runway understanding into controller readiness. This layer protects the speech path by separating aircraft evaluation from the final controller phrase.
Vertical CheckCompares the aircraft against the expected approach path. Stability CheckChecks whether geometry and trend have stayed trustworthy long enough. with Timing CheckPrevents controller action from firing too early or too late. · Readiness StateSummarises whether controller speech is allowed, delayed, or blocked. · Speech WindowCarries the controller decision forward only when the timing window is valid.
Receives
RunwayIntentState AircraftState vertical path approach trend
Emits: ReadinessState
stable bool clearanceReady bool timingReady bool releaseAllowed bool speechWindow bool
ReadinessState
Approach stability · timing · release readiness
III Speaking like ATC
07 ATC Speech
Active Build

This is the operational end of the chain. The controller decides what can be said, the phrase layer turns that decision into aviation language, and the result becomes ATC speech for the pilot.

Controller speech is produced only after runway context and readiness have been resolved. The interface may display the reasoning, but the final output is the spoken ATC transmission.
Controller DecisionChooses whether to continue, wait, clear, instruct, or intervene. stages Phrase BuilderTurns the decision into standard controller wording. · Radio TransmissionDelivers the ATC instruction as the pilot-facing output. ATC PhraseKeeps the wording concise, phase-aware, and aviation-like. Speech OutputThe final operational output heard by the pilot.
Receives
RunwayIntentState ReadinessState clearance state radio context
Emits: ATC Speech
instructionType assignedRunway phraseology string transmission
"CLEARED TO LAND RUNWAY 28"
Signal Flow PHASE I: SEEING PHASE II: UNDERSTANDING PHASE III: SPEAKING L01 L02 L04 REFERENCE L03 L05 L06 L07 Live Sim Data Aircraft State Runway Geometry RISEngine Readiness Check ATC Speech Airport & Runway Ref. RunwayCandidateSet RunwayCandidateSet
flight signal
readiness
speech output
cross-layer ref
Full system signal map · detailed internal reference
Layer Resolution Monitor | 4.8nm final, RWY 28, Zurich
[01]lat=47.4481 lon=8.6649 hdg=278° gs=138kt alt=2920ft vs=-720fpm gnd=0 [02]track=277° dt=0.10s prev=(47.4479,8.6646) | continuity established [04]cand=12 aligned=[28,34] thr28=(47.4588,8.5551) | reference ready [03]xtrk=-10m atrk=4.8nm dthr=4.8nm hdgΔ=1.0° | inside corridor [05]RISEngine phase=FINAL rwy=28 corridor=VALID conf=0.96 | approach understood [06]stable=1 clearanceReady=1 timing=READY speech=READY | speech allowed [07]type=LANDING tx="VIBEPILOT 123, CLEARED TO LAND RUNWAY 28"