\documentclass{scrartcl}% siehe <http://www.komascript.de>
\usepackage{selinput}% Eingabecodierung automatisch ermitteln …
\usepackage{hyperref}
\SelectInputMappings{% … siehe <http://ctan.org/pkg/selinput>
  adieresis={ä},
  germandbls={ß},
}
\usepackage[ngerman]{babel}% Das Beispieldokument ist in Deutsch,
                % daher wird mit Hilfe des babel-Pakets
                % über Option ngerman auf deutsche Begriffe
                % und gleichzeitig Trennmuster nach den
                % aktuellen Rechtschreiberegeln umgeschaltet.
                % Alternativen und weitere Sprachen sind
                % verfügbar (siehe <http://ctan.org/pkg/babel>).
                
\setlength{\parskip}{0.2cm}  % 2mm Abstand zwischen zwei Absätzen
\setlength{\parindent}{0mm}  % Absätze nicht einziehen


\begin{document}
% ----------------------------------------------------------------------------
% Titel (erst nach \begin{document}, damit babel bereits voll aktiv ist:
\titlehead{AMR}% optional
\subject{Projektbericht}% optional
\title{Autonome Mobile Roboter}% obligatorisch
%\subtitle{Untertitel}% optional
\author{Florian Zirker, Lukas Arnecke}% obligatorisch
%\date{z.\,B. der Abgabetermin}% sinnvoll
\publishers{Prof. Dr. Thomas Ihme}% optional
\maketitle% verwendet die zuvor gemachte Angaben zur Gestaltung eines Titels
% ----------------------------------------------------------------------------
% Inhaltsverzeichnis:
\tableofcontents
% ----------------------------------------------------------------------------
% Gliederung und Text:

\section{TODO}
\begin{itemize}
	\item Roboter überarbeiten, Passwörter und ähnliches löschen!
	\item Wlan Zugänge löschen (Nur mit passender Karte nutzbar)
	\item SSH Keys löschen (check)
	\item Passwörter im Browser löschen (check)
\end{itemize}
\section{Notizen}
Genutzte Version: ROS Melodic unter Ubuntu 18.04

nomodeset 1, Dadurch im BIOS Auflösung 1280x1024 eingestellt. Kein Bild, wenn ein Monitor diese Auflösung nicht darstellen kann. Lösung davon ist flashen des BIOS. Andere Einstellungsmöglichkeit wäre sinnvoll.

Kinect: ttyUSB0

Catkin Workspace Source muss nicht hinzugefügt werden. Steht in der bash.rc, wird direkt beim Starten hinzugefügt.

MotorState wird nicht mehr benötigt. ist im pioneerMasterLaunchFile.launch konfiguriert.

rosrun joy joy\_node wird ebenfalls nicht benötigt, vom Launscript mitgestartet.

In sicktoolbox und sicktoolbox\_wrapper properties ändern. Muss mit C++ Version 11 compiliert werden. Aktuell ist C++ Version 17.

catkin\_make und catkin\_make install muss jedes mal bei Änderungen gemacht werden. pioneerMasterLaunchFile wird dabei kopiert.

Gruppe dialout zuordnen, sollte funktionieren. Alter Port war tty0

Verweis geändert auf Unterordner /launch/. Dateien wurden seit dieser Version in den Unterordner verschoben, Verweise stimmen noch nicht.

Mapping erstellt Pixelkarte. Kann abgespeichert und nachbearbeitet werden. Rosbag kann zum Speichern der Informationen genutzt und dann nachträglich bearbeitet werden.

\subsection{Überblick}
p2os\_urdf: 3D Darstellung. Hier sind alle Anbauteile und Gelenke mit Koordiantensystem angegeben. Der Roboter nutzt diese, um Informationen auf sein zentrales Koordinatensystem umzurechnen, gleichzeitig kann es zur Simulation genutzt werden.

p2os\_teleop: Nutzung mit Joystick, Controller oder Tastatur

p20s\_launch: Hier liegen die Launchfiles. Auch die Treiber können von hier aus gestartet werden. Dabei wird direkt der Master mit gestartet.

rosparam set p2os/port [PORT] zum Setzen des Ports.

Versuchte Ports: 
\begin{itemize}
	\item ttyS0
	\item ttyS1
	\item ttyUSB0
\end{itemize}

\section{Befehle}

\begin{itemize}
	\item roscore \&
	\item rosrun joy joy\_node
	\item roslaunch p2os\_launch pioneerMasterLaunchFile.launch \&
	\item rostopic pub /cmd\_motor\_state p2os\_msgs/MotorState \"state: 1"
	\item roslaunch p2os\_launch gmapping.launch \&
\end{itemize}
MotorState wird nicht mehr benötigt. ist im pioneerMasterLaunchFile.launch konfiguriert.

rosrun joy joy\_node wird ebenfalls nicht benötigt, vom Launchscript mitgestartet.

Neu nach kopieren des MasterLaunch files:
\begin{itemize}
	\item roscore \&
	\item roslaunch wlan\_pioneer pioneerMasterLaunchFile.launch
\end{itemize}
Joystick muss an sein, bevor der Node gestartet wird.

Das eigene Launchfile wird weiter bearbeitet, um alle nötigen Teile zu starten. Optionales Starten 

\subsection{Möglichkeiten WLAN}
Mögliche Anzeigen pro Punkt: Neustes Signal, Stärkstes, Schwächstes, Durchschnitt, Median. Evtl als Parameter?

dBm: Logarithmische Skala, misst die Signalstärke in Watt(?). Werte kleiner 0 bedeuten Signalstärken kleiner 1.

Launchfile: Value der Parameter muss noch überarbeitet werden. Aktuell gehen beide Wlan Signale auf denselben Stick, soll nicht so bleiben.

\subsection{Rosbag}
\textbf{Rosbag Datei erstellen:}
\begin{itemize}
	\item Ordner anlegen, in dem die Datei gespeichert werden soll
	\item Roboter und alle benötigten topics starten
	\item in den Ordner navigieren, der oben angelegt wurde
	\item rosbag record -O subset *hier Topics durch Leerzeichen getrennt angeben* (Kann subset umbenannt werden?)
	\item Aufzeichnung durch ctrl+c beenden
\end{itemize}
Topics: /pose /tf /base\_scan /wlan\_signal

\textbf{Rosbag in RVIZ:}
\begin{itemize}
	\item roscore
	\item rosparam set use\_sim\_time true
	\item roslaunch p2os\_launch gmapping.launch
	\item rosrun rviz rviz
	\item rosbag play datei.bag --clock
	\item rosrun map\_server map\_saver
\end{itemize}
Wird unter dem Pfad der .bag Datei als map.pgm und map.yaml gespeichert. Ist im Grunde ein Bild, wäre das Endergebnis wenn die Heatmap mit enthalten ist.

In RViz muss die Map by topic hinzugefügt werden. gmapping muss laufen.

\section{Zeitdoku}
\subsection{05.11.2018}
Betriebssystem neu installiert. Genutzt wird Ros Melodic unter Ubuntu 18.04 LTS.

Memo: Nicht immer die neuste Version nutzen. Viele unnötige Probleme, da Bibliotheken noch nicht für Melodic vorhanden sind und daher selbst gebaut und konfiguriert werden müssen.

\subsection{13.11.2018}
Pioneer kann jetzt bewegt werden. Launchfiles mussten angepasst werden, Dateien wurden teilweise in andere Unterordner verschoben.

\subsection{19.11.2018}
Kartographierung funktioniert grundlegend. gmapping und gslam sind installiert und konfiguriert. Als leer gekennzeichnete Fläche bleibt leer, wenn man ein Hindernis nachträglich hinstellt. Entfernt man ein Hindernis, wird die Fläche bei nochmaligem Scannen als Leer gekennzeichnet.

\subsection{26.11.2018}
Git auf Pioneer installiert. So können die Projekte zuhause gebaut und dann vor Ort direkt verwendet werden. gmapping wurde eingestellt. Nachfolger ist vermutlich karthographer von Google. Bleiben erstmal bei gmapping, maximal wenn alles läuft mal schauen.

\subsection{27.11.2018}
WLan Node umgebaut. Greift jetzt direkt auf den Socket zu und holt sich von da die Daten. Abspielen der gespeicherten Fahrt funktioniert, roslaunch muss jedoch abgeschaltet sein. Rviz scheint den Roboter zu priorisieren, Daher wird die Map nicht neu erstellt beim Abspielen der Datei.

\subsection{03.12.2018}
Wlan Antennen sind bestellt, sollten am Mittwoch da sein. Doch vergessen, hoffentlich trotzdem bis Montag da.

Eigenes Launchfile erweitert. Jetzt mit optionalem Rosbag. Wird über Parameter angesprochen, soll nicht immer gestartet werden. Datei ist bei knapp 1 Minute 6 mb groß.

\subsection{04.12.2018}
Befehle zum Speichern der Map gefunden und ausprobiert. Aufteilung des Projektes, andere Gruppe macht autonome Steuerung. Aktuell nehmen wir den Controller, Ziel ist es, deren Karte zu nutzen, bei der die Strecke vorgegeben ist. Diese Strecke wird dann abgefahren und die Wlan Abdeckung geprüft.

\subsection{11.12.2018}
Eduroam und die beiden HSMA Netze laufen unter derselben Frequenz und Signalstärke. Dadurch, dass die Menge an Geräten für Eduroam begrenzt ist nutzen wir zum Scannen eines der anderen Netze, voraussichtlich das VPN Netz.

Speichern der Map funktionierte mit der Beispieldatei, scheint ein Problem unserer .bag Datei zu sein. Müssen nächstes Mal nochmal aufzeichnen.

\subsection{17.12.2018}
Eigene Map kann gespeichert werden. Fehler war, dass die zuordnung scan:=base\_scan bei unserer Aufzeichnung nicht benötigt wird und sogar Fehler produziert. Ohne diese Zuordnung funktioniert die Aufzeichnung und das Speichern.

Wlan Stärken können aufgezeichnet werden, bei dem im Launchfile sudo übergeben ist und der Node so mit sudo Rechten gestartet wird.

Ziel für heute ist das Starten des aktuellen Stands auf dem Roboter aufzeichnen einer neuen .bag Datei. Danach soll aus dieser Datei die Map inklusive Heatmap aufgezeichnet werden.

Probleme, die Signalstärke aus dem Launchfile zu bekommen. Bei einer Probefahrt zeigte sich, dass ca alle 700 Sekunden die Verbindung abbricht und direkt wieder kommt. Kann an der verbauten Wlan Karte liegen.

Alternatividee, die Karte nicht nachzubauen sondern direkt aus der Fahrt abzuspeichern.

\subsection{07.01.2019}
Robotik system toolbox von matlab versteht ROS. Ziel ist jetzt, eine .csv zu erstellen mit X- und Y- Koordianten und der Signalstärke.

\subsection{08.01.2019}
csv Datei kann in Matlab eingelesen werden. Da die Position jedoch ausschließlich auf Odometrie beruht gibt es hier so starke Abweichungen, dass diese Daten nicht zu benutzen sind.

Ergebnisbild kann in den Bericht eingefügt werden. Ihme will zu Demozwecken eine csv Datei und das Ergebnisbild. So kann man gut zeigen, wie viel Einfluss Odometrie hat.

Eine weitere Möglichkeit ist eventuell, einen Knoten zu schreiben, der auf gmapping zugreift und die genaue Position aus gmapping veröffentlicht. Dieser Wert kann dann für die Bearbeitung genutzt werden, wenn er genau genug ist. Ob das zeitlich noch machbar ist muss geklärt werden.

Matlab benötigt ',' als Trennzeichen. Auch darf die genutzte Tabelle keine Beschriftung haben.

gmapping sollte beim fahren mitlaufen. Dadurch wird die Position genauer bestimmt. Genutzt wird dann nicht /odom sondern /base\_link. Das alte bagfile wurde nochmal abgespielt mit gmapping und dieser Ablauf nochmals abgespeichert. So werden die überarbeiteten Positionsdaten gespeichert.


\subsection{14.01.2019}
/tf enthält Korrekturvektoren, wodurch die Koordianten von /pose auf die eigentliche Postion zeigen. Enthält zwei Baumstrukturen: map -> odom -> base\_link und odom -> base\_link -> laser. Relevant ist hier nur die erste Struktur, die andere wird verworfen.

Koordinaten können nicht einfach addiert werden. Die jeweilige Rotation hat noch Einfluss, muss ebenfalls einbezogen werden. Diese Berechnungen sind zu aufwändig, um sie selbst in Python zu schreiben. Versuch, die transformierten Werte direkt von /tf oder einer Bibliothek berechnen zu lassen.

Plot als Scatterplot in Matlab scheint bisher am sinnvollsten.

\subsection{15.01.2019}
Scatterplot gibt den Graphen entsprechend eingefärbt. Wirklich erkennbar sind nur 2 Farben, vermutlich liegt es daran, dass die gemessenen Signalstärken immer eher stark sind. Fällt das Signal mal ab verbindet der Roboter sich mit einem neuen Router und hat weiterhin ein starkes Signal. Diese Messung ist vermutlich in den Randbereichen deutlich interessanter.

Eigene Farbvorlage ist erstellt, kann auch über colormapeditor aufgerufen und bearbeitet werden. Anzeige geht jetzt nach Ampelsystem. Speichern der Colormap funktioniert nicht. So muss zu Beginn der Editor aufgerufen und alle Zuordnungen gelöscht werden. Dann benötigt man nur 3 Punkte, Ganz links einen grünen, in der Mitte einen gelben und am Ende einen Roten. Die Farbübergänge werden vom Editor ausgefüllt. Aktuell doch Jet als Farbskala.

Bilder sind generiert, jeweils 2,4G und 5G für die Karte vom 17.12 und 18.12.

\subsection{16.01.2019}
Anpassung der Bilder für die iExpo mit Gimp. Hierfür werden zwei Karten zusammengefügt, da auf einer Karte der Gang und auf der anderen die Räume gut kartiert sind. Es werden 2 Bilder erstellt, eines für das 2,4G Netz und eines für das 5G Netz. Gedruckt werden sollen 2 Seiten, jeweils eine pro Bild und unter jedem Bild noch die genutzte Farbskala (Jet).

\section{genutzte Links}
\begin{itemize}
	\item \url{http://wiki.ros.org/p2os/Tutorials/Getting%20Started%20with%20p2os}
		\item \url{http://wiki.ros.org/p2os_driver}
		\item \url{http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics}
		\item \url{https://cmake.org/cmake/help/v3.1/prop_tgt/CXX_STANDARD.html}
		\item \url{http://wiki.ros.org/amcl}
		\item \url{https://github.com/ros-perception/slam\_gmapping}
		\item \url{https://github.com/ros-perception/openslam\_gmapping}
		\item \url{https://answers.ros.org/question/93986/combining-amcl-gmapping-odometry/}
		\item \url{http://wiki.ros.org/rtabmap_ros/Tutorials/WifiSignalStrengthMappingUserDataUsage}
		\item \url{http://wiki.ros.org/rosbag/Tutorials/Recording%20and%20playing%20back%20data}
		\item \url{https://answers.ros.org/question/72202/how-to-playback-pointcloud-in-rviz-which-was-recorded-using-rosbag/}
		\item \url{http://wiki.ros.org/slam_gmapping/Tutorials/MappingFromLoggedData}
		\item \url{http://wiki.ros.org/slam_gmapping/Tutorials/MappingFromLoggedData#record}
		\item \url{https://answers.ros.org/question/228676/exclude-some-topics-from-rosbag-play/}
		\item \url{http://wiki.ros.org/map_server}
		\item \url{https://de.mathworks.com/help/robotics/examples/work-with-rosbag-logfiles.html}
		\item \url{https://de.mathworks.com/help/robotics/ref/rosbag.html}
		\item \url{https://www.dis.uniroma1.it/~nardi/Didattica/CAI/matdid/robot-programming-ROS-introduction-to-navigation.pdf}
		\item \url{https://de.mathworks.com/help/matlab/ref/colormap.html}
		\item \url{https://de.mathworks.com/matlabcentral/answers/229286-saving-edited-colormap-data}
		\item \url{https://stackoverflow.com/questions/44994059/how-to-save-a-custom-colormap-and-use-it-again-in-matlab}
	\end{itemize}

\end{document}
