Indoor Positioning System

Das Indoor Positioning System dient zur Positionsbestimmung eines Flugobjektes vor allem in Situationen, in denen Ortung per GPS aufgrund der Signaldämpfung durch Decken und Wände nicht möglich oder aus anderen Gründen ungünstig ist.
Dieser Artikel enthält alle wichtigen Informationen zur Funktionsweise sowie detaillierte Anweisungen zur Inbetriebnahme des Systems.

Inhaltsverzeichnis

1 Funktion

2 Hardware
    2.1 Bestandsliste
    2.2 Bodenstationen
    2.3 Gondelmodul
    2.4 Basisstation
    2.5 Akkus

3 Software
   
3.1 Voraussetzungen
   
3.2 Funktion
   
3.3 Kommunikation
   
3.4 Verwendung
   
3.5 Software in C++

4 Checklist

5 Historie

6 Links

 

Funktion


 

Das Indoor Positioning System basiert auf der Laufzeitmessung von Ultraschallwellen. Gleichzeitig vom Flugobjekt ausgesandte Infrarot- und Ultraschallsignale werden von fest installierten Bodenstationen empfangen. Die dabei auftretende Zeitdifferenz zwischen der Ankunft des Infrarotsignals und des Ultraschallsignals wird an die Basisstation durch Funkübertragung weitergeleitet. Der an die Basisstation angeschlossene Rechner kann nun aus den übertragenen Daten mittels Trilaterationsverfahren die Position des Flugobjektes bestimmen.

 

 

Hardware


Bestandsliste:

6   Bodenstationen
1   Testgondelmodul
1   Basismodul (+Funkmodul mit Antenne)
9   Akkus

Bodenstationen
Die Bodenstationen empfangen die von der Gondel ausgesandten Impulse und leitet die gemessene Zeitdifferenz zwischen Infrarot- und Ultraschallimpuls an das Basismodul weiter.
Das Signal des Ultraschallwandlers wird durch drei hintereinander geschaltete Bandpassfilter mit einem Verstärkungsfaktor von je 20 verstärkt. Ein Komparator wandelt das sinusförmige Signal in ein Rechtecksignal, welches dann vom Mikrocontroller ausgewertet wird. Als Infrarot-Empfängermodul wird das TSOP 31240 von VISHAY eingesetzt. Es filtert Infrarotsignale mit einer aufmodulierten Frequenz von 40 kHz heraus und gibt ein logisch-0 Signal an den Prozessor weiter. Das Funkmodul basiert auf dem nRF24L01+ transceiver IC von Nordic Semiconductor für das 2.4 GHz Band. Im Vergleich zu anderen Modulen ist es sehr stromsparend, was eine längere Akkulaufzeit erlaubt.

Microcontroller:      ATmega8
Funkmodul:           NRF24L01

 

Gondelmodul
Das Gondelmodul ist am Heliumballon angebracht und ist für die Erzeugung der zur Positionsbestimmung notwendigen Ultraschall- und Infrarotimpulse zuständig. Zu Testzwecken wird eine Testgondel mit je sechs ringförmig angeordneten, parallel verschalteten Ultraschallwandlern und Infrarot-LED verwendet. Die Ultraschallwandler werden über einen Motortreiber angesteuert. Die Infrarot-LEDs sind für eine Spannung von 5 Volt ausgelegt und sollten nicht direkt an einem Mikrocontrollerpin betrieben werden, da kurzzeitig Ströme von 100 mA fließen. Hier ist eine einfache Transistorschaltung zweckmäßig.
Im eingeschalteten Zustand sendet das Gondelmodul kontinuierlich eine Pulsfolge von 8 Takten bei 40kHz Frequenz alle 200ms. Diese gleichzeitig gesendeten Pulsfolgen werden mit entsprechender Zeitdifferenz zwischen Ultraschall und Infrarot von den Basisstationen aufgefangen.

Microcontroller:       ATmega328
Funkmodul:            NRF24L01
Ultraschalltreiber:    Sparkfun Motor Driver 1A Dual TB6612FNG

 

Basismodul
Das Basismodul leitet die von den Bodenstationen gemessenen Daten an den angeschlossenen Computer weiter und sendet Steuerbefehle an das Gondelmodul. Zur Verbesserung der Funkverbindung kann eine Antenne verwendet werden. Zu Beachten ist der korrekte Anschluss des Funkmoduls an den 3.3V Ausgang des Arduino.

Microcontroller:      ATmega328
Funkmodul:           NRF24L01

 

Akkus
Zum Betrieb des IPS werden LiPo Akkus verwendet. Die Bodenstationen werden in den neueren Versionen von 7,4V Akkupacks betrieben, einige ältere Versionen verwenden 3.7V Akkus. Das Gondelmodul wird an einen 3.7V Akku angeschlossen. Alle zum Betrieb des IPS verwendeten Akkus müssen in der zum IPS-Projekt gehörigen Kiste aufbewahrt werden.

 

