skyeye

module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 1, 2025 License: MIT

README

SkyEye: AI Powered GCI Bot for DCS

SkyEye is a Ground Controlled Intercept (GCI) bot for the flight simulator Digital Combat Simulator (DCS). It is an advanced replacement for the in-game E-2, E-3 and A-50 AI aircraft.

SkyEye is a substantial improvement over the DCS AWACS:

  1. SkyEye offers modern voice recognition using a current-generation AI model. Keyboard input is also supported.
  2. SkyEye has natural sounding voices, using a neural network to synthesize speech instead of robotically clipping together samples.
  3. SkyEye adheres more closely to real-world brevity and procedures instead of the incorrect brevity used by the in-game AWACS.
  4. SkyEye supports a larger number of commands, including PICTURE, BOGEY DOPE, DECLARE, SNAPLOCK, SPIKED , and ALPHA CHECK.
  5. SkyEye intelligently monitors the battlespace, providing automatic THREAT, MERGED and FADED callouts to improve situational awareness.

SkyEye uses Speech-To-Text and Text-To-Speech technology which can run locally on the same computer as SkyEye. No cloud APIs are required, although cloud APIs are optionally supported. It works with any DCS mission, singleplayer or multiplayer. No special scripting or mission editor setup is required. You can run it for less than a nickel per hour on a cloud server, or run it on a PC in your home.

SkyEye is production ready software. It is used by the Flashpoint Levant public server and a number of private squadrons.

Getting Started

FAQ

What kind of hardware does it require?

See the Hardware section of the admin guide.

Can I train the speech recognition on my voice/accent?

Since the software runs 100% locally, the speech recognition model is a local file. Server operators can provide a trained model as an alternative to the off-the-shelf model. See this blog post for an example.

I don't plan to provide a mechanism for players to submit their voice recordings to the main repository due to data privacy concerns.

Does this use Line-Of-Sight restrictions?

Not at this time. I am working on a solution for this, but it will take me a while.

If this is a critical feature for you, consider using MOOSE's AWACS module instead. It supports Line-Of-Sight and datalink simulation, at the tradeoff of requiring some special setup in the Mission Editor.

OverlordBot also optionally supports this feature, although less than 1% of users used it.

Will this work with DCS' built-in VoIP?

As of this writing, DCS' built-in VoIP does not support external clients. SkyEye therefore requires SRS to function.

Could this use a Large Language Model? (llama, mistral, etc.)

SkyEye uses an embedded LLM for speech-to-text, but I deliberately chose not to use an LLM for SkyEye's language parsing or decision-making logic.

Within the domain of air combat communication, these problems are less linguistic and more mathematical in nature. Air combat communication uses a limited, highly specific vocabulary and a low-context grammar that can be parsed quickly with traditional programming methods. The workflow for the tactical controller is a straightforward decision tree mostly based on tables of aircraft data, some middle school geometry and a few statistical methods. These workflows can be implemented in a few hundred lines of code and run in a few milliseconds. An LLM would have worse performance, no guarantee of consistency, much larger CPU and memory requirements, and introduces a large surface area of ML-specific issues such as privacy of training data sets, debugging hallucinations, and a much more difficult testing and validation process.

While working on this software I spoke to a number of people who thought it would be as easy as feeding a bunch of PDFs to an LLM and it would magically learn how to be a competent tactical controller. This could not be further from the truth!

Could this provide ATC services?

I have no plans to attempt an ATC bot due to limitations within DCS.

AI aircraft in DCS cannot be directly commanded through scripting or external software and are incapable of safely operating in controlled airspace. for example, AI aircraft in DCS do not sequence for landing, and will only begin an approach if the entire approach and runway are clear. AI aircraft also cannot execute a hold or a missed approach, and they make no effort to maintain separation from other aircraft.

While working on this software I spoke to a number of people who thought it would be as easy as feeding a bunch of PDFs to an LLM and it would magically become a capable Air Traffic Controller. This could not be further from the truth!

Can you add an option to do insert feature here?

I'm happy to hear your ideas, but I am very selective about what I choose to implement.

I develop SkyEye at no monetary cost to the user; therefore, one of my priorities is to keep the complexity of the software close to the minimum necessary level to ease the maintenance burden. I'm focusing only on features that are useful to most players. I avoid adding features that are gated by configuration options, because each one multiplies the permutations that need to be tested and debugged. See this video.

SkyEye is open source software. If you want a feature that I don't want to maintain, you have the right to fork the project and add it yourself (or hire a programmer to add it for you).

Technology

