Facebook Social Icon Twitter Social Icon YouTube Social Icon

Steuerung für Quadrokopter im LCARS-Design

From M.Eng. René Schwarz, Bremen/Merseburg
Jump to: navigation, search
Grafische Benutzeroberfläche der Steuerung in der Hauptansicht

Im Rahmen eines Projekts an meiner Hochschule habe ich eine Steuerung für einen Quadrokopter programmiert. Schon seit langer Zeit spielte ich mit dem Gedanken, einmal das LCARS-Design (LCARS: Library Computer Access and Retrieval System) aus Star Trek an einer realen Steuerung umzusetzen. Eine Demoversion der Steuerung zum eigenen Ausprobieren wird in diesem Beitrag zum Download angeboten.

Die für den Quadrokopter entworfene Steuerung, Master Remote Control (MRC) genannt, läuft auf einem Tablet (Archos 9) mit Windows 7 als Betriebssystem und einem 8,9" Touchscreen als Eingabegerät. Die MRC wurde in C# unter Verwendung der Windows Presentation Foundation (WPF), dem Microsoft .NET Framework 4.0 und der Extensible Application Markup Language (XAML) für die einzelnen Vektorgrafiken der grafischen Benutzeroberfläche (Grahpical User Interface, GUI) programmiert.

Im Laufe des Projekts stellte ich fest, dass das LCARS-Design – auch wenn es eigentlich ein rein fiktives Film-Design ist – eine sehr elegante Möglichkeit bietet, viele verschiedene Steuerelemente auf wenig Platz komfortabel, logisch und ergonomisch darzustellen.


Download der MRC

LCARS-MRC Screenshot.png

Damit Sie die Bedienung der MRC einmal selbst ausprobieren können, habe ich eine Demoversion kompiliert, in der alle Netzwerkfunktionen und die Protokollimplementierungen entfernt worden sind. Diese Version der MRC ermöglicht ein Ausprobieren der MRC ohne eine reale Funktion der Steuerung.

» Die MRC können Sie hier herunterladen. «

Zur Ausführung der Software wird das kostenlos verfügbare Microsoft .NET Framework 4 Client Profile benötigt.


Auszug aus der zugehörigen Belegarbeit

Der nachfolgende Text ist ein Auszug aus der zugehörigen Belegarbeit mit entsprechenden Kürzungen bzw. Anpassungen auf die Demo-Version.


Projektbeschreibung

Das vorliegende Projekt im Modul „Ubiquitous Computing“ hat die Umsetzung einer Tablet-Steuerung für einen Quadrokopter zum Ziel. Der Quadrokopter wurde von der Projektgruppe im Rahmen des Moduls „Roboter in der Künstlichen Intelligenz“ vollständig selbst entwickelt. Er besteht aus verschiedenen Sensoren und Aktoren, die von einem auf dem Quadrokopter aufgebrachten Mikrocontroller ausgehend angesprochen und gesteuert werden.

Prinzipskizze des Quadrokopters aus der Phase der Modellbildung

Der Quadrokopter ist in der Lage, seine Position im Raum selbstständig zu halten. Für alle weiteren Bewegungen ist die Erteilung von Kommandos notwendig; die Steuerung dafür wurde innerhalb dieses Projekts erarbeitet. Als Hardware dafür steht das Tablet Archos 9 mit Microsoft Windows 7 Home Edition als Betriebssystem zur Verfügung. Die Steuerung wurde von der Projektgruppe so geplant, dass die auf dem Tablet laufende Software, Master Remote Control (MRC) genannt, über Wireless LAN (Übertragungsprotokoll: TCP/IP) mit dem Mikrocontroller des Quadrokopters kommunizieren kann. Dazu wurde ein eigenes Kommunikationsprotokoll entwickelt. Der Mikrocontroller ist über ein WLAN-Modul mit dem WLAN-Router verbunden, in dessen Funkzelle sich das Tablet ebenfalls einbucht.

Das WLAN-Modul des Quadrokopters setzt die empfangenen TCP/IP-Pakete transparent in serielle Signale um, die der Mikrocontroller an Bord des Quadrokopters verarbeiten kann. Umgekehrt sendet der Mikrocontroller serielle Signale an das WLAN-Modul, welches diese in TCP/IP-Pakete verpackt und an die eingestellte Gegenstelle, das Tablet, versendet.

