Eine moderne Hochschule ist auf eine funktionierende Netzwerkinfrastruktur angewiesen. Dazu gehört auch eine möglichst vollständige WLAN-Abdeckung, damit sowohl Studenten als auch Dozenten und Mitarbeiter ihre jeweiligen Aufgaben erfüllen können auch wenn sie sich nicht an einem fest installierten Rechner befinden.
Um genau diese WLAN-Abdeckung zu prüfen und eventuelle Lücken konkret aufzeigen zu können gab es im Rahmen der Vorlesung \textit{Autonome Mobile Roboter (AMR)} das Projekt, die Signalstärke mithilfe eines Roboters flächendeckend aufzeichnen zu können.
Zu diesem Zweck wurde auf einem Pioneer 3-DX die benötigte Hard- und Software installiert, um sowohl die eigene Position, als auch die Signalstärke des WLANs an diesem Punkt aufzuzeichnen.
Es ist uns gelungen, die Signalstärke des Eduroam Netzwerkes aufzuzeichnen und zu visualisieren. Die aufgezeichneten Werte zeigen, dass es möglicherweise sinnvoll wäre, zumindest in den Vorlesungsräumen ausreichend starke Router zu installieren, um dort die Verfügbarkeit von beispielsweise Vorlesungsunterlagen zu gewährleisten. Dieses Projekt ist aber mehr als Proof of Concept zu verstehen, weshalb es für eine genauere Aussage wichtig wäre, das gesamte Gebäude abzufahren, um eine flächendeckende Aussage treffen zu können.
Der mobile Forschungsroboter Pioneer 3-DX ist eine Roboterplattform, die für fast alle Anwendungen modifizierbar ist. Er besteht im Grunde nur aus einem Motor, Reifen und einer Plattform, durch die benötigte Module angebracht werden können \cite{pioneer}. Die Steuerungseinheit ist so gebaut, dass sie über das \textit{Robot Operating System} (ROS) angesprochen werden kann.
Auf der Plattform ist ein Laser, ein Wlan-Modul und eine Rechner aufgebaut, mit deren Hilfe die Kartierung durchgeführt wird. Auf dem Rechner läuft Ubuntu 18.04 LTS, auf welchem wiederum ROS in der Version Melodic installiert ist.
\textit{ROS} ist ein Open Source Framework, welches speziell für auf die Nutzung für autonome Systeme entwickelt wurde. Die Idee von ROS ist die Bereitstellung von wiederverwendbaren Modulen, von denen jedes eine eigene Aufgabe erfüllen kann und die beliebig kombiniert werden können. Um die Module auch gut wiederverwenden zu können bietet ROS durch seine Paketverwaltung die Möglichkeit, von der Hardware zu abstrahieren. Es gibt dann ein Paket, welche für die Ansteuerung der Hardware zuständig ist und die dann über eine Steuerungseinheit wie ein Gamepad oder einen joystick angesteuert werden kann \cite{rosIntro}.
Für ein möglichst einfaches Management liefert ROS eine eigene Paketverwaltung, mit der die benötigten Pakete nachinstalliert werden können. Ein Paket enthält unter Anderem den Quellcode und Launchfiles für die \textit{Nodes}, in denen die Berechnungen stattfinden \cite{rosIntro2}. Jeder Node ist für andere Berechnungen zuständig, so gibt es einen Node für die Koordinatentransformationen zwischen den einzelnen Bauteilen des Roboters, einen für den Laserscanner, einen für die Berechnung der WLAN-Signalstärke und einen für die Ansteuerung des Motors.
Die Kommunikation zwischen Nodes, wie in läuft über ein Publisher/Subscriber Prinzip, das bedeutet, dass ein Node, wie in Abbildung \ref{concept} dargestellt, definierte Informationen über einen \textit{Topic} veröffentlicht. Diese Topics können wiederum von anderen Nodes abgegriffen und weiter verarbeitet werden. Die enthaltenen Informationen werden über \textit{Messages} ausgetauscht, wodurch sowohl die Struktur als auch der Inhalt klar definiert sind. Alle Nodes müssen sich bei dem \textit{Master}, dem Namens- und Registrierungsservice innerhalb der ROS Umgebung, registrieren, um sich gegenseitig zu finden und dann auch Daten austauschen zu können \cite{rosKonzept}.
\begin{figure}
\centering
\includegraphics{bilder/ROS_concepts.png}
\caption{Schematischer Aufbau der Kommunikation \cite{rosKonzept}}
Für die Kartierung bietet ROS das Package \textit{gmapping}, wenn die Karte mithilfe eines Lasermoduls erstellt werden soll. Dieses Package bietet die Funktionalität, um eine laserbasierte Karte mithilfe des Systems \textit{Simultaneous Localization and Mapping} (SLAM) zu erstellen. Hierbei wird eine 2D Karte aus der Kombination von den Laserdaten und der vermuteten eigenen Position erstellt. Die Daten über die eigene Position kommen aus den Odometriedaten, also der vermuteten Bewegungsrichtung und -distanz anhand der Bewegungen der Räder. Der Node \textit{slam\_gmapping} subscriped die Topics \textit{tf} und \textit{scan}, aus denen es dann die Karte berechnet und unter dem Topic map veröffentlicht. \cite{gmap}. Die Abschätzung des Drehwinkels um die eigene Achse durch Odometrie ist vergleichsweise ungenau, weshalb es zu fehlerhaften Karten kommen kann, wenn der Roboter während der Kartierung zu viele Kurven fährt. Der Abgleich mit den Laserdaten wirkt diesem Effekt entgegen, bei einem erneuten Abfahren des Bereiches können entstandene Verschiebungen erkannt und behoben werden.
Im Rahmen des Projektes gibt es verschiedene Problemstellungen, welche zwar aufeinander aufbauen, jedoch trotzdem in sich abgeschlossene Vorgaben beinhalten.
Der Stand des Roboters vor Beginn des Projektes war, dass auf dem aufgebautem Rechner Ubuntu 14.04 LTS installiert war, auf dem wiederum ein Dockersystem lief. ROS lief dann unter Docker, wodurch verschiedene Konfigurationen parallel auf einem Roboter genutzt werden konnten. Da die ROS Version sich mit der Ubuntuversion ändert lief hier entsprechend auch ROS Indigo.
Ziel ist es, auf eine neuere ROS Version umzusteigen, um auch neu implementierte Funktionen nutzen zu können. Daher muss neben ROS auch Ubuntu neu installiert und in diesem Zuge geprüft werden, ob an dem Ansatz mit Docker festgehalten wird.
\subsection{Kartierung}
Das neu installierte System soll eine Karte aus dem abgefahrenen Gebiet erstellen und diese anzeigen können. Hierbei sollte beachtet werden, dass die Karte sowohl durch manuelles Fahren erstellt werden kann, als auch eine bereits bestehende Karte hinterlegt werden kann, um dann nach dieser eine vorgegebene Strecke abzufahren. Im Hinblick auf das eigentliche Thema, das Kartieren der WLAN Signalstärke, liegt der Schwerpunkt jedoch entsprechend nicht auf der Umgebungskartierung.
\subsection{WLAN-Messung}
Neben der 2D Karte auf dem vorherigen Kapitel soll auch das WLAN kartografiert werden. Hierbei soll die Signalstärke für ein angegebenes Netz synchronisiert auf die aktuelle Position des Roboters aufgezeichnet werden.
Desweiteren soll eine Möglichkeit gefunden werden, die erhobenen Daten als Heatmap auf einer Karte zu visualisieren.
Für das Projekt wurde der Rechner auf dem Roboter komplett neu aufgesetzt. Für ein möglichst modernes System wurde Ubuntu 18.04 LTS installiert, wofür dann ROS in der Version Melodic vorgesehen ist und aus diesem Grund installiert wurde.
Als relevante Aufbauten auf dem Roboter ist als Laserscanner der \textit{Sick LMS-200} sowie als WLAN-Modul der \textit{EDIMAX EW-7811UAC} verbaut. Da der Roboter auch schon für andere Projekte benutzt wurde sind noch weitere Aufbauten bereits auf der Plattform verbaut, da sie aber für dieses Projekt nicht relevant sind wird hier nicht weiter darauf eingegangen.
Wie in Kapitel \ref{kartierung} bereits erwähnt dient das Paket \textit{gmapping} zur Erstellung einer 2D Karte aus einer Kombination von Informationen des Laserscanners und den Bewegungsdaten des Roboters. Diese Karte wird später als Grundlage verwendet, auf welcher dann die Heatmap erstellt wird.
Das Paket \textit{p2os} enthält die Treiber und den Steuerungsnode für die Basis des für den Pioneer 3-DX. Er bildet die Schnittstelle zu der Hardware, wodurch wir uns damit nicht weiter auseinandersetzen müssen \cite{p2os}.
Um die Steuerung des Pioneer auch mit einem Gerät ansprechen zu können liefert das Paket \textit{p2os\_teleop} die Schnittstelle, um den Roboter auch mit einem Controller fahren zu können.
Wir setzen auf ROS. Was wiederum auf dem Betriebsystem sitzt. Wir nutzen das Messaging-System (Publisher/Subscriber). Wir nutzen p2os was wiederum auf ??? nutzt. Wir schreiben unseren eigenen Knoten.
% Wollen wir wirklich in einem Kapitel erklären was für Probleme wir hatten? Ich denke es macht mehr sinn die einzellnen Schritte genauer zu erklären und dann an der entsprechenden Stelle zu erklären was schwierig war. (Siehe folgende Kapitel)
ROS Melodic ist zwar veröffentlicht und für Ubuntu 18.04 vorgesehen, jedoch sind noch nicht alle Funktionen der Vorgängerversionen implementiert. Das führte dazu, dass manche Aufrufe der Launchscripte manuell umgeschrieben und ROS neu kompiliert werden musste.
% Alles veraltet. Vorhergehende Gruppe hat Docker ansazt gewält, nicht mehr lauffähig. Neues Betriebsystem. Neues ROS. Damit einige Probleme: Selbstcompilieren einiger Pakete nötig.
Wie bereits eingangs erwähnt wurde der Rechner des Roboters komplett neu gemacht. Damit das Betriebssystem möglichst lange laufen kann haben wir uns entschieden, Ubuntu 18.04 LTS zu installieren und darauf ROS Melodic aufzusetzen.
Während der Installation von ROS ist uns aufgefallen, dass diese Version noch nicht fertig implementiert ist. Der Code ist auf GitHub veröffentlicht, also konnten wir uns die Pakete herunterladen und manuell kompilieren. Hierbei sind dann Fehler aufgetaucht, dass einzelne Dateien nicht gefunden wurden. Nach einiger dieser Fehlermeldungen ist uns aufgefallen, dass ganze Unterordner von einem Ordner in einen anderen geschoben wurden und daher die Verweise innerhalb des Codes nicht mehr stimmen. Nach dem Anpassen der Dateien auf den neuen Pfad konnten die Pakete dann kompiliert werden.
Als \textit{Simultaneous Localization and Mapping} (SLAM) bezeichnet das ermitteln der eigenen Position bei gleichzeitiger Erstellung der Karte. Daraus ergibt sich das Problem, dass eine Berechnung der eigenen Position ohne Kenntnis der Umgebung sehr schwer möglich ist. Ebenso ist ein Erstellen einer Karte ohne eigene Position ein Problem \cite{slam}. Das ROS Paket \textit{gmapping} nutzt SLAM, um genau dieses Problem zu lösen und eine recht genaue Karte zu erstellen. Dies hat auch bei den ersten Versuchen bereits funktioniert, als einziges Problem sollte man beachten, dass die erstellte Karte bei zu vielen Kurven verzogen ist, da sich durch ein jede Kurve der Einfluss der Odometrie vergrößert und diese fehleranfällig ist.
Um die Karte auch nachträglich erstellen zu können haben wir uns dazu entschieden, die relevanten Messages aufzuzeichnen. Wir haben also eine Rosbag Datei erstellt, in der die Topics \textit{/tf}, \textit{/pose}, \textit{/base\_scan} und \textit{/wlan\_signal} gespeichert werden. Aus dieser Datei kann man auch nachträglich eine Karte erstellen und muss nicht für jeden Versuch bei der Auswertung der Daten neu mit dem Roboter fahren. Auch kann man so die Fahrt auch zuhause simulieren ohne Zugriff auf die Hardware. Der Topic /wlan\_signal ist selbst geschrieben und wir später noch genauer erklärt.
Die von gmapping bereitgestellten Informationen können in \textit{rviz} als Karte visualisert werden. Hierbei kann ausgewählt werden, welche Topics genau dargestellt werden sollen, da nicht alle laufenden Topics der Kartenerstellung dienen sondern auch beispielsweise Steuerungsfunktionen haben.
Es ist uns gelungen, die Signalstärke des WLANs aufzugreifen und auszuwerten. Desweiteren konnten wir die Signale auch auf einer parallel dazu erstellten Karte visualisieren. Zur Erstellung der Karten haben wir die Karte aus dem Map Server von ROS exportiert und eine CSV Datei erstellt, bei der pro Zeitpunkt ein Eintrag geschrieben wird mit den aktuellen Koordinaten des Roboters und der dazugehörigen Signalstärken. Aus dieser Datei wurden dann in Matlab zwei Schaubilder erstellt, eines für die Signalstärke des 2,4G Netzes als Farbskala und eines für die 5G Signalstärke. Als Farbskala haben wir uns für die Jet Skala entschieden, die auch in Abbildung \ref{skala} dargestellt ist.
\caption{Jet Farbskala. Gutes Signal (links) zu schlechtem Signal (rechts)}
\label{skala}
\end{figure}
Als besonderer Punkt ist hier zu sehen, dass etwa in der Mitte des Flurs bei der Karte für das 2,4G Netz ein schlechtes Signal dargestellt wird, während es bei der 5G Karte vergleichsweise gut ist. Im Gegensatz dazu ist das Signal innerhalb des Robotik Labors oben links im Bild bei 2,4G besser ist als bei 5G. Als mögliche Erklärung kamen wir zu dem Schluss, dass 5G zwar eine größere Reichweite hat, von Wänden jedoch auch schneller abgeschwächt wird. So ist es nachvollziehbar, dass der Roboter auf dem Flur ein stärkeres Signal zu einem entfernten Router hat, jedoch in einem anderen Raum stärker abfällt, solange das WLAN Signal durch eine Wand muss.
Die Datenerhebung funktioniert, jedoch kann man gerade in der Nachbearbeitung noch einiges verbessern. So wäre ein Lösung, bei der die Heatmap direkt in rviz angezeigt und dann auch zusammen exportiert werden. Es gibt Ansätze für ein Paket, was genau das können soll, jedoch war dieses zum Zeitpunkt des Projektes nicht lauffähig, weshalb wir einen eigenen Node geschrieben haben.
Ein weiterer Punkt wäre ein Ansatz, mit dem der Roboter ein Gebiet strukturiert und selbstständig abfährt. So könnte man eine vorgefertigte Karte in Flächen einteilen und der Roboter muss in jeder Fläche mindestens einmal gewesen sein. So ist dann eine vollständige Abdeckung gewährleistet und es kann eine durchgängige Heatmap erstellt werden.
Ob es möglich ist, dass der Roboter selbstständig ein Gebiet kartografiert, anschließend diese Karte in Abschnitte unterteilt und abfährt könnte auch getestet werden. Da moderne Saugroboter dies teilweise machen wäre es durchaus vorstellbar.