diff --git a/.vscode/ltex.hiddenFalsePositives.de-DE.txt b/.vscode/ltex.hiddenFalsePositives.de-DE.txt index 6a66312ad8dbf8482464793dca80e1a078bd0000..e26a6e952aada689cd032359150e38f645ccd86a 100644 --- a/.vscode/ltex.hiddenFalsePositives.de-DE.txt +++ b/.vscode/ltex.hiddenFalsePositives.de-DE.txt @@ -21,3 +21,4 @@ {"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDieser wird dann als Message veröffentlicht und an alle Abonnenten des Dummies verschickt.\\E$"} {"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QJede \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q kann eigene Informationen als sogenannte Dummies veröffentlichen und andere, parallel laufende Dummies können diese abonnieren.\\E$"} {"rule":"DOPPELTES_AUSRUFEZEICHEN","sentence":"^\\QROS's ??\\E$"} +{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDieses kann unter dem \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q /img/temp abgerufen und live angeschaut werden.\\E$"} diff --git a/Bachelorarbeit.pdf b/Bachelorarbeit.pdf index 8db99803bc673a39e657c15cc676600b671693c4..402464fbfce5b54eba19f02f9e592dc4aca61577 100644 Binary files a/Bachelorarbeit.pdf and b/Bachelorarbeit.pdf differ diff --git a/chap/implementation.tex b/chap/implementation.tex index 9d5e313a99c576c4ed6f395ba86c41b4ff767b5b..9e25ab0ac8ac6e6f743889f2d4ab6608e5c30e63 100644 --- a/chap/implementation.tex +++ b/chap/implementation.tex @@ -607,6 +607,8 @@ Auch die Bildung von Linienpaaren aus einer rechten und linken Linie Erfolg analog zu \gls{python}. Hier gibt es auch keine großartigen Unterschiede in der Umsetzung, wie \autoref{code: pairing c++} zu sehen ist. + Auch hier wird mit den gefundenen Paaren wieder ein Linienmarker-Objekt erzeugt und zur oberen Nutzung abgespeichert. + \begin{lstlisting}[ float, style=example, @@ -631,41 +633,48 @@ } \end{lstlisting} + Da noch nicht klar ist, wie genau die gefundenen Daten potenziell zukünftigen Prozessen zu Verfügung gestellt werden sollen, werden diese + zurzeit nicht veröffentlicht. Stadtmessen wird analog zur Python-Implementierung ein Bild mit eingezeichneten Spurmarkern erzeugt und als + visuelles Ergebnis zur Verfügung gestellt. Dieses kann unter dem \gls{Topic} \lstinline{/img/temp} abgerufen und live angeschaut werden. + + \bigskip + \todo{pagebreak?} + \subsection{Performance Betrachtung} Mit dieser zusätzlichen \gls{ROS Node} ist es erneut interessant, wie sich diese auf die Performance auswirkt. Aus \autoref{sec: intrinsic} - ist ja bereits die Performance mit laufender Kamera- und Entzerrer-Node bekannt. Zum Vergleich wurde wieder die Systemauslastung, - insbesondere die der CPU, mit dem Programm jtop aufgenommen. Dies ist in \autoref{fig: jtop markings} Abgebildet. + ist ja bereits die Performance mit laufender Kamera- und Entzerrer-Node bekannt. Zum Vergleich wurde wieder die Systemauslastung mit dem + Programm \lstinline{jtop} aufgenommen und die Durchlaufzeit nach Erhalt eines Bildes gemessen. \begin{figure} + \includegraphics[width=.6\textwidth, trim={0 0 12px 31px}, clip]{img/jtop_cameraUndistortDetection.png} \caption{CPU Auslastung des JetBots mit laufender Kamera, Entzerrung und Markierungserkennung} \label{fig: jtop markings} \end{figure} + Ein Screenshot von \lstinline{jtop} ist in \autoref{fig: jtop markings} abgebildet. Mit der zusätzlichen neuen \gls{ROS Node} ist die CPU + Auslastung nur geringfügig auf ca. $37,5\,\percent$ gestiegen, auch dies ist dank starker Fluktuation in der CPU Nutzung praktisch + vernachlässigbar. - \todo[inline]{Robo will nicht booten...} - - Die Performance der \gls{C++} implementiert ist wie erwartet deutlich besser als bei der \gls{python}-Version. Vom Erhalt des Bildes bis - zur Veröffentlichung des Ergebnisses mit den gefundenen Linienmarkierungen dauert es - + Die Laufzeit-Performance der \gls{C++} implementiert ist wie erwartet deutlich besser als bei der \gls{python}-Version. Vom Erhalt des + Bildes bis zur Veröffentlichung des Ergebnisses mit den gefundenen Linienmarkierungen dauert es $\approx 3,46\,\ms$. \begin{table} \caption{Gemessene Laufzeit bei 10 Durchläufen der \gls{Callback}} \begin{tabular}{r|S} Durchlauf Nr. & \multicolumn{1}{c}{gemessene Laufzeit} \\\hline - 1 & 3,885214 \,\ms \\ - 2 & 4,068192 \,\ms \\ - 3 & 3,968679 \,\ms \\ - 4 & 3,711925 \,\ms \\ - 5 & 3,969982 \,\ms \\ - 6 & 4,085944 \,\ms \\ - 7 & 4,024673 \,\ms \\ - 8 & 3,897130 \,\ms \\ - 9 & 3,752863 \,\ms \\ - 10 & 4,095999 \,\ms \\ + 1 & 5,049744 \,\ms \\ + 2 & 5,049744 \,\ms \\ + 3 & 5,186416 \,\ms \\ + 4 & 6,229117 \,\ms \\ + 5 & 5,328923 \,\ms \\ + 6 & 5,231026 \,\ms \\ + 7 & 6,762161 \,\ms \\ + 8 & 5,631071 \,\ms \\ + 9 & 5,309235 \,\ms \\ + 10 & 4,862289 \,\ms \\ \end{tabular} - \todo[inline]{ist die Tabelle überhaupt sinnvoll?} \end{table} diff --git a/chap/kalibrierung.tex b/chap/kalibrierung.tex index 3b9a3d43c6727d72683586516eea579332d11eed..8602f862f3c6be1183831ba770ab791ce3293d23 100644 --- a/chap/kalibrierung.tex +++ b/chap/kalibrierung.tex @@ -401,19 +401,21 @@ wird, gemessen. \begin{figure} - \includegraphics[width=.6\textwidth, trim={0 0 12px 31px}, clip]{img/jtop_camera.png} + \includegraphics[width=.6\textwidth, trim={0 0 12px 31px}, clip]{img/jtop_cameraUndistort.png} \caption{CPU Auslastung des JetBots mit laufender Kamera und entzerrer \gls{ROS Node}} \label{fig: jtop cam+undist} \end{figure} Der \lstinline{jtop} Screenshot in \autoref{fig: jtop cam+undist} zeigt die CPU Nutzung bei aktivem ROS-Core, Kameratreiber und - der neu erstellten Entzerrer \gls{ROS Node}. Die durchschnittliche CPU Auslastung liegt bei ungefähr $38,75\,\percent$, ist also nur - sehr geringfügig höher als die in \autoref{sub: performance baseline} gemessene Grundauslastung ohne die neue \gls{ROS Node}. + der neu erstellten Entzerrer \gls{ROS Node}. Die durchschnittliche CPU Auslastung liegt bei ungefähr $35,25\,\percent$, ist also + sogar sehr geringfügig niedriger als die in \autoref{sub: performance baseline} gemessene Grundauslastung ohne die neue \gls{ROS Node}. + Das ist aber auf die starke Fluktuation in der CPU Auslastung und daher ungenauen Messung zurückzuführen. Die Auslastung wird daher + als identisch betrachtete. Um die Laufzeit der \gls{ROS Node} zu bestimmen wird die aktuelle Zeit wie sie von der Funktion \lstinline{ros::Time::now()} zurückgegeben wird verwendet. Die aktuelle Zeit beim Start der \gls{Callback} wird abgespeichert. Nach Durchlauf der Funktion wird erneut die aktuelle Zeit bestimmt und die Differenz in Sekunden als Debug-Nachricht ausgegeben. Die Laufzeit der \gls{ROS Node} wird - über einige Zeit gemittelt. Dabei ergibt sich eine Laufzeit von $\approx 3,9\,\ms$. + über einige Zeit gemittelt. Dabei ergibt sich eine Laufzeit von $\approx 4,07\,\ms$. \begin{table} \caption{Gemessene Laufzeit bei 10 Durchläufen der \gls{Callback}} @@ -423,7 +425,7 @@ 2 & 4,068192 \,\ms \\ 3 & 3,968679 \,\ms \\ 4 & 3,711925 \,\ms \\ - 5 & 3,969982 \,\ms \\ + 5 & 5.231026 \,\ms \\ 6 & 4,085944 \,\ms \\ 7 & 4,024673 \,\ms \\ 8 & 3,897130 \,\ms \\ diff --git a/img/jtop_cameraUndistort.png b/img/jtop_cameraUndistort.png index b2eb3d7e0d7327cbb1cecb3038200b1667a92e00..42d3a10a70b01cffae0758a15bb81fcca0a005f2 100644 Binary files a/img/jtop_cameraUndistort.png and b/img/jtop_cameraUndistort.png differ diff --git a/img/jtop_cameraUndistortDetection.png b/img/jtop_cameraUndistortDetection.png new file mode 100644 index 0000000000000000000000000000000000000000..a0fb2c75bdd50786ea96582428779c0e29d32673 Binary files /dev/null and b/img/jtop_cameraUndistortDetection.png differ