Im Rahmen der Beschickung des Quadrokopters wurde das WLAN-Modul beschädigt, so dass von der ursprünglich geplanten Umsetzung abgewichen werden musste. Die Projektgruppe hat sich daher entschlossen, den Mikrocontroller des Quadrokopters in Form einer Windows-Anwendung, dem Server, zu simulieren. Dadurch ist es möglich, die Steuerung unverändert zu entwickeln und das Kommunikationsprotokoll zu implementieren. Der Server empfängt die Kommandos und simuliert verschiedene Sensorwerte des Quadrokopters.

Die Steuerung soll folgende Möglichkeiten zur Kommandierung des Quadrokopters bieten:

  • Auto-Navigations-Modus ein-/ausschalten (mit einprogrammierten Flugsequenzen)
  • Auslösen der Kalibrierung des Höhensensors (mehrmaliges Auslesen des Temperatursensors) [Anm. 1]
  • An-/Abschalten der Gyroskope[Anm. 2] zu Demonstrationszwecken (Lageinstabilität)
  • An-/Abschalten des Beschleunigungssensors zu Demonstrationszwecken (Lageinstabilität)
  • An-/Abschalten des manuellen Flugmodus
  • Positionslichter ein- und ausschalten
  • Motoren starten und herunterfahren
  • Energieversorgung abschalten
  • Flughöhe vergrößern/verkleinern
  • Quadrokopter nach Himmelsrichtungen ausrichten
  • translatorische und rotatorische Bewegungen steuern
  • Einstellung verschiedener Geschwindigkeitsstufen
  • Auslösen eines Notfallmodus.

Der Quadrokopter wird von dem Mikrocontroller vollkommen autonom geflogen. Die Steuerung versteht sich daher lediglich als Modus- und Sollwertgeber; die empfangenen Sensordaten dienen lediglich der Information des Benutzers, nicht zur Regelung des Fluges. Aus Sicherheitsgründen soll das Kommunikationsprotokoll Empfangsbestätigungen und ggf. erneute Nachsendungen von Befehlen bei Ausbleiben einer Bestätigung implementieren, um den sicheren Erhalt der einzelnen Nachrichten auch über eine instabile WLAN-Verbindung hinweg zu ermöglichen. Bei Verbindungsabbruch soll sich der Quadrokopter automatisch in einen Notfallmodus begeben, der ihn zum sofortigen Stopp (Fluglage halten) und zum kontrollierten Herunterfahren der Systeme veranlasst.

Diese Belegarbeit versteht sich als Dokumentation der erfolgreichen Erarbeitung der Steuerung. Die Benutzeroberfläche der Steuerung orientiert sich an dem LCARS-Design[Anm. 3] von Star Trek-Filmen, welches eine sehr kompakte und ergonomische Möglichkeit zur Darstellung und Bedienung vieler Steuerungsmöglichkeiten auf kleinem Raum ermöglicht.

Die MRC und der Server wurden in C# mit Microsoft Visual Studio 2010 Professional als Programmierumgebung unter Verwendung des Microsoft .NET-Frameworks 4.0 und der Windows Presentation Foundation (WPF) entwickelt. Die WPF bietet eine sehr elegante Möglichkeit, beliebige Vektorgrafiken[Anm. 4] als Elemente der Benutzeroberläche zu verwenden.


Protokoll-Spezifikation

Aufbau von Nachrichten

