Archived
- added file for httpapi
- implementation description of route - start with navigation
This commit is contained in:
Vendored
+1
@@ -105,6 +105,7 @@
|
|||||||
"POCI",
|
"POCI",
|
||||||
"Pulsecounter",
|
"Pulsecounter",
|
||||||
"Pulsweitenmodulation",
|
"Pulsweitenmodulation",
|
||||||
|
"radiziert",
|
||||||
"Reely",
|
"Reely",
|
||||||
"Remotedesktop",
|
"Remotedesktop",
|
||||||
"RINEX",
|
"RINEX",
|
||||||
|
|||||||
@@ -122,6 +122,7 @@
|
|||||||
%Anhang
|
%Anhang
|
||||||
\appendix
|
\appendix
|
||||||
\include{110_windowsAndUblox}
|
\include{110_windowsAndUblox}
|
||||||
|
\include{115_httpApi}
|
||||||
\include{120_antennenAuswertung}
|
\include{120_antennenAuswertung}
|
||||||
\include{190_cd}
|
\include{190_cd}
|
||||||
|
|
||||||
|
|||||||
+44
-7
@@ -217,19 +217,56 @@
|
|||||||
Die Implementierung der Routen Verwaltung erfolgt über die \mintinline{c++}|class Route|, welche eine Liste zur Speicherung der Punkte nutzt. Die Punkte sind Instanzen der \mintinline{c++}|class Point|. Es herrscht also eine 1 zu n Beziehung zwischen \mintinline{c++}|class Route| und \mintinline{c++}|class Point|.
|
Die Implementierung der Routen Verwaltung erfolgt über die \mintinline{c++}|class Route|, welche eine Liste zur Speicherung der Punkte nutzt. Die Punkte sind Instanzen der \mintinline{c++}|class Point|. Es herrscht also eine 1 zu n Beziehung zwischen \mintinline{c++}|class Route| und \mintinline{c++}|class Point|.
|
||||||
|
|
||||||
\subsubsection{Postionen mit \mintinline{c++}|class Point|}
|
\subsubsection{Postionen mit \mintinline{c++}|class Point|}
|
||||||
Eine Instanz dieser Klasse besteht unter anderem aus den Koordinaten, welche in dem \mintinline{c++}|struct Coordinates| als zwei \mintinline{c++}|double| Werte gespeichert werden. Zusätzlich kann die Zeit der Erzeugung und die geschätzte Genauigkeit des Punktes angegeben und gespeichert werden. Neben Methoden zur Datenkontrolle und Zugriff wird die Funktionalität dieser Klasse durch diese beiden Funktionen gegeben:
|
Eine Instanz dieser Klasse besteht unter anderem aus den Koordinaten, welche in dem \mintinline{c++}|struct Coordinates| als zwei \mintinline{c++}|double| Werte gespeichert werden. Zusätzlich kann die Zeit der Erzeugung und die geschätzte Genauigkeit des Punktes angegeben und gespeichert werden. Neben Methoden zur Datenkontrolle und Zugriff wird die Funktionalität der Klasse durch diese beiden Funktionen gegeben:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item \mintinline{c++}|double distanceTo(Point);| errechnet die Entfernung zwischen den Koordinaten der Instanz zu dem gegeben Punkt. Für die Berechnung wird die Erdkrümmung vernachlässigt, deshalb kann der Satz des Pythagoras genutzt werden. Dafür muss...
|
\item \mintinline{c++}|double distanceTo(Point);| errechnet die Entfernung zwischen den Koordinaten der Instanz zu dem gegeben Punkt. Für die Berechnung wird die Erdkrümmung vernachlässigt, deshalb kann der Satz des Pythagoras genutzt werden. Dafür müssen die Grad angegebenen Koordinaten zunächst in Radianten umgewandelt werden und anschließend in ein kartesisches Koordinatensystem überführt werden. Anschließend kann die Entfernung der beiden Punkte berechnet werden. Dafür werden die beiden Koordinaten einer Achse voneinander Abgezogen und anschließend quadriert. Die Ergebnisse der beiden Achsen werden schließlich aufsummiert und radiziert.
|
||||||
\item \mintinline{c++}|int16_t courseTo(Point);|
|
|
||||||
|
\begin{eqnarray}
|
||||||
|
d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}
|
||||||
|
\end{eqnarray}
|
||||||
|
|
||||||
|
\item \mintinline{c++}|int16_t courseTo(Point);| errechnet den Kurs von dem aktuellen Punkt zu dem gegebenen Punkt und gibt ihn in Grad aus. \(0^\circ\) entspricht Norden. Von da an wird im Uhrzeigersinn weiter gezählt, sodass \(270^\circ\) beispielsweise einen Kurs nach Westen angeben würden. Für die Berechnung müssen die Längen- und Breitengrade zunächst in Radianten umgewandelt werden. Anschließend kann dann mit der Formel
|
||||||
|
|
||||||
|
\begin{eqnarray}
|
||||||
|
\theta = \text{atan2}(\sin(\Delta \lambda)cos(\phi_2), \cos(\phi_1)\sin(\phi_2) - \sin(\phi_1)\cos(\phi_2)\cos(\Delta \lambda))
|
||||||
|
\end{eqnarray}
|
||||||
|
|
||||||
|
mit
|
||||||
|
|
||||||
|
\begin{eqnarray}
|
||||||
|
\Delta \lambda &=& \lambda_2 - \lambda_1 \\
|
||||||
|
\phi_1, \phi_2 &\widehat{=}& \text{Breitengrade der Punkte} \\
|
||||||
|
\lambda_1, \lambda_2 &\widehat{=}& \text{Längengrad der Punkte}
|
||||||
|
\end{eqnarray}
|
||||||
|
|
||||||
|
Anschließend muss \(\theta\) wieder in Grad umgewandelt werden und mit modulo auf den Wertebereich \(0 \text{ bis } 360\) normalisiert werden.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
!!! Mit Metadaten (Genauigkeit) !!!
|
|
||||||
|
|
||||||
\subsubsection{Postionsspeicherung mit \mintinline{c++}|class Route|}
|
\subsubsection{Postionsspeicherung mit \mintinline{c++}|class Route|}
|
||||||
|
Die Klasse nutzt die Implementierung der Liste aus der C++ Standardbibliothek. Darüber hinaus wird ein Iterator für diese Liste von der Klasse verwaltet. Mit primitiven Datentypen wird festgehalten ob die Route gestartet ist und der wievielte Punkt gerade aus der Route selektiert ist.
|
||||||
|
\par
|
||||||
|
Die Funktionen der Klasse beschränken sich darauf den Iterator und Liste zu verwalten. Der Liste können nur Daten hinzugefügt werden. Die Entfernung einzelner Punkte ist nicht möglich und erfordert das Löschen der gesamten Liste. Es kann jeweils der nächste oder der vorherige Punkt ausgewählt werden. Die Route kann am Ende oder am Anfang gestartet werden. Soll die Route im Umgekehrter Reihenfolge abgefahren werden muss diese am Ende gestartet werden und immer der vorherige Punkt der Route abgerufen werden. Bei einem Fehler, weil beispielsweise keine Route aufgezeichnet wurde, wird von Funktionen eine Instanz von der \mintinline{c++}|class Point| mit den Koordinaten \(0 \text{ und } 0\) zurückgegeben. Dies kann von aufrufenden Funktion überprüft werden, dafür wurde eigens die Funktion \mintinline{c++}|bool Point::isValid();| implementiert.
|
||||||
|
\par
|
||||||
|
Damit Informationen über die Route abgefragt werden können, wurde ein Datentyp hinzugefügt. Das \mintinline{c++}|struct RouteInfo| enthält die Gesamtzahl der in der Route gespeicherten Punkte und der wievielte davon gerade ausgewählt ist.
|
||||||
|
|
||||||
|
\subsubsection{Verwaltung über das Menü}
|
||||||
|
In die vorhandene Menüstruktur wurde in der ersten Ebene der Punkt \flqq Route\frqq{} als Untermenü hinzugefügt. Dieses Menü stellt die in der folgenden Liste erläuterten Funktionen bereit. Für einige dieser Funktionen wird auf eine entwickelte HTTP-API zugegriffen, deshalb muss für diese Funktionen eine Internetverbindung bestehen. Die serverseitige Implementierung der API wird im Anhang \ref{cha:httpApi} beschrieben. Werden Teile der API auf dem Rover genutzt, zeigt dieser den HTTP-Code an. Mit diesem lässt sich erkennen ob die ausgeführte Operation korrekt ausgeführt wurde.
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Points} - Unter diesem Punkt können die einzelnen Koordinaten der in der Route gespeicherten Punkte betrachtet werden.
|
||||||
|
\item \textbf{Clear} - Löscht die aktuell lokal erstellte Route.
|
||||||
|
\item \textbf{Import} - Bei Auswahl dieses Punktes muss der Benutzter die ID der Route wissen mit der diese Exportiert wurde. Sofern die gewählte ID existiert, wird die Route heruntergeladen und steht dem Rover nun zur Verfügung. Wenn bereits ein Route lokal vorhanden war, wird diese durch importierte überschrieben. In diesem Fall könnte die gefährdete Route vorher exportiert werden.
|
||||||
|
\item \textbf{Export} - Mit dieser Funktionen können Routen für die spätere Verwendung gesichert werden. Dafür muss ihnen eine ID zugewiesen werden, unter dieser ID lässt sich die Route später wieder abrufen.
|
||||||
|
\item \textbf{Delete} - Mit Delete kann eine exportierte Route mit ihrer ID gelöscht werden, dies betrifft allerdings nicht aktuell lokal vorhandene Route.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection[Navigation]{\mintinline{c++}|class Navigation|}
|
||||||
|
Diese Klasse vereinigt die Verwaltung der Route mit den Sensorwerten wie die Positionsdaten und Ausrichtung um die eigentliche Navigation bereitzustellen. Außerdem werden die Anforderungen an die Genauigkeit überwacht. Die Navigation wird von den Modi zur Aufzeichnung und Abfahrt der Route benötigt.
|
||||||
|
\par
|
||||||
|
Es wurde ein \mintinline{c++}|enum Status| implementiert, welcher von einigen Funktionen der Klasse genutzt wird um Informationen über den Ausgang des Funktionsaufrufes zu informieren. Es kann mitgeteilt werden ob die Genauigkeit unzureichend ist, keine Änderungen erfolgt sind, etwas geändert wurde und ob die etwas abgeschlossen wurde. Des weiteren wird in der selben Header-Datei das \mintinline{c++}|struct CourseCorrection| definiert um die Distanz und die anzuwendende Kurskorrektur zum Zielpunkt in einem Datentypen zu vereinen.
|
||||||
|
\par
|
||||||
|
|
||||||
\subsubsection{Exportieren}
|
|
||||||
\subsubsection{Importieren}
|
|
||||||
|
|
||||||
\subsection{Modus - Route aufzeichnen}
|
\subsection{Modus - Route aufzeichnen}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
\chapter{Routen API}
|
||||||
|
\label{cha:httpApi}
|
||||||
Reference in New Issue
Block a user