Aircraft Signal Positioning System

Uses aircraft signals to localize users.
Runs on Raspberry Pi.
Developed at ETH Zurich.
About

Welcome to the project page for the Aircraft Positioning System developed by the Distributed Computing Group at ETH Zurich.

We use the position status messages broadcast by aircraft to determine the user's position using multilateration. This is similar to how GPS works, which uses satellite signals instead of aircraft signals.

Map

Click an aircraft to see its ICAO address and altitude as well as its travelled path. Click a ground station to see its current message rate.

An aircraft's color indicates its altitude, from red for low to blue for high.

Check the checkbox to see a visual indication whenever a ground station receives a message from an aircraft.

Stats

?

Total Messages

Number of position messages recorded in total.

?

Messages Today

Number of position messages recorded in the last 24 hours.

?

Active Stations

Number of ground stations active in the last 5 minutes.

Method

The idea of multilateration is that a receiver's position can be determined by measuring the differences in arrival time of signals originating from multiple known locations.

The way we apply this idea is by using aircraft as the known positions.

Modern aircraft constantly send out messages containing information such as position, altitude, heading or speed. We use the messages containing position, so we know the aircraft's position at that moment, and then measure the time difference between sending of the message at the aircraft and arrival at the receiver to measure the distance.

There are two main challenges to overcome:

  1. The aircraft do not provide a timestamp with the messages, so we do not know when each was sent. We have solved this problem by setting up ground stations with known positions, which record all messages received with a precise timestamp. Since we know the position of the ground station and we know the position of the aircraft, we can calculate when the message was sent at the aircraft by subtracting the calculated travel time from the reception time.
  2. All measurements need to be very precise and every part of the system needs to be precisely synchronized, as an error of only 1ms will result in an inaccuracy of 300km at light speed. We therefore require about nanosecond precision.

Our client-side software works in the same way as and is compatible with the feeders for sites such as FlightAware or FlightRadar24. These consist of two parts:

  1. dump1090, a Mode S decoding software, which connects to the attached receiver, such as a FlightAware Pro Stick Plus, decodes received messages and makes the information available to other software running on the device.
  2. A feeder, which relays this information to the appropriate servers.

We use a modified version of dump1090, based on and fully compatible with FlightAware's version. Since we require as much precision as possible, our version of dump1090 performs additional upsampling of the messages' timestamps, which means that it uses signal processing techniques to calculate the timestamps to a higher precision than is provided by the receiver or the unmodified version of dump1090.

Due to the imprecision of the Raspberry Pi's internal clock, subject to both an offset and a unpredictable drift over time, the synchronization of the ground stations and the handsets is performed on the server using a least-squares optimization and only in the context of a localization query.

Messages received by the handset to be localized are sent to the server with a reception timestamp, where they are matched with the reception timestamps as seen by the ground stations. After synchronization, the transmission time at the aircraft is determined, based on which the travel time and therefore the distance from the aircraft to the handset is calculated. These results is then used for trilateration of the handset.

For an in-depth, technical description of these processes, see our paper: Indoor Localization with Aircraft Signals.

Setup

Installing our software on your own Raspberry Pi is really simple. All you will need is an RTL-SDR dongle capable of picking up 1090 MHz signals such as the FlightAware Pro Stick Plus and an antenna. We currently support Raspbian Jessie and Stretch.

  1. If you have not yet installed Raspbian on your Pi's SD card or would like to reinstall, we have provided instructions for doing so in the next section, or you can follow one of many tutorials online.
  2. Add our Raspbian repository to your package manager's sources, so it knows where to find the packages.
    • For Raspbian Jessie:
      echo "deb [trusted=yes] https://adsb.ethz.ch/raspbian/ jessie main" | sudo tee -a /etc/apt/sources.list
    • For Raspbian Stretch:
      echo "deb [trusted=yes] https://adsb.ethz.ch/raspbian/ stretch main" | sudo tee -a /etc/apt/sources.list

    If you are not sure which version of Raspbian you have installed, run lsb_release -c.

  3. Install the acpos package.
    sudo apt-get update
    sudo apt-get install acpos

That's it. To attempt a localization of your current position, make sure your RTL-SDR dongle is connected, then simply run acpos.

To set up your Raspberry Pi as a ground station and contribute to the coverage of our system, run sudo acpos-config and follow the on-screen instructions. Re-run this command to change configuration, such as when you move your ground station or to disable the feeder. You can use this utility to help you determine your exact latitude, longitude and altitude.

Installing Raspbian

To set up a Raspberry Pi from scratch, follow these steps. You will need an SD card reader/writer - if you have a laptop there's a good chance you have one built in.

  1. Download Raspbian. If you will be using your Pi for tasks where you do not require a graphical desktop, the lite version is recommended, as it uses fewer resources.
  2. Get software for flashing the image to the SD card. Etcher is very easy to use.
  3. Insert your Raspberry Pi's SD card into the card reader and flash the downloaded image. Ignore any prompts to format once the flashing is complete.
  4. At this point you have two options:
    • Reinsert the SD card into the Raspberry Pi, attach a screen, keyboard and power cable then continue the setup on the Pi.
    • If you are an advanced user and would like to preform a 'headless' setup (without screen and keyboard) over SSH, the newer versions of Raspbian have features built in to make this easier:
      1. In the SD card's newly created boot partition, which should be accessible from every operating system while the SD card is plugged in, create a new empty file called ssh. This will enable connecting to the Pi over SSH.
      2. If your Pi is going to connect over WiFi, you can also preconfigure the appropriate settings, by creating a file in the boot partition called wpa_supplicant.conf, with the contents:
        ctrl_interface=/var/run/wpa_supplicant
        network={
        	ssid="YOUR_SSID"
        	psk="YOUR_PASSWORD"
        }
        where YOUR_SSID should be replaced by your WiFi's name and YOUR_PASSWORD by it's password. These settings will be automatically copied to the appropriate location on boot.
      3. Connect your Pi to power and give it a minute to boot up.
      4. Next, you will need to find out which IP address was assigned to your Pi. Either check your router's web interface or run a network scanning utility such as nmap from a computer in the same network, e.g. nmap -sn 192.168.1.*.
      5. Now you can connect to your Raspberry: ssh pi@IP_ADDRESS, where IP_ADDRESS is the Raspberry's IP as determined in the previous step. The default password is raspberry.