Vor Verwendung des IPS sollte darauf geachtet werden, dass alle Teile des IPS vollständig mit allen Bauteilen bestückt sind (v.a. IC, Funkmodul, IR/Ultraschallempfänger) und dass alle Akkus geladen sind. Zum Aufladen der Akkus der Bodenstationen befindet sich ein Adapter in der IPS-Kiste.
Beim Aufbau des Systems ist zu beachten, dass die maximale Distanz der Funkmodule bei ca. 50m (Sichtkontakt) liegt, die der IR/US Signale bei ca. 12m. Ist der Aufbau des Systems auf einem größeren Gebiet geplant, so ist darauf zu achten, dass die Gondel stets in IR/US Reichweite von mindestens drei Bodenstationen ist. Es ist ratsam, die Positionen der Bodenstationen deutlich zu markieren, um Unfällen vorzubeugen.
Um die Akkulaufzeit der Bodenstationen sowie des Gondelmoduls zu erhöhen sollte das Gondelmodul zwischen den Testphasen ausgeschaltet werden, da die Bodenstationen nicht senden solange keine Signale empfangen werden und sich somit in einem stromsparenden Leerlauf befinden.

 

 

Software


Software-Voraussetzungen:

Um die IPS-Software starten zu können, müssen die folgenden Elemente installiert sein:

Python 3
Python 3 packages: python3-gi python3-gi python3-gi-cairo python3-all python3-regex python3-serial python3-gobject

GTK3+

Arduino
Arduino Library zur Verwendung des Nrf24L01 Funk-Moduls (Mirf.h)

Nach Installation der Python packages muss der Computer evtl. neu gestartet werden.

Funktion

Arduino-Sketches
Die zu den Bodenstationen und der Basisstation gehörigen Arduino-Sketches sind als empfänger.ino und basis.ino vorzufinden. Um die GUI zu testen kann test2.ino auf ein Arduino-Board geladen werden. Um Software-Updates an den Bodenstationen oder dem Gondelmodul vorzunehmen, muss ein FTDI Adapter verwendet werden.

Trilateration
Um aus den von den Bodenstationen empfangenen Daten die Position des Flugobjektes durch Trilateration zu ermitteln, wird aus Gründen höherer Rechengeschwindigkeit ein Programm in C verwendet. Dieses ist im IPS-Ordner auf github unter dem Namen multilat.c zu finden. Weitere Dokumentation zu diesem Programm findet sich im Ordner 'doku'.

Graphische Oberfläche
Die folgenden Dateien sind für die GUI relevant:

  • daedalus.glade: Definition des GUI
  • gui.py: Beinhaltet den GTK main thread
  • eventhandler.py: Behandelt auftretende Ereignisse


Zentrale Schnittstelle
Die Main-Funktion befindet sich in der Datei ips.py. Hier wird auch die Navigationssoftware der Team.py-Dateien in das System integriert, sodass die vom Computer berechneten Steuerbefehle eines Autopiloten an das Flugobjekt übermittelt werden können.
Um einen Autopiloten mit IPS-Unterstützung zu erstellen, muss der entsprechende Programmcode in der Datei ips.py importiert werden. Hier am Beispiel 'TeamX.py':

import TeamX

