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.
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.
Number of position messages recorded in the last 24 hours.
Number of ground stations active in the last 5 minutes.
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:
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:
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.
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 only support Raspbian Stretch.
wget -q - https://adsb.ethz.ch/key.asc | sudo apt-key add key.asc
echo "deb 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
.
acpos
package.sudo apt-get update
sudo apt-get install acpos
That's it. During installation, you will be asked to enter the latitude, longitude, and altitude of your base station. To find these values, you can use services such as LatLong and Elevation Finder.
If you move your base station, or want to change its name, you can change your config values by running sudo dpkg-reconfigure acpos
or by manually editing /etc/default/acpos
.
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.
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.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.
nmap -sn 192.168.1.*
.ssh pi@IP_ADDRESS
, where IP_ADDRESS
is the Raspberry's IP as determined in the previous step. The default password is raspberry
.