Für die bidirektionale Kommunikation zwischen MRC und Server wurde ein eigenes Kommunikationsprotokoll entwickelt, welches die sichere Übertragung von Kommandos und Informationen ermöglichen soll. Das Kommunikationsprotokoll besteht aus sogenannten Sätzen, die wiederrum aus ASCII-Zeichen bestehen. Ein Satz wird durch das Dollar-Zeichen ($) eingeleitet und durch ein Doppelkreuz (#) beendet. Zwischen diesen beiden Anfangs- und Endzeichen steht ein String, bestehend aus drei Gruppen, die untereinander durch ein Semikolon (;) getrennt sind. Die erste Gruppe nennt sich Sender und kennzeichnet den Absender der jeweiligen Nachricht. Die zweite Gruppe identifiziert den Betreff der Nachricht und wird mit Subject bezeichnet. Die letzte Gruppe enthält ggf. Daten (Data), die sich auf den Betreff der Nachricht beziehen.

Eine Nachricht ist maximal 33 Zeichen oder 264 Bit lang und lässt sich durch folgenden regulären Ausdruck evaluieren:

	new Regex("^\$([12]{1});([0-9]{2});([0-9a-zA-Z.,]{0,26})#$");


Bestätigungsnachrichten (ACK)

Alle auf diesen regulären Ausdruck passenden Nachrichten, mit Ausnahme derer mit Subject „01“, werden mit einer Bestätigungsnachricht vom Empfänger quittiert. Die Bestätigungsnachricht besteht dabei aus dem Inhalt (Sender, Subject und Data) der Ursprungsnachricht; lediglich Anfangs- und Endzeichen werden vertauscht. Eine Bestätigungsnachricht kann mit dem regulären Ausdruck

	new Regex("^#[12]{1};[0-9]{2};[0-9a-zA-Z.,]{0,26}\$$");

evaluiert werden. Jede empfangene Nachricht muss innerhalb von 1.200 Millisekunden mit einer Bestätigungsnachricht quittiert werden. Erfolgt dies nicht, sendet der ursprüngliche Absender die Nachricht solange neu, bis er eine Bestätigungsnachricht erhält.


Heartbeats

Nachrichten mit dem Subject „01“ sind sogenannte Heartbeats der einzelnen Kommunikationsteilnehmer. Sie dienen dazu, der Gegenseite anzuzeigen, dass die Verbindung noch einwandfrei besteht. Jede Seite muss innerhalb von 1,2 Sekunden einen Heartbeat der Gegenseite erhalten. Geschieht dies nicht, hat die Gegenseite maximal zwei weitere Versuche, einen Heartbeat zu senden. Geschieht dies nicht, schaltet sich die entsprechende Seite automatisch in den Notfallmodus.


Übersicht über die möglichen Subjects

Das Kommunikationsprotokoll kennt die in der nachfolgenden Tabelle aufgeführten Subjects sowie die mit diesen assoziierten Daten. Dieser Abschnitt führt die Bedeutung jedes einzelnen Subjects aus.

MRC Server Subject Bedeutung Data
OK OK 01 Heartbeat
OK Fail 02 Enable AUTO NAV Flight Sequence Number
OK Fail 03 Calibrate Temperature Sensor
OK Fail 04 Turn Gyros ON/OFF 0 – OFF, 1 – ON
OK Fail 05 Turn Acceleration Sensor ON/OFF 0 – OFF, 1 – ON
OK Fail 06 Hold POS
OK Fail 07 Height Control 0 – Decrease, 1 – Increase
OK Fail 08 POS LIGHT ON/OFF 0 – OFF, 1 – ON
OK Fail 09 Set Motion Mode 0 - Normal, 1 - Slow, 2 - Fast
OK Fail 10 Rotation about x-Axis 0 - +x, 1 - -x
OK Fail 11 Rotation about y-Axis 0 - +y, 1 - -y
OK Fail 12 Rotation about z-Axis 0 - +z, 1 - -z
OK Fail 13 Rotation about z-Axis to Magnetic Field 0 - N, 1 - E, 2 - S, 3 - W
OK Fail 14 Translate to local coordinate system 0 - N, 1 - E, 2 - S, 3 - W
OK Fail 15 Turn Engines ON/OFF 0 – OFF, 1 – ON
OK Fail 16 Power OFF
OK Fail 17 Release EMERGENCY MODE
Fail OK 18 Sensor Data: Temperature Temperature in $^\circ \text{C}$
Fail OK 19 Sensor Data: Height Height in $\text{m}$
Fail OK 20 Sensor Data: Gyros $\ddot{\varphi}_x$ in $\frac{\text{deg}}{\text{s}}$, $\ddot{\varphi}_y$ in $\frac{\text{deg}}{\text{s}}$, $\ddot{\varphi}_z$ in $\frac{\text{deg}}{\text{s}}$
Fail OK 21 Sensor Data: Acceleration Sensor $\ddot{s}_x$ in $\frac{\text{m}}{\text{s}^2}$, $\ddot{s}_y$ in $\frac{\text{m}}{\text{s}^2}$, $\ddot{s}_z$ in $\frac{\text{m}}{\text{s}^2}$
Heartbeat (01)

Die Heartbeat-Nachrichten eines Absenders ermöglichen es dem Empfänger festzustellen, dass die Gegenseite noch aktiv und die WLAN-Verbindung dorthin intakt ist. Sowohl MRC als auch Server senden sich gegenseitig in Abständen von 1.200 Millisekunden Heartbeat-Nachrichten zu. Erreicht eine Heartbeat-Nachricht den Empfänger innerhalb dieser Zeit nicht, hat die Gegenseite noch zwei weitere Male die Gelegenheit, einen Heartbeat zu senden, bevor der Kommunikationspartner in den Notfallmodus wechselt.

Enable AUTO NAV (02)

In diesem Modus hat der Benutzer die Möglichkeit, den Quadrokopter in den Auto-Navigations-Modus zu versetzen und dabei die Ausführung einer bestimmten Flight Sequence zu befehlen. Zu diesem Zweck existieren vier verschiedene, fest einprogrammierte Flight Sequences, die auf dem Mikrocontroller aufgerufen werden können. Wählt der Benutzer keine Flight Sequence aus, so hält der Quadrokopter seine momentane Position und Lage automatisch ein.

Calibrate Temperature Sensor (03)

Zur Kalibrierung des Temperatursensors wählt der Benutzer diesen Modus. Der Quadrokopter ermittelt seine Höhe über einen Luftdrucksensor. Mit Hilfe der barometrischen Höhenformel wird die momentane Flughöhe über den Luftdruck und die vorherrschende Umgebungstemperatur errechnet. Aus Kapazitätsgründen konnten Luftdrucksensor und Temperatursensoren nicht gleichzeitig gemeinsam an den Mikrocontroller angeschlossen werden (es steht nur eine begrenzte Anzahl von Digital-/Analogwandlern zur Verfügung).

Durch Auswählen dieses Modus wird der Luftdrucksensor temporär abgeschaltet und im Gegenzug wird der Temperatursensor aktiviert. Der Mikrocontroller liest nun die Temperatur mehrere Male aus und bildet den arithmetischen Mittelwert. Nachdem dieser Wert im Mikrocontroller gespeichert worden ist, schaltet der Mikrocontroller automatisch den Temperatursensor wieder ab und aktiviert den Luftdrucksensor.

Turn Gyros ON/OFF (04)

Die Gyroskope erfassen die Winkelgeschwindigkeit um eine bestimmte Rotationsachse. Werden die Gyroskope ausgeschaltet, so kann der Quadrokopter seine Lage nicht mehr erhalten. Dieser Befehl ist zu Demonstrationszwecken gedacht.

Turn Acceleration Sensor ON/OFF (05)

In diesem Modus wird der Beschleunigungssensor des Quadrokopters aktiviert oder deaktiviert. Der von der Projektgruppe verwendete Beschleunigungssensor erfasst die Beschleunigung in allen drei Achsen des Raumes. Wird dieser Sensor abgeschaltet, so ist der Quadrokopter nicht mehr in der Lage seine translatorische Position zu erhalten. Dieser Befehl ist zu Demonstrationszwecken gedacht.

Hold POS (06)

Im Modus Hold POS befindet sich der Quadrokopter in der manuellen Steuerung. Er hält automatisch seine Position und Lage ein, bis der Benutzer ihm anderweitige Befehle gibt.

Height Control (07)

In diesem Modus kann der Benutzer die Höhe das Quadrokopters beeinflussen. Durch diesen Befehl wird die Höhe um ein Inkrement erhöht oder reduziert.

POS LIGHT ON/OFF (08)

Durch diesen Befehl werden die Positionslichter des Quadrokopters ein- oder ausgeschaltet.

Set Motion Mode (09)

Der Benutzer kann durch diesen Befehl dem Bewegungsmodus setzen. Es stehen drei Modi zur Auswahl: Die normale, die verlangsamte oder die beschleunigte Bewegung.

Rotation about x-Axis (10)

Dieser Befehl rotiert den Quadrokopter um die x-Achse in negativem oder positivem Drehsinn, sofern sich dieser im manuellen Modus befindet.

Rotation about y-Axis (11)

Dieser Befehl rotiert den Quadrokopter um die y-Achse in negativem oder positivem Drehsinn, sofern sich dieser im manuellen Modus befindet.

Rotation about z-Axis (12)

Dieser Befehl rotiert den Quadrokopter um die z-Achse in negativem oder positivem Drehsinn, sofern sich dieser im manuellen Modus befindet.

Rotation about z-Axis zo Magnetic Field (13)

Der Quadrokopter verfügt über einen digitalen Magnetfeldsensor, mit dem es möglich ist, das lokale Koordinatensystem am Bezugspunkt +y in eine Himmelsrichtung auszurichten, sofern sich der Quadrokopter im manuellen Modus befindet.

Translate to local coordinate system (14)

Der Befehl führt eine Translation bezüglich des lokalen Koordinatensystems in Richtung +x, -x, +y oder -y aus.

Turn Engines ON/OFF (15)

Die Motoren des Quadrokopters werden mit diesem Befehl ausgeschaltet.

Power OFF (16)

Die Stromversorgung des Quadrokopters wird mit diesem Befehl deaktiviert.

Release EMERGENCY MODE (17)

Dieser Befehl löst den Notfallmodus aus.

Sensor Data – Temperature (18)

Diese Nachricht dient der Übermittlung des erfassten Temperaturwertes.

Sensor Data – Height (19)

Mit dieser Nachricht wird die aktuell errechnete Höhe des Quadrokopters übermittelt.

Sensor Data – Gyros (20)

Der Quadrokopter ist mit drei Gyroskopen bestückt. Deren Messwerte werden mit diesem Befehl an die MRC übermittelt.

Sensor Data – Acceleration Sensor (21)

Die Werte des Beschleunigungssensors werden mit diesem Befehl an die MRC übermittelt.


Umsetzung und Bedienungsanleitung

Dieser Abschnitt soll eine kurze Bedienungsanleitung für das Interface darstellen. Zunächst sieht der Benutzer im linken Fenster nach Anwendungsstart die MRC Diagnostics Console. Dieses Fenster zeigt die übertragenen und empfangenen Nachrichten an. Im rechten Fenster öffnet sich die MRC mit einer grafischen Oberfläche. Diese Oberfläche ist in der nachfolgenden Abbildung dargestellt. Die darunter befindliche Tabelle zeigt die einzelnen Buttons in Übersicht.

LCARS-MRC GUI Desc.svg
Button Beschreibung
1 schaltet die Positionslichter aus
2 schaltet den Translationsmodus an (alle Bewegungen des Steuerkreuzes werden als translatorische Befehle gewertet)
3 rotiert den Quadrokopter um die z-Achse gegen den Uhrzeigersinn
4 schaltet die Motoren ein (und fliegt entweder mit AUTO NAV die einprogrammierte Flight Sequence ab oder hält die Position)
5 Motoren ausschalten
6 Stromversorgung deaktivieren
7 schaltet die Positionslichter an
8 rotiert den Bezugspunkt des Quadrokopters in westliche Richtung
9 erhöht die Flughöhe um ein Inkrement
10 schaltet in den langsamen Bewegungsmodus
11 aktiviert den äußeren Ring (Buttons 5, 6, 27, 28)
12 reduziert die Flughöhe um ein Inkrement
13 rotiert den Bezugspunkt des Quadrokopters in nördliche Richtung
14 aktiviert Flight Sequence 1
15 rotiert den Quadrokopter um die z-Achse im Uhrzeigersinn
16 aktiviert Flight Sequence 2
17 schaltet den Rotationsmodus an (alle Bewegungen des Steuerkreuzes werden als rotatorische Befehle gewertet)
18 schaltet die Auto-Navigation ein oder aus und aktiviert oder deaktiviert Button 11
19 aktiviert Flight Sequence 3
20 aktiviert Buttons 14, 16, 19 und 21 und lässt die Auswahl einer Flight Sequence zu
21 aktiviert Flight Sequence 4
22 rotiert den Bezugspunkt des Quadrokopters in östliche Richtung
23 Steuerkreuz für manuelle Steuerung
24 schaltet in den schnellen Bewegungsmodus
25 (de-)aktiviert das Flight Panel
26 setzt das Flight Panel in den Ausgangszustand zurück und befiehlt dem Quadrokopter, momentane Lage und Position zu halten
27 aktiviert das Steuerkreuz (Button 23)
28 weist den Quadrokopter zum Erhalt der momentanen Lage und Position an
29 rotiert den Bezugspunkt des Quadrokopters in südliche Richtung
30 löst den Notfallmodus aus

Fußnoten

  1. Die Flughöhe des Quadrokopters wird über einen Luftdrucksensor und mit Hilfe der barometrischen Höhengleichung bestimmt. Dazu ist allerdings die Kenntnis der Umgebungstemperatur notwendig. Da der Temperatursensor aufgrund der limitierten Verfügbarkeit von AD-Wandlern nicht permanent eingeschalten ist, wird der Temperatursensor während des Kalibriervorgangs kurzzeitig aktiviert und im Gegenzug wird der Luftdrucksensor deaktiviert.
  2. Gyroskope messen die Winkelgeschwindigkeit um eine bestimmte Rotationsachse.
  3. LCARS ist die Abkürzung für Library Computer Access/Retrieval System, einer fiktiven Oberfläche in Star Trek-Filmen.
  4. Die Vektorgrafiken werden dabei mit Hilfe eines beliebigen Vektorgrafik-Programms, z.B. Adobe Illustrator, erstellt, anschließend in SVG-Grafiken umgewandelt und mit Hilfe des Tools svg2xaml in XAML umgewandelt.