SkyEye would not be possible without these people and projects, for whom I am deeply appreciative:

  • DCS-SRS by @ciribob. Ciribob also patiently answered many of my questions on SRS internals and provided helpful debugging tips whenever I ran into a block in the SRS integration.
  • Tacview - specifically, ACMI real time telemetry - provides the data feed from DCS World.
  • @rurounijones's OverlordBot was a useful reference against SkyEye during early development, and Jones himself was also patient with my questions on Discord.
  • OpenAI's Whisper provides speech-to-text. @ggerganov's whisper.cpp allows Whisper to be used locally without requiring cloud services.
  • @rodaine's numwords module is invaluable for parsing numeric quantities from voice input.
  • Piper by the Rhasspy voice assistant project is used for speech-to-text.
  • The Jenny dataset by Dioco provides the feminine voice for SkyEye.
  • @popey's dataset provides the masculine voice for SkyEye.
  • @amitybell's embedded Piper module makes distribution and implementation of Piper a breeze. @nabbl improved this module by adding support for macOS and variable speeds.
  • The Opus codec and the hraban/opus module provides audio compression for the SRS protocol.
  • @hbollon's go-edlib module provides algorithms to help SkyEye understand when it slightly mishears/the user slightly misspeaks a callsign or command over the radio.
  • @lithammer's shortuuid module provides a GUID implementation compatible with the SRS protocols.
  • @zaf's resample module helps with audio format conversion between Piper and SRS.
  • @martinlindhe's unit module provides easy angular, length, speed and frequency unit conversion.
  • @paulmach's orb module provides a simple, flexible GIS library for analyzing the geometric relationships between aircraft.
  • @proway's go-igrf module implements the International Geomagnetic Reference Field used to correct for magnetic declination.
  • Cobra is used for the CLI frontend, including configuration flags, help and examples. Viper is used to load configuration from a file/environment variables.
  • MSYS2 provides a Windows build environment.
  • @bwmarrin's discordgo module provides the Discord tracing integration.
  • @pasztorpisti's go-crc module provides algorithms for negotiating handshakes with TacView telemetry sources.
  • Oto was helpful for debugging audio format conversion problems.
  • zerolog is helpful for general logging and printf debugging.
  • testify is used in unit tests.
  • flock, maintained by the Gofrs, provides optional concurrency controls for running multiple instances of SkyEye on a single CPU.
  • Multiple DCS communities provide invaluable feedback and morale-booster energy:
  • The Ace Combat series by PROJECT ACES/Bandai Namco and Project Wingman by Sector D2 are massive influences on my interest in GCI/AWACS, and aviation in general. This project would not exist without the impact of Ace Combat 04: Shattered Skies.
  • And of course, DCS World is produced by Eagle Dynamics.

Directories

Path Synopsis
cmd
internal
application
package application is the main package for the SkyEye application.
package application is the main package for the SkyEye application.
cli
pkg
bearings
Package bearings contains functions for working with absolute and magnetic compass bearings.
Package bearings contains functions for working with absolute and magnetic compass bearings.
brevity
Package brevity contains types and models for air combat communication brevity.
Package brevity contains types and models for air combat communication brevity.
coalitions
Package coalitions defines the coalitions in DCS World.
Package coalitions defines the coalitions in DCS World.
commands
Package commands provides GCI command entrypoints other than voice commands.
Package commands provides GCI command entrypoints other than voice commands.
composer
Package composer converts brevity responses from structured forms into natural language.
Package composer converts brevity responses from structured forms into natural language.
controller
Package controller implements high-level logic for Ground-Controlled Interception (GCI).
Package controller implements high-level logic for Ground-Controlled Interception (GCI).
encyclopedia
Package encyclopedia is a database of aircraft data.
Package encyclopedia is a database of aircraft data.
parser
Package parser converts brevity requests from natural language into structured forms.
Package parser converts brevity requests from natural language into structured forms.
pcm
Package pcm converts between different representations of PCM audio data.
Package pcm converts between different representations of PCM audio data.
radar
Package radar implements mid-level logic for Ground-Controlled Interception (GCI).
Package radar implements mid-level logic for Ground-Controlled Interception (GCI).
recognizer
Package recognizer recognizes text from speech.
Package recognizer recognizes text from speech.
sim
Package sim contains message types for simulation state changes.
Package sim contains message types for simulation state changes.
simpleradio
Package simpleradio contains a SimpleRadio-Standalone client.
Package simpleradio contains a SimpleRadio-Standalone client.
simpleradio/types
Package types contains types used by the SRS client.
Package types contains types used by the SRS client.
simpleradio/voice
Package voice contains the types used by the SRS audio protocol to send and receive audio data over the network.
Package voice contains the types used by the SRS audio protocol to send and receive audio data over the network.
spatial
Package spatial contains geospatial functions.
Package spatial contains geospatial functions.
synthesizer
Package synthesizer contains text-to-speech synthesizers.
Package synthesizer contains text-to-speech synthesizers.
synthesizer/speakers
Package speakers contains interfaces and implementations for text-to-speech speakers.
Package speakers contains interfaces and implementations for text-to-speech speakers.
synthesizer/voices
Package voices defines the available voices for the synthesizer package.
Package voices defines the available voices for the synthesizer package.
telemetry
Package telemetry contains clients for reading ACMI data from files or real-time telemetry.
Package telemetry contains clients for reading ACMI data from files or real-time telemetry.
traces
Package traces defines types and interfaces for collecting and publishing GCI workflow traces.
Package traces defines types and interfaces for collecting and publishing GCI workflow traces.
trackfiles
Package trackfiles records aircraft movement over time.
Package trackfiles records aircraft movement over time.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL