1. Praktikum: ADS

Werbung
1. Praktikum: ADS-B Empfänger
1.1. Einleitung
1.1.1. Automatic Dependent Surveillance - Broadcast
Automatic Dependent Surveillance - Broadcast (ADS-B) ist ein Funkdienst zur Ortung und Überwachung von Flugzeugen im Luftraum. Flugzeuge senden zu Flugsicherungszwecken in regelmäÿigen Intervallen ihre Position und weitere Flugdaten
auf einer Frequenz von 1090 MHz. Die gesendeten Daten umfassen unter anderem:
ˆ
Identikation (ICAO-Code)
ˆ
Flugname
ˆ
Flughöhe (Altitude)
ˆ
Geographische Breite (Latitude)
ˆ
Geographische Länge (Longitude)
ˆ
Flugrichtung (Heading)
ˆ
Geschwindigkeit (Velocity)
ˆ
Steigleistung (Vertical Rate)
ADS-B wird parallel zur üblichen Radarüberwachung eingesetzt.
1.1.2. Software Dened Radio
Üblicherweise werden Elemente eines Kommunikationssystems wie Mischer, Verstärker, Filter und Modulator als Hardwarekomponenten ausgelegt. Dies hat den
Nachteil, dass ein System nachträglich nicht mehr umkonguiert werden kann. Ein
Software Dened Radio (SDR) ist Gerät bei dem möglichst viele der Komponenten
in Software realisiert werden. Bei einem idealen SDR ist die Antenne direkt mit
Nitsche, Kremer
1
Informationssysteme
1. Praktikum: ADS-B Empfänger
einem Analog-Digital-Wandler verbunden, alle weiteren Verarbeitungsschritte geschehen in der Software. Ein Sender oder Empfänger kann durch Umkonguration
schnell für verschiedene Zwecke eingesetzt werden.
SDR sind meist teure Geräte, da sie über viel Rechenleistung verfügen müssen und
beispielsweise FPGA verwenden. Für den Privatnutzer wurden SDR erschwinglich,
als ndige Entwickler für bestimmte DVB-T Dongles (z.B. mit dem Chip Realtek
RTL2832U/R820T) einen Treiber entwickelten, der sie zu SDR umrüstete. Der Frequenzbereich ist je nach Chipsatz unterschiedlich aber beispielsweise im Bereich von
20 MHz bis 2 GHz bei einer maximalen Abtastrate von
2 − 2, 5 MsS .
Weitere In-
formationen zu den nachrichtentechnischen Grundlagen werden im Fach Digitale
Kommunikationssysteme behandelt.
Ziel dieses Praktikums ist es, mit einem DVB-T Stick, der als SDR arbeitet einen
ADS-B Empfänger aufzubauen. Die empfangenen Daten werden dabei in einer Datenbank abgelegt und in den kommenden Praktika mittels einer Webseite visualisiert.
1.2. Vorbereitung
Bearbeiten Sie zur Vorbereitung auf das Praktikum bitte folgende Fragen und Aufgaben:
ˆ
Wie können in MySQL Skripte aufgerufen werden?
ˆ
Wozu dienen Schlüssel in einer Datenbank? Was ist der Unterschied zwischen
Primär- und Sekundärschlüsseln?
ˆ
Entwerfen Sie eine SQL-Abfrage, die die maximale Flughöhe (Altitude) aus
der Tabelle
ightdata
bestimmt (Hinweis: Aggregatfunktionen).
flightdata
|--------------------|
| id # int
|
| altitude int
|
ˆ
Die geographischen Koordinaten von Krefeld (genauer des F-Gebäudes am
Campus Krefeld Süd) sind
51°18'58.6"N
und
6°34'10.0"E.
Berechnen Sie
die Koordinaten als Darstellung in Dezimalgrad. Berechnen Sie getrennt für
geographische Breite und Länge den Wertebereich für eine Abweichung von
Nitsche, Kremer
2
Informationssysteme
1. Praktikum: ADS-B Empfänger
±10 km in Dezimalgrad. Hinweis: Eine Breitenminute entspricht 1, 852 km und
eine Längenminute entspricht 1, 852 km · cos(ϕ).
Sofern Sie sich in der Übung einen Raspberry Pi ausgeliehen haben, bringen Sie ihn
bitte zum Praktikum mit. Es stehen keine Ersatzgeräte zur Verfügung.
1.3. Durchführung
1.3.1. Inbetriebnahme
Sie erhalten von den Betreuern neben dem aus der Übung bekannten Raspberry Pi
einen DVB-T Dongle, der in diesem Versuch als SDR dienen wird. Er basiert auf
dem bereits erwähnten Realtek RTL2832U Chipsatz, der für kostengünstige SDR
verwendet werden kann.
Schlieÿen Sie den Dongle an einen der freien USB-Steckplätze und verbinden Sie
ihn mit der Antenne. Den Raspberry Pi starten Sie, indem Sie ihn mit der Stromversorgung verbinden. Die Logindaten für den Hauptrechner und den Raspberry Pi
sollten aus der Übung bekannt sein, ansonsten fragen Sie einen der Betreuer.
Nach erfolgreichem Login über SSH testen Sie zunächst die Funktionalität des DVBT Dongles, indem Sie die Testfunktion aufrufen.
user@rpi201 ~ $ rtl_test -t
Es sollte ein Gerät (device) gefunden und dessen unterstützte Modi angezeigt werden.
Found 1 device(s): 0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner Supported gain values (29):
0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4
28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
Sampling at 2048000 S/s.
No E4000 tuner found, aborting.
Laden Sie nun die vorbereitete Software herunter und entpacken diese in das Verzeichnis
praktikum/dump1090.
user@rpi201 ~ $ cd praktikum
Nitsche, Kremer
3
Informationssysteme
1. Praktikum: ADS-B Empfänger
user@rpi201 ~/praktikum $ wget http://lionel.kr.hsnr.de/~nitsche/
ins/praktikum01/dump1090.tar.gz
user@rpi201 ~/praktikum $ tar -xvzf dump1090.tar.gz
Die Software liegt als Sourcecode vor. Das Programm muss noch kompiliert werden.
user@rpi201 ~/praktikum $ cd dump1090
user@rpi201 ~/praktikum/dump1090 $ make
Das Kompilieren wird einen Moment dauern. Lassen Sie sich anschlieÿend die Hilfe
für das Programm anzeigen.
user@rpi201 ~/praktikum/dump1090 $ ./dump1090 --help
Starten Sie das Programm im interaktiven Modus. Es wird eine Tabelle angezeigt,
die nach einiger Zeit Flüge anzeigen sollte.
Hex Mode Sqwk Flight Alt Spd Hdg Lat
Long Sig Msgs Ti/
-------------------------------------------------------------4ca893 S 5764 RYR12KT 9825 294 000 51.187 6.479 11 128 0
3c49c5 S 5355 BER7727 20975 435 057 51.019 7.348 7 405 5
471f52 S 3431 WZZ4KA 37025 505 106 51.039 7.264 11 2342 1
4cc0db S 7166 TAY024A 27000 460 048 51.433 7.088 13 2850 1
3c6510 S 4115 DLH520 32000 396 297 51.528 6.672 9 4178 0
Die Anzahl der Flüge ist stark von der Flugaktivität im beobachteten Zeitraum
abhängig. Auch die Empfangsleistung und damit die Reichweite wird durch verschiedene Faktoren, beispielsweise der Wahl der Antenne beeinusst.
Angezeigt werden immer die aktuellsten Daten, die von einem Flug empfangen werden. Diese Daten sollen in einer MySQL-Datenbank gespeichert werden. Dazu ist
das Programm um eine Datenbankschnittstelle zu erweitern.
1.3.2. Erstellen der Tabelle ights
Zunächst wird in der Datenbank eine Tabelle
create_tables.sql,
ights
erstellt. Schreiben Sie ein Skript
dass die SQL-Befehle zur Erstellung der Tabelle beeinhaltet.
flights
|------------------------|
| icao # char(6)
|
| flight varchar(7)
|
Nitsche, Kremer
4
Informationssysteme
1. Praktikum: ADS-B Empfänger
Führen Sie Ihr Skript in der Datenbank
praktikum
aus.
mysql> SOURCE create_tables.sql
Testen Sie, ob die Tabelle angelegt wurde.
mysql> SHOW TABLES;
+--------------------+
| Tables_in_dump1090 |
+--------------------+
| flights
|
+--------------------+
1 rows in set (0.00 sec)
1.3.3. Flüge automatisch importieren
Im nächsten Schritt muss das Programm um den Zugri auf die Datenbank erweitert
werden. Dazu wurden die Dateien
mysql.h
und
mysql.c
vorbereitet. In der
mysql.h
tragen Sie die Logindaten für Ihre Datenbank ein.
user@rpi201 ~/praktikum/dump1090 $ nano mysql.h
Aus Sicherheitsgründen wird dafür im Normalfall oft ein eigener Datenbankbenutzer
angelegt. Dessen Rechte wären derart eingeschränkt, dass er nur Einfügungen in
eine Tabelle ausführen kann. Da das Thema Datenbankadministration in diesem
Praktikum nicht behandelt wird, verzichten wir auf diesen Schritt und verwenden
wie in den Übungen den Benutzernamen
Die
mysql.c
dbuser.
ist für den aktuellen Stand vorbereitet, muss aber später erweitert wer-
den. Kompilieren Sie das Programm erneut und führen Sie es mit der Option
mysql
aus.
user@rpi201 ~/praktikum/dump1090 $ make clean
user@rpi201 ~/praktikum/dump1090 $ make
user@rpi201 ~/praktikum/dump1090 $ ./dump1090 --interactive --mysql
Loggen Sie sich in einer zweiten Terminalsession auf der Datenbank des Raspberry
ein. Mit
mysql> SELECT * FROM flights;
können Sie den Inhalt der Tabelle abrufen. Sofern Flüge empfangen werden, sollte
die Tabelle bereits einige Zeilen beeinhalten.
Nitsche, Kremer
5
Informationssysteme
1. Praktikum: ADS-B Empfänger
1.3.4. Tabelle für weitere Flugdaten
Bisher verwenden wir die in der Tabelle
ights
lediglich die ICAO und den Flugna-
men aus den zur Verfügung stehenden Daten. Für eine spätere Anwendung werden
wesentlich mehr Daten benötigt.
Erstellen Sie eine neue Tabelle
ightdata
mit folgender Struktur:
flights
flightdata
|-------------|
|-------------|
| icao #
| <----- | icao
|
| flight
|
| id #
|
| altitude
|
| latitude
|
| longitude |
| heading
|
| velocity
|
| vert_rate |
| timestamp |
| submitter |
Machen Sie sich in der Datei
aircraft
dump1090.h
mit den Strukturen
modesMessage
und
vertraut. Dort nden sich die geforderten Daten und deren Datentypen.
Ergänzen Sie daraufhin Ihr Skript
ightdata.
create_tables.sql
um die Erstellung der Tabelle
Der Primärschlüssel dieser Tabelle soll ein Index
id
sein, der bei neuen
Einträgen automatisch erhöht wird (AUTO_INCREMENT ). Die Spalte
ta.icao
ist ein Fremdschlüssel auf
ights.icao.
Auÿerdem soll es ein Feld
geben, dass den Namen des Eintragenden (z.B.
rpi201 )
ightdasubmitter
aufzeichnet.
1.3.5. Flugdaten importieren
mysql.c
ightdata.
Modizieren Sie als nächstes die Datei
und ergänzen ein weiteres SQL-
Statement zum Import in die Tabelle
Sie können sich dabei am bereits
vorhandenen Programmcode orientieren.
Kompilieren Sie das Programm neu. Vergessen Sie nicht das Programm bei jeder
Änderung erneut zu kompilieren. Da hier ein sogennantes
Makele
verwendet wird,
wird nur der Programmteil neukompiliert, der geändert wurde. Das erneute kompilieren sollte also schneller gehen als beim ersten Mal.
Nitsche, Kremer
6
Informationssysteme
1. Praktikum: ADS-B Empfänger
user@rpi201 ~/praktikum/dump1090 $ make
Sobald Sie Ihr Programm starten und Flugzeuge empfangen werden, sollte sich auch
die Tabelle
ightdata
füllen. Prüfen Sie das mit der Abfrage
mysql> SELECT count(*) AS anzahl FROM flightdata;
1.3.6. Flugdaten säubern (Trigger)
Wenn Sie sich die Werte in der Tabelle
ightdata
anschauen
mysql> SELECT altitude, latitude, longitude
FROM flightdata;
werden Sie feststellen das etliche der Werte Nullwerte sind, da nicht in jedem Paket
alle Daten übermittelt werden. Sie können auch gezielt die Anzahl dieser Zeilen
bestimmen.
mysql> SELECT count(*)
FROM flightdata WHERE latitude = 0;
Eine Möglichkeit diese unvollständigen Werte zu entfernen besteht darin einen
ger
anzulegen, der eine zweite Tabelle
cleandata
Trig-
nur dann füllt, wenn die Daten
vollständig sind. Unvollständige Inserts werden verworfen.
cleandata, deren Struktur der Tabelle ightdata entspricht. Sie können Ihr Skript create_tables.sql entsprechend leicht ergänzen.
Erzeugen Sie dazu zunächst eine Tabelle
Legen Sie nun ein neues Skript
create_trigger.sql
zur Erzeugung des Triggers mit
folgendem Inhalt an:
delimiter $
DROP TRIGGER checkdata$
CREATE TRIGGER checkdata BEFORE INSERT ON flightdata
FOR EACH ROW
BEGIN
IF NEW.latitude != 0 THEN
INSERT INTO cleandata(icao, altitude)
VALUES(NEW.icao, NEW.altitude);
END IF;
END$
delimiter ;
Nitsche, Kremer
7
Informationssysteme
1. Praktikum: ADS-B Empfänger
Ergänzen Sie das Skript um eine Überprüfung von Longitude auf Nullwerte und ergänzen Sie das INSERT INTO-Statement um Einfügungen in die restlichen Spalten. Erstellen Sie nun den Trigger.
mysql> SOURCE create_trigger.sql;
Löschen Sie auÿerdem alle bisherigen Werte in der Tabelle
ightdata.
Und starten
Sie das Programm neu.
mysql> DELETE FROM flightdata;
user@rpi201 ~/praktikum/dump1090 $ ./dump1090 --interactive --mysql
Prüfen Sie, ob Einträge in cleandata erzeugt werden. Nach einer Weile sollten in
der Tabelle
cleandata
weniger Einträge vorhanden sein, als in der tabelle
ightdata.
Prüfen Sie dies mit folgendem Statement:
mysql> SELECT count_fd, count_cd FROM
(SELECT count(*) as count_fd FROM flightdata) as x,
(SELECT count(*) as count_cd FROM cleandata) as y;
1.3.7. SQL-Abfragen
ˆ
Nutzen Sie die Ergebnisse aus der Vorbereitungsaufgabe, um zu bestimmen
welche Flüge sich im Beobachtungszeitraum im Umkreis von
±10 km um Kre-
feld befunden haben (Hinweis: SELECT DISTINCT).
ˆ
Bestimmen Sie das schnellste Flugzeug in Ihrer Aufzeichnung (Hinweis: Aggregatfunktionen).
ˆ
Zeigen Sie bei den beiden vorherigen Aufgaben neben der
icao
auch die Flug-
nummer an (Hinweis: Join).
Nitsche, Kremer
8
Informationssysteme
Herunterladen