diff --git a/Thesis/README.md b/Thesis/README.md index 07fba3d..fd8d5dc 100644 --- a/Thesis/README.md +++ b/Thesis/README.md @@ -161,7 +161,7 @@ Ein Advertising-Paket enthält 31 Bytes, die vom Nutzer frei definiert werden k | ADV_DIRECT_IND | 6 bytes | nein | ja | | ADV_SCAN_IND | 31 bytes | ja | nein | | ADV_NONCONN_IND | 31 bytes | nein | nein | -: Übersicht zu Advertising Pakettypen. \label{tab:adpackettype} +: Übersicht über die verschiedenen Pakettypen von Advertising-Paketen. \label{tab:adpackettype} - Packetaufbau beschreiben!! @@ -282,7 +282,7 @@ Diese Arbeit soll untersuchen wie eine solche Lokalisierung umgesetzt werden kan # Implementierung -In den folgenden Abschnitten wird die verwendete Hardware sowie die Umsetzung beschrieben. Zum Einsatz kommen die Programmiersprachen JavaScript, Python und Kotlin. Dieser Mix erklärt sich aus der gewählten Hardware und dem Vorgehen. +In den folgenden Abschnitten wird die verwendete Hardware sowie die Umsetzung beschrieben. Zum Einsatz kommen die Programmiersprachen Java\-Script, Python und Kotlin. Dieser Mix erklärt sich aus der gewählten Hardware und dem Vorgehen. ## Beacon @@ -290,17 +290,17 @@ Als Bluetooth-Beacon kommen Puck.js\footnote{https://www.puck-js.com/}, Abbildun ![Puck.js inklusive Gehäuse. \label{fig:puck}](../static/puckjs.jpeg) -Durch eine Programmierschnittstelle lässt sich der Beacon mit Hilfe von Javascript Programmieren. Beim Einstieg hilft eine Datenbank mit Beispielprogrammen sowie ein ausführlich dokumentiertes \ac{api} [@Ltd_2017]. Zur Programmierung wid der Beacon mittels Bluetooth zu einer \ac{ide} im Browser verbunden. Abbildung \ref{fig:ide} zeigt die \ac{ide}: links befindet sich die Konsole über die einzelne Befehle direkt auf dem Beacon ausgeführt werden können, rechts ist der Editor zu sehen, in diesem können die Befehle zu Programmen zusammengeführt werden. Der Programmcode kann sowohl Temporär, zum Testen, auf den Beacon geladen werden als auch, nach dem Test, im Flash des Beacon gespeichert werden. Bei der temporären Ausführung ist der Code nach einem Batteriewechsel nicht mehr auf dem Beacon. Diese Art der Entwicklung macht das Experimentieren mit den Bluetooth-Beacon sehr einfach. +Durch eine Programmierschnittstelle lässt sich der Beacon mit Hilfe von JavaScript programmieren. Beim Einstieg hilft eine Datenbank mit Beispielprogrammen sowie ein ausführlich dokumentiertes \ac{api} [@Ltd_2017]. Zur Programmierung wird der Beacon mittels Bluetooth mit einer \ac{ide} im Browser verbunden. Abbildung \ref{fig:ide} zeigt die \ac{ide}: links befindet sich die Konsole über die einzelne Befehle direkt auf dem Beacon ausgeführt werden können, rechts ist der Editor zu sehen, in diesem können die Befehle zu Programmen zusammengeführt werden. Der Programmcode kann sowohl temporär zum Testen auf den Beacon geladen werden, als auch nach dem Test im Flash des Beacon gespeichert werden. Bei der temporären Ausführung ist der Code nach einem Batteriewechsel nicht mehr auf dem Beacon. Diese Art der Entwicklung macht das Experimentieren mit den Bluetooth-Beacon sehr einfach. -![Screenshot der Espruino \ac{ide} im Chrome Browser. \label{fig:ide}](../static/espruino_ide.png) +![Screenshot der Espruino \ac{ide} im Chrome-Browser. \label{fig:ide}](../static/espruino_ide.png) ### Modi -Während der Versuche mit den Beacon wird ein hohes Advertising-Intervall benötigt, welches für eine kürzere Batterielebensdauer sorgt. Um die Batterie nicht zu stark zu belasten wurden zwei Modi Entwickelt. Durch den integrierten Button, kann zwischen dem Versuchsmodus und dem Programmiermodus gewechselt werden. Zur Visualisierung in welchem Modus sich der Beacon befindet wird die eingebaute grüne und rote LED verwendet. Beim Wechsel vom Programmiermodus in den Versuchsmodus leuchtet die grüne LED auf und blinkt dann alle \SI{10}{\second}. Wird der Beacon erneut gedrückt, so zeigt die rote LED das beenden des Versuchsmodus an und der Beacon wechselt in den Programmiermodus zurück. +Während der Versuche mit den Beacon wird ein hohes Advertising-Intervall benötigt, welches für eine kürzere Batterielebensdauer sorgt. Um die Batterie nicht zu stark zu belasten, wurden zwei Modi entwickelt. Durch den integrierten Button, kann zwischen dem Versuchsmodus und dem Programmiermodus gewechselt werden. Zur Visualisierung in welchem Modus sich der Beacon befindet wird die eingebaute grüne und rote LED verwendet. Beim Wechsel vom Programmiermodus in den Versuchsmodus leuchtet die grüne LED auf und blinkt dann alle \SI{10}{\second}. Wird der Beacon erneut gedrückt, so zeigt die rote LED das Beenden des Versuchsmodus an und der Beacon wechselt in den Programmiermodus zurück. ### Identifizierung -Jeder Beacon verfügt über eine einzigartige Hardware-Adresse, \ac{mac}-Adresse genannt. Zur einfachen Identifizierung werden die letzten zwei Byte der \ac{mac}-Adresse in Kleinbuchstaben als Kurzname der Beacon verwendet. Für das Advertising wird vor den Kurznamen ein ``BLE`` für \acl{ble} gesetzt. Tabelle \ref{tab:devices} listet die \ac{mac}-Adresse sowie den dazugehörigen Advertising Namen und Kurznamen der Beacon auf. Im Versuchsmodus wird der Advertising Name nicht mit ausgesendet, mehr dazu im Kapitel \ref{advertising}. +Jeder Beacon verfügt über eine einzigartige Hardware-Adresse, \ac{mac}-Adresse genannt. Zur einfachen Identifizierung werden die letzten zwei Byte der \ac{mac}-Adresse in Kleinbuchstaben als Kurzname der Beacon verwendet. Für das Advertising wird vor den Kurznamen ein ``BLE`` für \acl{ble} gesetzt. Tabelle \ref{tab:devices} listet die \ac{mac}-Adresse sowie den dazugehörigen Advertising-Namen und Kurznamen der Beacon auf. Im Versuchsmodus wird der Advertising-Name nicht mit ausgesendet, mehr dazu im Kapitel \ref{advertising}. | \ac{mac}-Adresse | Advertising Name | Kurzname | | ---------------- | --------- | -------- | @@ -309,50 +309,55 @@ Jeder Beacon verfügt über eine einzigartige Hardware-Adresse, \ac{mac}-Adresse | D6:7C:70:1C:5B:5B | BLE 5b5b | 5b5b | : Übersicht der \ac{mac}-Adressen und zugehörigen Namen der verwendeten Beacon. \label{tab:devices} -Weiterhin wird für das Advertising ein universeller Identifikator benötigt. Diese erlaubt es die Advertising-Pakete eindeutig zuzuordnen. Espruino bietet hierzu eine Reservierte 16 bit \ac{uuid} ``0x0590`` für die Entwicklung von Anwendung mit ihrer Hardware. Diese \ac{uuid} wird zur Filterung der Advertising-Pakete im Scanner verwendet. +Weiterhin wird für das Advertising ein universeller Identifikator benötigt. Diese erlaubt es die Advertising-Pakete eindeutig zuzuordnen. Espruino bietet hierzu eine reservierte 16 Bit \ac{uuid} ``0x0590`` für die Entwicklung von Anwendung mit ihrer Hardware. Diese \ac{uuid} wird zur Filterung der Advertising-Pakete im Scanner verwendet. ### Advertising -Für das Advertising stehen 31 Byte für Benutzerdefinierte Daten zur Verfügung. Davon werden 5 byte im Versuchsmodus benötigt. Das Advertising-Paket im Versuchsmodus setzt sich aus der 16 bit langen \ac{uuid} ``0x0590`` und 3 Byte zur Übertragung der $scPower$ zusammen. Die $scPower$ wird in einer festen Reihenfolge abgespeichert und übertragen. Für einen produktiven Einsatz sollten diese Werte gekennzeichnet werden. Hierfür sind weitere 26 byte in dem Advertising-Paket frei. +Für das Advertising stehen 31 Byte für benutzerdefinierte Daten zur Verfügung. Davon werden 5 Byte im Versuchsmodus benötigt. Das Advertising-Paket im Versuchsmodus setzt sich aus der 16 Bit langen \ac{uuid} ``0x0590`` und 3 Byte zur Übertragung der $scPower$ zusammen. Die $scPower$ wird in einer festen Reihenfolge abgespeichert und übertragen. Für einen produktiven Einsatz sollten diese Werte gekennzeichnet werden. Hierfür sind weitere 26 Byte in dem Advertising-Paket frei. -Für den Versuchsmodus wird der Beacon in den Advertising-\ac{pdu} ``ADV_NONCONN_IND`` gesetzt. Hierbei lässt der Beacon keine Verbindung zu und reagiert nicht auf Anfragen sondern sendet nur Advertising-Pakete aus. Das Maximales Advertising-Intervall ist in diesem Modus zwar auf \SI{100}{\milli\second} beschränkt, dies ist jedoch für den gewählten Versuchsaufbau ausreichend. Zur Erfassung der Position bewegter Objekte sollte eine aktive Verbindung genutzt werden da hier das Advertising-Intervall auf \SI{20}{\milli\second} verkürzt werden kann. Der Advertising Name des Beacon wird im Versuchsmodus nicht ausgesendet. +Für den Versuchsmodus wird der Beacon in den Advertising-\ac{pdu} ``ADV_NONCONN_IND``, beschrieben in Kapitel \ref{bluetooth-low-energy}, gesetzt. Hierbei lässt der Beacon keine Verbindung zu und reagiert nicht auf Anfragen, sondern sendet nur Advertising-Pakete aus. Das maximales Advertising-Intervall ist in diesem Modus zwar auf \SI{100}{\milli\second} beschränkt, dies ist jedoch für den gewählten Versuchsaufbau ausreichend. Zur Erfassung der Position bewegter Objekte sollte eine aktive Verbindung genutzt werden, da hier das Advertising-Intervall auf \SI{20}{\milli\second} verkürzt werden kann. Der Advertising-Name des Beacons wird im Versuchsmodus nicht ausgesendet. -Im Programmiermodus befindet sich der Beacon im Advertising-\ac{pdu} ``ADV_IND``. Dieser ist notwendig damit eine Verbindung mit dem Beacon zur erneuten Programmierung hergestellt werden kann. Auch der Advertising Name des Beacon wird in diesem Modus wieder mit ausgesendet. +Im Programmiermodus befindet sich der Beacon im Advertising-\ac{pdu} ``ADV_IND``. Dieser ist notwendig damit eine Verbindung mit dem Beacon zur erneuten Programmierung hergestellt werden kann. Auch der Advertising-Name des Beacons wird in diesem Modus wieder mit ausgesendet. ### scPower -Zur Umsetzung eines selbst korrigierenden Systems müssen die Bluetooth-Beacon sowohl als Scanner wie auch als Advertiser fungieren. Im Versuchsmodus Scannen die Beacon hierzu, parallel zum aussenden der Advertising-Pakete, auf solche Pakete von den anderen beiden Beacon. Abbildung \ref{fig:selfkorrekting} zeigt den Ablauf des selbst korrigierenden Systems bei dem Beacon 5b5b ein Advertising Paket aussendet, welches von den Beacon 690f und 9d31 empfangen und verarbeitet wird. Die Beacon 690f und 9d31 speichern den \ac{rssi}-Wert des Empfangenen Pakets von Beacon 5b5b als $scPower$ in ihrem Advertising-Pakete und senden dieses aus. Bei jedem erneuten Empfang eines Advertising-Pakets von Beacon 5b5b wird die $scPower$ aktualisiert. +Zur Umsetzung eines selbst korrigierenden Systems müssen die Bluetooth-Beacon sowohl als Scanner wie auch als Advertiser fungieren. Im Versuchsmodus scannen die Beacon hierzu, parallel zum Aussenden der Advertising-Pakete, nach solche Paketen von den anderen beiden Beacon. Abbildung \ref{fig:selfkorrekting} zeigt den Ablauf des selbst korrigierenden Systems bei dem Beacon 5b5b ein Advertising-Paket aussendet, welches von den Beacon 690f und 9d31 empfangen und verarbeitet wird. Die Beacon 690f und 9d31 speichern den \ac{rssi}-Wert des Empfangenen Pakets von Beacon 5b5b als $scPower$ in ihrem Advertising-Paket und senden dieses aus. Bei jedem erneuten empfang eines Advertising-Pakets von Beacon 5b5b wird die $scPower$ aktualisiert. ## Smartphone -Als Smartphone für die Messungen kommt ein OnePlus 7t mit Android-Betriebssystem in der Version 11 zum Einsatz. Für die Anwendungsentwicklung wird die \ac{ide} Android Studio verwendet. Als Programmiersprache wurde Kotlin gewählt und die Smartphone Anwendung als Bluetooth-Scanner umgesetzt. Über die Benutzeroberfläche, zu sehen in Abbildung \ref{fig:appfrontend}, müssen 4 Eingabefelder vor dem Versuchsstart durch den Anwender ausgefüllt werden. Der Test Name dient dazu, die Testdaten bei der Auswertung zu identifizieren, er dient auch als Dateiname für die gespeicherten Daten. In den weiteren drei Feldern wird die, für den durchgeführten Versuch, real gemessene Entfernung zwischen Smartphone und dem jeweiligen Beacon notiert. Sollten ein oder mehrere Beacon im durchgeführten Versuch keine relevanz haben, so muss hier eine 0 eingetragen werden. Über den Start/Stop-Button am unteren Bildschirmrand der Anwendung wird die Aufzeichnung gestartet. Nach dem Start können die Empfangenen Daten im oberen Bildschirmbereich zur Funktionsüberprüfung eingesehen werden. Diese Daten Aktualisieren sich automatisch mit jedem empfangenen Advertising-Paket. +Als Smartphone für die Messungen kommt ein OnePlus 7t mit Android-Betriebssystem in der Version 11 zum Einsatz. Für die Anwendungsentwicklung wird die \ac{ide} Android Studio verwendet. Als Programmiersprache wurde Kotlin gewählt und die Smartphone-Anwendung als Bluetooth-Scanner umgesetzt. Über die Benutzeroberfläche, zu sehen in Abbildung \ref{fig:appfrontend}, müssen 4 Eingabefelder vor dem Versuchsstart durch den Anwender ausgefüllt werden. Der Testname dient dazu, die Testdaten bei der Auswertung zu identifizieren, er dient auch als Dateiname für die gespeicherten Daten. In den weiteren drei Feldern wird die, für den durchgeführten Versuch, real gemessene Entfernung zwischen Smartphone und dem jeweiligen Beacon notiert. Sollten ein oder mehrere Beacon im durchgeführten Versuch keine Relevanz haben, so muss hier eine 0 eingetragen werden. Über den Start/Stop-Button am unteren Bildschirmrand der Anwendung wird die Aufzeichnung gestartet. Nach dem Start können die empfangenen Daten im oberen Bildschirmbereich zur Funktionsüberprüfung eingesehen werden. Diese Daten aktualisieren sich automatisch mit jedem empfangenen Advertising-Paket. -![Screenshot der Smartphone-Testanwendung: Bluetooth Advertising Logger. \label{fig:appfrontend}](../static/appfrontend.jpg){ height=600px } +![Screenshot der Smartphone-Testanwendung: Bluetooth Advertise Logger. \label{fig:appfrontend}](../static/appfrontend.jpg){ height=600px } -Beim Empfang eines Advertising-Pakets wird geprüft, ob das Paket von einem der Beacon versendet wurde. Hierzu wird zunächst nach der \ac{uuid} gefiltert und anschließend nach den \ac{mac}-Adressen der drei Beacon. Ist das Paket von einem der Beacon, so werden die Daten des Advertising-Pakets in einer Textdatei, mit dem Test Namen als Dateinamen, auf dem Smartphone abgelegt. Die Daten werden im \ac{csv}-Format gespeichert, dabei sind die einzelnen Spalten mit Hilfe eines Kommas voneinander getrennt. In Tabelle \ref{tab:datastore} werden die Spalten aufgelistet und ihr Inhalt kurz erläutert. +Beim Empfang eines Advertising-Pakets wird geprüft, ob das Paket von einem der Beacon versendet wurde. Hierzu wird zunächst nach der \ac{uuid} gefiltert und anschließend nach den \ac{mac}-Adressen der drei Beacon. Ist das Paket von einem der Beacon, so werden die Daten des Advertising-Pakets in einer Textdatei, mit dem Testnamen als Dateinamen, auf dem Smartphone abgelegt. Die Daten werden im \ac{csv}-Format gespeichert, dabei sind die einzelnen Spalten mit Hilfe eines Kommas voneinander getrennt. In Tabelle \ref{tab:datastore} werden die Spalten aufgelistet und ihr Inhalt kurz erläutert. | Spalte | Beschreibung | | --------- | ----------------------- | -| Time | Empfangszeitpunkt als Unix Zeitstempel | +| Time | Empfangszeitpunkt als Unix-Zeitstempel | | Test | Benutzerdefinierter Name des durchgeführten Tests | | Device | \ac{mac}-Adresse des Beacon | | RSSI | Vom Smartphone ermittelter \ac{rssi}-Wert | -| 5b5b_dist | Benzuterdefinierte, gemessene Distanz des Beacon 5b5b | -| 5b5b_rssi | Ermittelte $scPower$ des Beacon 5b5b | -| 690f_dist | Benzuterdefinierte, gemessene Distanz des Beacon 690f | -| 690f_rssi | Ermittelte $scPower$ des Beacon 690f | -| 9d31_dist | Benzuterdefinierte, gemessene Distanz des Beacon 9d31 | -| 9d31_rssi | Ermittelte $scPower$ des Beacon 9d31 | +| 5b5b_dist | Benutzerdefinierte, gemessene Distanz des Beacons 5b5b | +| 5b5b_rssi | Ermittelte $scPower$ des Beacons 5b5b | +| 690f_dist | Benutzerdefinierte, gemessene Distanz des Beacons 690f | +| 690f_rssi | Ermittelte $scPower$ des Beacons 690f | +| 9d31_dist | Benutzerdefinierte, gemessene Distanz des Beacons 9d31 | +| 9d31_rssi | Ermittelte $scPower$ des Beacons 9d31 | : Spaltenübersicht der gespeicherten \ac{csv}-Datei bei aktiver Messung. \label{tab:datastore} ## Auswertung -Die Auswertung der Testmessungen wurd auf dem Computer und nicht auf dem Smartphone durchgeführt. Dies erlaubt es auch im Nachhinein, mit ein und der selben Messung unterschiedlichste Modelle zu betrachten. Außerdem müssen Messungen nicht wegen eventueller Programmierfehler wiederholt werden. +Die Auswertung der Testmessungen wird auf dem Computer und nicht auf dem Smartphone durchgeführt. Dies erlaubt es auch im Nachhinein, mit ein und der selben Messung unterschiedlichste Modelle zu betrachten. Außerdem müssen Messungen nicht wegen eventueller Programmierfehler wiederholt werden. Als Programmiersprache kommt Python zum Einsatz. Python bietet eine Vielzahl an Bibliotheken zur Arbeit mit großen Datenmengen und zur wissenschaftlichen Auswertung. Tabelle \ref{tab:libraries} zeigt eine Auflistung der eingesetzten Bibliotheken und eine kurze Beschreibung. -# Testaufbau +| Library | Bedeutung | +| -------- | ---------- | +| | | +: Verwendete Python libraries zur Auswertung der Messdaten. \label{tab:libraries} + +# Versuchsaufbau Dieses Kapitel beschreibt den Versuchsaufbau. Er orientiert sich an den zuvor behandelten Anforderungen. Dabei liegt der Fokus auf einem Aufbau der leicht nachzubildenden ist und dabei ein hohes maß an Genauigkeit ermöglicht. @@ -390,8 +395,9 @@ Um eine Konstante Messung zu gewährleisten werden die Beacon mittig auf den Ref Da die Anordnung der Antennen gerade im Smartphone nicht bekannt sind, wird die Entfernung zwischen den Beacon und dem Smartphone immer von der Mitte der Geräte gemessen. +# Versuchskorrektur -# Messauswertung +# Versuchsauswertung # Ergebnisse