Internet der Dinge SS2014/IDD14P01 BLE Android Steuerung

Aus Verteilte Systeme - Wiki
Wechseln zu: Navigation, Suche

Im lauf dieser Projekt-Aufgabe soll eine Android-App entwickelt werden, welche eine Roboter steuert.

Ziele

Entwicklung einer Android-App die den SpyKee Roboters mittles des Beschleunigungsmessers des TI 2541,welcher über Bluetooth LE angesprochen wird, steuert.

Anforderungen

Funktional

  • Empfangen der Accelerometer Daten mittels Bluetooth Low Energy
  • Umsetzen dieser Daten in Steuerkommandos für den Roboter
  • senden der Steuerkommandos über einen TCP Socket


nicht Funktional

  • wenn die Kommunikation zu dem BL4 Dongle abbricht, soll sich der Roboter nicht mehr bewegen.

Umsetzung

Es wird eine Android-App entwicklet, welche in regelmäßigen Zeitabständen über BL4 LE die Accelerometer-Daten des Dongles abfragt. Anhand dieser Daten werden Steuerkommandos berechnet. Diese Steuerkommandos werden an den Roboter gesendet.

Für die Entwicklung einer Bluetooth LE fähigen App, wird Android 4.3 benötigt. Die App wird auf einem HTC One M8 mit Android 4.4 entwickelt und getestet.

Funktionen

  • Fahren des Roboters
    • Vorwärts
    • Rückwärts
    • nach Links
    • nach Rechts

Optinale Funktion

  • Anzeige von Fotos des Roboters
  • Verwendung des Mikrofons des Roboters

Bluetooth 4 Low Energy

Mit der vierten Version von Bluetooth wurde die Erweiterung Low Energy eingeführt, die besonders für Embedded Systems von Vorteil ist. Der größte Vorteil ist der geringe Energieverbrauch. Der geringe Energie verbrauch wird erreicht indem die Verbindung nicht dauerhaft aufrecht erhalten wird sondern nur für die Datenübertragung eine Verbindung aufgebaut wird und nach Abschluss der Übertragung die Verbindung abgebaut wird. Bei Bluetooth Low Energy ist zu beachten, das dieser Standard nicht für die Übertragung von Audio Daten geeignet ist. BLE ist auf geringe Datenraten beschränkt.

GATT Profile

Bei Bluetooth 4 Low Energy wurden verschiedne Profile spezifiziert. Diese sind unter GATT-Profiles zu finden. Wenn ein Gerät eines von diesen Profilen unterstützt, kann man erwarten die in dem Profil spezifizierten Services zu Verfügung stehen, dies erleichtert die Entwicklung.

verschiedne Profile -> man kann bestimmt services erwarten. services stellen bestimmt werte zu verfügung. können gelesen werden(zb sensor wärte) oder geschrieben werden (zb config wärte, notify werte)

GATT

Sensor Tag

Der CC2541 Sensor Tag ist ein Entwicklungsboard von Texas Instruments. Das Dongle kann über Bluetooth Low Energy angesprochen werden. Es besitzt 6 Sensoren. Diese Sensoren sind:

  • Temperature
  • Pressure
  • Hummity
  • Magnetometer
  • Acceleromter
  • Gyroscope

Für das auslesen der Sensoren müssen diese aktiviert werden, da sich die Sensoren ansonsten im Schlafzustand befinden, um Energie zu sparen. Die genaue Beschreibung der Sensoren ist in dem TI-Wikizu finden.

TI 2541 Dongle

Accelerometer

Für das Projekt wird nur der Acceleromter-Sensor benutzt. Dieser liefert Werte, die die Lage im Raum darstellen. Anahnd dieser X, Y und Z Werte, werden die Richtungskommandos berechnet, die an den Roboter gesendet werden. Die Kommunikation mit dem Accelerometer Sensor ist über die folgenden UUIDs möglich.


Sensor Service UUIDs
Service UUID
Acelleromter Service f000aa10-0451-4000-b000-000000000000
Acelleromter Data f000aa11-0451-4000-b000-000000000000
Acelleromter Config f000aa12-0451-4000-b000-000000000000
Acelleromter notify period f000aa13-0451-4000-b000-000000000000

Für die Auslesung der Daten des Acceleromters muss der Sensor aktiviert werden. Für die Aktivierung muss ein Byte mit dem Wert 1 an den Acceleromter-Config Endpunkt gesendet werden. Anschließend kann man über den Acceleromter-Data Endpunkt die Werte des Sensors abfragen. Diese Abfrage liefert 3 Byte zurück. Das erste Byte enthält den Wert der X-Achse, das zweite Byte den Wert der Y-Achse und das dritte Byte den Wert der Z-Achse. Der Sensor hat Werte von -2g bis +2g in der Einheit 1/64g. Für die Umwandlung in Werte von -1 bis +1 müssen die Werte mit 64 geteilt werden und der Wert des Y-Achse *-1 genommen werden, da der Sensor auf dem Sensor vertauscht ist.


SpyKee

Der SpyKee WLAN Spionage Roboter wurde von der Firma Meccano ab dem Jahr 2009 verkauft. Der Roboter besitzt eine Raupenantrieb, eine Kamera (320x240 Pixel Auflösung), ein Mikrofon und einen Lautsprecher. Für die Kontrolle des Roboters, wird ein Embedded Linux verwendet, welches auf einem ARM9 mit 200 Mhz und 32 MB Ram läuft.

SpyKee Roboter

Konfiguration

Für die Konfiguration des SpyKee-Roboters hat Meccano eine Anwendung veröffentlicht. Dabei ist zu beachten, dass diese Anwendung unter Windows 8 und Mac OSX 10.9 nicht funktioniert. Mit einem Laptop mit Windows 7 konnte der Roboter schließlich konfiguriert werden. Dafür muss unter den Einstellungen ein neues WLAN hinzugefügt werden. Dafür werden die SSID und Passwort des WLAN benötigt.

SpyKee Admin Programm

Kommandos

Der SpyKee wird über eine WLAN-Verbindung gesteuert. Da die Kontrolle des Roboters über eine TCP Verbindung abläuft, konnte das Protokoll per Reverse Engeneering ermittelt werden. Es ist eine Perl Implementierung unter Link zu finden. Außerdem ist eine Java Implementierung unter Link zu finden. Für die Entwicklung konnte zu großen Teilen die Java Implementierung verwendet werden. In der folgenden Tabelle sind die wichtigsten Kommandos dargestellt.

Kommandos
Kommando Bytes
Connect { 'P', 'K', 0x0a, 0 } + username + password
Move { 'P', 'K', 0x05, 0, 0x02, speedLeft, speedRight }
Undock { 'P', 'K', 0x10, 0, 1, 5 }
Dock { 'P', 'K', 0x10, 0, 1, 6 }

Android Anwendung

Die Anwendung setzt Android 4.3 voraus, da mit dieser Version die Unterstützung für Bluetooth 4 Low Energy eingeführt wurde. Bisher wird nur die GATT-Client Funktion unterstützt (Mit der L-Preview Version von Android wird die GATT-Server Funktion zu verfügung gestellt).

Die App stellt die Kommunikation mit dem TI-Dongle mittels Bluetooth LE her. Die Kommunikation mit dem SpyKee-Roboter wird mit einem TCP-Socket sichergestellt. Die benötigten Berechtigungen werden in der android-manifest.xml Datei festgelegt.

Android App Architektur

Die App besteht aus zwei Activities, welche der GUI Darstellung dienen. Die erste Activity (ScanDeviecesActivity) dient dem scannen und darstellen nach BLE-Geräten. Wenn der Benutzer auf ein gefundenes BLE klickt, wird mittels Intent die SensorDetailsActivity gestartet. In diesem Intent wird die Adresse des Gerätes, zu dem die Verbindung hergestellt werden soll, übergeben. Wenn diese Actitvity startet wird außerdem eine Verbindung zu SpyKee-Roboter hergestellt. Für die BLE Kommunikation verwendet die Activity einen Service (BluetoothLeService). Dieser Service implementiert verschiedene Methoden die dem Schreiben, Lesen und Erstelen von Notifications für verschiedene Charakteristiken dienen. Es werden auch verschiene Callback Methoden implementiert, da die Kommunikation mit dem BluetoothManager der Android-API asynchron abläuft.

Klassendiagramm

Für die Kommunikation mit dem SpyKee-Roboter wurde die Klasse SpyKeeControl erstellt. Diese implementiert das Interface RobotControlInterface. Das Interface dient des leichteren austauschen der Implementierung, falls z.B. ein anderer Roboter angesteuert werden soll.



Kommunikation mit dem TI-Dongle

Kommunikation mit dem BLE Dongle

Kommunikation mit dem SpyKee-Roboter

Kommunikation mit dem SpyKee

Mapping der Steuerkommandos

Für die Berechnung der Steuerkommandos wurde sich für ein einfaches Mapping entschieden. Der Roboter soll wenn das Dongle nach vorne gekippt wird nach vorne fahren. Wenn es nach rechts oder links gekippt wird, soll sich der Roboter auf der Stelle nach rechts oder links drehen. Außerdem soll der Roboter rückwärts fahren, sobald das Dongle nach hinten gekippt wird.

In der folgenden Tabelle sind die Werte enthalten, die der Accelerometer-Sensor bei den gewünschten Positionen ausgibt.

Accelerometer Werte
Ausrichtung X-Wert Y-Wert Z-Wert
Normal 0 1 0
Vorne 0 0 1
Hinten 0 0 -1
Links -1 0 0
Rechts 1 0 0

Die Berechnung der Steuerkommandos ist in der calcMovement() Methode der SpyKeeControl Klasse zu finden.

Ausrichtung der Achsen

Screenshots

Device Scan Activity
Sensor Details Activity

Fazit

Aus dem Projekt ist eine funktionsfähige Android-App hervorgegangen. Durch diese App werden dem SpyKee-Roboter einfache Steuerkommandos gesendet. Android bietet seit der Version 4.3 eine Bluetooth LE Api an. Obwohl die Android Version nicht sehr alt ist, gab es hervorragende Dokumentation von Google und auch von anderen Quellen. Mit dieser API war die Anbindung des TI-Dongle sehr einfach möglich. Desweiteren ist die Android-Entwicklung durch die sehr gute Dokumentation einfach zu erlernen. Natürlich gibt es noch Bereiche die ausgebaut werden könen. Eine dieser Baustellen ist das Mapping der Accerlerometer-Werte zu Steuerkommandos. Man könnte den SpyKee-Roboters anhand der Lage des Sensor schräg fahren lassen. Außerdem wäre eine variable Geschwindigkeit möglich, indem den Winkel des Sensors bezüglich des Horizonts ermittelt. Es wäre auch möglich das Bild der Kamera des Roboters auf dem Handy anzuzeigen, dadurch wäre die Steuerung möglich, auch wenn sich der Roboter nicht in Sichtweite befindet.

Links