\subsubsection{Beschleunigs- und Drehratendaten} Die Daten zur Beschleunigung und zu den Drehraten sind nicht direkt abrufbar, weil diese in ihrer einzelnen Form keinen Vorteil für den Betrieb des Rovers bieten. Sollten diese Daten doch benötigt werden, muss zunächst das Objekt des Sensors übergeben werden, damit dann direkt auf die Daten zugegriffen werden kann. \par Die Daten aus der Sensorfusion sind sehr hilfreich bei der Bestimmung der Ausrichtung des Rovers, deshalb werden diese direkt verfügbar gemacht. Die Funktion gibt ein Array mit drei Zahlen vom Type \mintinline{c++}|float| zurück, welche die drei Winkel Roll, Nick und Gier im Bogenmaß darstellen. In Abbildung \ref{fig:rpy} sind die Winkel dargestellt, allerdings werden dort die, mehr verbreiteten, englischen Begriffe genutzt: yaw, pitch und roll. \begin{figure}[H] \centering \includegraphics[]{RPY.png} \caption{Roll, Nick und Gier Winkel \cite{wikiRoll}} \label{fig:rpy} \end{figure} \subsection{Lage- und Beschleunigungssensor} Der letzte Teilnehmer am I2C-Bus wird vom dieser Bibliothek verwaltet. Zur Verwaltung stehen diverse Funktionen zur Verfügung, davon werden einige hier genannt: \begin{itemize} \item einstellen des Interrupts \item Selbsttest \item verwalten der FIFO \item I2C Multi-Controller \item I2C Targets \item Energieoptionen \item DMP Konfiguration. \end{itemize} Wenn die Rohwerte der einzelnen Sensoren ausgelesen werden sollen, greift die Bibliothek beispielsweise auf die in der Tabelle \ref{tab:mpuRegister} beschriebenen Register zu. Allerdings sind diese Rohwerte nur selten für den Anwender wichtig. Meistens werden die vom DPM berechneten Werte benötigt. \cite{gyroLib} \begin{table}[ht] \centering \caption{Auszug Datenregister des MPU600 \cite{registerMPU600}} \begin{tabular}{|c|c|c|} \hline \textbf{Register (Hex)} & \textbf{Bits} & \textbf{Beschreibung} \\ \hline 0x3B & [15:8] & X-Achse Beschleunigung \\ \hline 0x3C & [7:0] & \\ \hline 0x3D & [15:8] & Y-Achse Beschleunigung \\ \hline 0x3E & [7:0] & \\ \hline 0x3F & [15:8] & Z-Achse Beschleunigung \\ \hline 0x40 & [7:0] & \\ \hline 0x41 & [15:8] & Temperatur \\ \hline 0x42 & [7:0] & \\ \hline 0x43 & [15:8] & X-Achse Lage \\ \hline 0x44 & [7:0] & \\ \hline 0x45 & [15:8] & Y-Achse Lage \\ \hline 0x46 & [7:0] & \\ \hline 0x47 & [15:8] & Z-Achse Lage \\ \hline 0x48 & [7:0] & \\ \hline \end{tabular} \label{tab:mpuRegister} \end{table} \subsubsection{Lage- und Beschleunigungssensor} Für ein Szenario in dem der Rover sich um einen absolut bestimmten Wert drehen soll, wurde dieser Sensor verbaut. Dabei handelt es sich um ein Modul von AZ-Delivery mit dem Namen GY-521. Auf diesem Modul befindet sich ein MPU600 Chip. Der MPU600 besteht aus einem Beschleunigungs- und einem Lagesensor. Es ist zusätzlich ein Temperatursensor verbaut, dieser dient dazu die ausgelesenen Werte an die aktuellen Umweltbedingungen anzupassen. \par Die analogen Werte der Sensoren werden mit einem 16bit ADC eingelesen und auch mit zwei Byte in den Registern gespeichert. \par Das Modul ist selbst in der Lage als I2C Controller agieren. Dafür sind weitere Pins nach außen geführt, um an diesen Beispielweise ein Kompass-Modul oder einen Luftdrucksensor anschließen zu können. Die Daten dieser Sensoren könnten der ausgeführten Sensorfusion hinzugefügt werden. \par Die Sensorfusion wird von einem Digital Motion Processor (DMP) ausgeführt. Die Verwendung des DMP bringt einige Vorteile: \begin{itemize} \item Auslesen der Ergebnisse unabhängig von den internen Messungen \item Weniger Rechenzeit auf dem Hauptprozessor \item Energieeffizienter, da die Berechnungen zum Teil in Hardware umgesetzt sind \item Keine eigene Implementierung, Fehlervermeidung \end{itemize} Die Messungen werden bei diesem Modul klassischerweise mit 200Hz ausgeführt. Es ist möglich die gemessenen Werte in 1024 Byte großen FIFO zwischen zu speichern, um keine Werte zu verlieren oder diese in großen Mengen auszulesen. \cite{dataMPU600}