und in der Main Funktion angesprochen mit

        if self.team and self.ttyport:
          if self.team == "TeamX":
            self.team = TeamX.TeamX(self

Kommunikation

Die Kommunikation zwischen der Basisstation und den Bodenstationen erfolgt durch die Übertragung von Paketen in der Form eines Arrays der Länge 12 Byte. Davon belegen die Identifikationsnummern des Empfängers und des Senders sowie der Typ der Nachricht die ersten beiden Bytes. An fünfter und sechster Stelle wird über eine 16-Bit Zahl die Identifikation des zu übermittelnden Paketes ermöglicht sodass Pakete auch mit einer Verzögerung korrekt eingeordnet werden können. Die letzten 7 Byte beinhalten die von der Station gemessenen Daten.

       [Empfänger, ID, Typ, PaketID(2), Daten(7)]

Verwendung

Um die Software verwenden zu können, muss die Basisstation oder ein Arduino-Board an den PC angeschlossen sein. Zum Start des Programmes wird die Datei run.sh ausgeführt. Im erscheinenden Fenster kann die zu verwendende Navigationssoftware ausgewählt werden. Ist die Basisstation angeschlossen, so öffnet sich nun die Karte.
Zur weiteren Konfiguration befinden sich drei Register am linken Fensterrand. Im Register Navigation können die Positionen neuer Wegpunkte oder Bodenstationen eingefügt werden oder bereits vorhandene bearbeitet werden. Das Register Command erlaubt es dem Zeppelin diverse Befehle zu erteilen sowie zur Veranschaulichung der laufenden Berechnungen die Entfernungsradien zu den Wegpunkten in der Karte einzuzeichnen. Das Register Infos gibt die aktuelle Position, Geschwindigkeit und Akkuladung des Zeppelins an.

Auf der Karte, die den rechten Teil des Fensters einnimmt, sind die Wegpunkte, die Bodenstationen, die aktuelle Position des Zeppelins sowie dessen Pfad eingezeichnet. Die Größe der Karte richtet sich nach der Größe des Feldes das die Bodenstationen aufspannen. Ist eine Bodenstation für die Basisstation nicht erreichbar, so wird sie auf der Karte rot eingezeichnet. Ist sie erreichbar und funktionsfähig, so is sie grün eingezeichnet und die gemessene Distanz zum Zeppelin kann als Kreis um die Bodenstation eingezeichnet werden. Die Position des Zeppelins kann nur dann aktualisiert werden, wenn mindestens drei Bodenstationen grün eingezeichnet sind. Die Höhe des Zeppelins ist an der Farbe des eingezeichneten Pfades zu erkennen. Die verwendete Farbskala passt sich dynamisch an die während dem Flug vorkommenden Höhenwerte an.

Die Software des IPS-Projektes ist auf github.com zu finden (siehe Unterpunkt Links) und sollte dort stets auf dem neuesten Stand gehalten werden. Weiterhin ist darauf zu achten, dass alle Teile des IPS kompatible Software verwenden und die für den Versuchsaufbau notwendigen Einstellungen in der Software bezüglich der Positionen der Bodenstationen vorgenommen wurden.

 

Alternative: Steuersoftware in C++

Alternativ zur Python-Steuersoftware kann eine Steuersoftware in C++ verwendet werden. Diese ist ausführlich dokumentiert unter Sturzflug: Offboard Software

 

 

Checklist


Hier sind die wichtigsten Punkte zur erfolgreichen Inbetriebnahme des IPS kurz aufgelistet:

  1. Überprüfe die Bodestationen, das Gondelmodul und die Basisstationen auf Vollständigkeit: Sind Funkmodule, ICs, Antenne, Ultraschall- und Infrarotsender vorhanden und korrekt installiert? Hierzu kann der Aufbau mit den Bildern dieses Artikels verglichen werden.
  2. Teste die Funktionsfähigkeit der Bodenstationen und des Gondelmoduls. Sind die Bodenstationen mit einem Akku verbunden und eingeschaltet, so blinken die gelben LED der Bodenstationen kurz auf. Empfangen die Bodenstationen ein IR/US-Signal, so blinken die gelben LED kontinuierlich.
  3. Plane die Auslegung der Bodenstationen. Die Positionen der Bodenstationen sind zu vermessen und in die Datei ips.py in der Liste der Stationspositionen einzutragen. Wird die C++ GUI verwendet, so können die Positionen im Programm eingetragen werden. Für bessere Messergebnisse sollte darauf geachtet werden, dass die Stationen auch in verschiedener Höhe positioniert werden.
  4. Starte das IPS-Programm durch Ausführen der Datei run.sh.

 

 

Historie


Um die Entwicklung des IPS besser nachvollziehen zu können, sollen hier kurz die wichtigsten Entwicklungsschritte sowie Autoren und Entwickler des IPS notiert werden.

Jahr           Entwicklungsschritt Entwickler
2012
Projektpraktikum Informationsverarbeitung Entwicklung des Konzepts des IPS

Team 1

2012 Ingenieurspraxis Entwicklung und Herstellung der 1. Generation der Bodenstationen und der Python-GUI

Alexander Blum

2013 Ingenieurspraxis Erstellen eines mobilen Präsentationskoffers für das IPS (inaktiv), 2.Generation der Bodenstationen

Katrin Schütz

Lisa Broska

2013 Projektpraktikum Informationsverarbeitung 3. Generation der Bodenstationen, GUI in C++ Team BlowfishTeam Sturzflug (Bodenstationen); Quirin Körner, Alfred Deixler (GUI in C++)
2014 Ingenieurspraxis Dokumentation des IPS: Autor des Wiki-Artikels und der Github-Präsentationsseite Tobias Eden
2014 Projektpraktikum Informationsverarbeitung    

 

 


Bisherige IPS-Projekte:
Ultraschall Positionsbestimmung
Tragbares Indoor Navigationssystem
Gemeinsames IPS

Externe Links:
Github Präsenz des IPS Projektes
Python GTK+ 3 Tutorial
Arduino Tutorial
Arduino Library zur Verwendung des Nrf24L01 Funkmoduls (Mirf)