diff --git a/.vscode/ltex.dictionary.de-DE.txt b/.vscode/ltex.dictionary.de-DE.txt index 4ea213e37e2140925c384604e22ca1e58795e904..fe784058a47a1a34eb442fd87e152fb451d0f4a3 100644 --- a/.vscode/ltex.dictionary.de-DE.txt +++ b/.vscode/ltex.dictionary.de-DE.txt @@ -63,3 +63,8 @@ Kernelgröße Gradientenbetrachtung Canny-Edge-Detector for-Schleife +Sparkfun +GPIO +grafikintensive +Jetson +Nano diff --git a/.vscode/ltex.hiddenFalsePositives.de-DE.txt b/.vscode/ltex.hiddenFalsePositives.de-DE.txt index 5e269e31fee199f644e1369065e73494a871a1c0..36ecef1eed907d9561fa341703b323767d418a38 100644 --- a/.vscode/ltex.hiddenFalsePositives.de-DE.txt +++ b/.vscode/ltex.hiddenFalsePositives.de-DE.txt @@ -60,3 +60,5 @@ {"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDie \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q callback_image() verläuft völlig analog zur Implementierung mit \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q.\\E$"} {"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDiese wird dann veröffentlicht und an alle Abonnenten des Dummies verschickt.\\E$"} {"rule":"BEI_VERB","sentence":"^\\QDiese können dann bei erhalt der \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q auf diese reagieren.\\E$"} +{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDieser wurde als \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q mit dem Namen camera_driver unter ROS implementiert und stellt alle \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q ein aktuelles Bild auf dem \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q /img/raw zur Verfügung.\\E$"} +{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QEs ist für den Großteil der zusätzlichen Auslastung verantwortlich, sodass zusätzliche Dummies die Auslastung nur geringfügig erhöhen werden.\\E$"} diff --git a/Bachelorarbeit.pdf b/Bachelorarbeit.pdf index 5e2254f644619739e7fa7b176088d8e402936d42..c17d175937029947dc76e9d7ea6155ce4dfb4277 100644 Binary files a/Bachelorarbeit.pdf and b/Bachelorarbeit.pdf differ diff --git a/bib/Quellenverzeichnis.bib b/bib/Quellenverzeichnis.bib index 1742d03a0f9a0847502d1dd205090fc703469a3c..69536e7b4055813ad0cc4c9413718f00ba3a6310 100644 --- a/bib/Quellenverzeichnis.bib +++ b/bib/Quellenverzeichnis.bib @@ -241,9 +241,17 @@ urldate = {2022-07-19} } - -@online{jetbot:github-doc, +@online{jetson-nano:homepage, author = {Nvidia}, + title = {Jetson Nano Developer Kit}, + year = {2022}, + language = {eng}, + url = {https://developer.nvidia.com/embedded/jetson-nano-developer-kit}, + urldate = {2022-09-03} +} + +@online{jetbot:github, + author = {JetBot-community}, title = {GitHub Repository: NVIDIA-AI-IOT/jetbot}, subtitle = {Documentation and sourcecode for NVIDIA Jetson Nano}, year = {2022}, @@ -252,6 +260,14 @@ url = {https://github.com/NVIDIA-AI-IOT/jetbot}, urldate = {2022-07-15} } +@online{jetbot:docs, + author = {JetBot-community}, + title = {JetBot - full online Documentation}, + year = {2022}, + language = {eng}, + url = {https://jetbot.org/}, + urldate = {2022-09-01} +} @online{jetbot:Sparkfun, author = {Sparkfun}, @@ -259,7 +275,7 @@ year = {2022}, language = {eng}, url = {https://learn.sparkfun.com/tutorials/assembly-guide-for-sparkfun-jetbot-ai-kit-v20}, - urldate = {2022-07-15} + urldate = {2022-09-01} } @online{OpenCV:homepage, diff --git a/chap/standdertechnik.tex b/chap/standdertechnik.tex index a88ede55eafe1040a5fbe8c411ef3870134c6365..e923390eddbbdf14ef6f426fb9aa720e5e5b9fe8 100644 --- a/chap/standdertechnik.tex +++ b/chap/standdertechnik.tex @@ -139,32 +139,69 @@ \section{Der JetBot Roboter} \label{sec: JetBot} - \todo[inline]{Was kann er?\\wie wird er benutzt?\\Was für einschänkungen?} + Beim in für diese Arbeit verwendeten Roboter handelt es sich um einen JetBot v2.1 von der Firma Sparkfun. Im Folgenden werden seine + Komponenten und Einsatzmöglichkeiten für diese Arbeit näher beschrieben. + + Der Roboter verwendet das von Nvidia produzierte Jetson Nano Entwicklerboard \cite{jetson-nano:homepage}. Hierbei handlet es sich um einen + Mini-Computer der speziell für Bildverarbeitung und Selbstlehrende Algorithmen entwickelt wurde. Es verfügt über einen 4-Kern ARM Prozessor + als CPU sowie, neben herkömmlichen Anschlüssen für PC-Peripherie, über Anschlüsse für 2 Kameras und mehre GPIO Pins. Dadurch eignet es sich + bereits sehr gut für eingebettet Anwendungen. + + Was dieses Board für die Anwendung in der Bildverarbeitung aber besonders interessant mach, ist die integrierte, für die Größe leistungsstarke + GPU. Diese kann für grafikintensive Anwendungen, aber vor allem für das Arbeiten mit Neuralen Netzen genutzt werden. Da für diese Arbeit + explizit nicht mit Deep Learning gearbeitet wird, um diese Ressourcen für spätere Weiterentwicklung freizuhalten, ist dieses Feature aber + hier uninteressant. + + Die Firma Sparkfun bietet für dieses Board den Bausatz \cite{jetbot:Sparkfun} an, um einen selbstfahrenden Roboter zu bauen. Dieser wird für + diese Arbeit verwendet. Er stattet das Board mit einer Kamera, zwei steuerbaren Motoren, einem LCD-Display und einer Batterie aus. Der fertig + aufgebaute Roboter ist in \autoref{fig: JetBot} zu sehen. \begin{figure} \includegraphics[width=.6\textwidth]{img/jetbot_sparkfun.jpg} \caption{SparkFun JetBot AI Kit V2.1 \cite{jetbot:Sparkfun}} + \label{fig: JetBot} \end{figure} + Für diese Arbeit wird der Roboter als funktionstüchtig und einsatzbereit vorausgesetzt. Die Aufbauanleitung ist aber unter + \cite{jetbot:Sparkfun} und die Anleitung zum Einrichten unter \cite{jetbot:docs} zu finden. + + Zusätzlich wird ein fertiger Kameratreiber vorausgesetzt. Dieser wurde als \gls{ROS Node} mit dem Namen \lstinline{camera_driver} unter ROS + implementiert und stellt alle $0,2\,\s$ ein aktuelles Bild auf dem \gls{Topic} \lstinline{/img/raw} zur Verfügung. + \subsection{Performance Baseline} \label{sub: performance baseline} - \todo[inline]{Ein paar Worte was das hier soll} + Da die Leistungsfähigkeit des JetBots relativ eingeschränkt ist und eines der Ziele dieser Arbeit lautet, parallel zu anderen, zukünftigen + Prozessen laufen zu können, ist es wichtig möglichst Performant zu arbeiten. Daher wird ermittelt, wie sehr der JetBot vor Beginn dieser + Arbeit bereits ausgelastet ist. + + Begonnen wird mit der Grundleistung ohne irgendwelche laufenden Prozesse unter \gls{ROS}. Das bedeutet, das nur das Betriebssystem und + seine Standard-Applikationen, wie zum Beispiel der SSH-Server, laufen. Dazu wird das Terminalprogramm \lstinline{jtop} verwendet, welches + viele Systeminformationen und Performance-Messwerte gesammelt anzeigt. Ein Screenshot ist in \autoref{fig: jtop baseline} gezeigt. \begin{figure} - \includegraphics[width=.6\textwidth]{img/jtop_baseline.png} + \includegraphics[width=.6\textwidth, trim={0 0 12px 31px}, clip]{img/jtop_baseline.png} \caption{CPU Auslastung des JetBots ohne \gls{ROS}} + \label{fig: jtop baseline} \end{figure} - Baseline Auslastung ohne irgendwelche laufenden Prozesse $\approx8\,\percent$. + Da alle in dieser Arbeit entwickelten Programme lediglich die CPU benutzen, ist dies der einzige relevante Messwerte. Trotze sind die + anderen Werte interessant und werden mit dokumentiert. Wie man im Screenshot sieht, ist das System in diesem Fall kaum belastet. Die + Auslastung ohne irgendwelche laufenden Prozesse liegt bei $\approx8.25\,\percent$. + + Relevanter ist aber der Fall mit laufender Kamera, da dies die Voraussetzung für diese Arbeit ist. Wird die Kamera-\gls{ROS Node} + gestartet und erneut \lstinline{jtop} überprüft, ergibt sich die in \autoref{fig: jtop cam baseline} gezeigte Screenshot. \begin{figure} - \includegraphics[width=.6\textwidth]{img/jtop_camera.png} + \includegraphics[width=.6\textwidth, trim={0 0 12px 31px}, clip]{img/jtop_camera.png} \caption{CPU Auslastung mit laufender Kamera und ROS-Core} - \label{fig: jtop: cam baseline} + \label{fig: jtop cam baseline} \end{figure} - Mit ROS-Core und laufendem Kameratreiber $\approx38\,\percent$ + Dort ist die CPU-Auslastung deutlich höher und liegt bei $\approx38\,\percent$. Es ist allerdings zu beachten, dass dies nicht + ausschließlich auf die Kamera-\gls{ROS Node} zurückzuführen ist. Um überhaupt \glslink{ROS Node}{ROS Nodes} benutzen zu können, muss das + sogenannte ROS Core gestartet sein. Diese geschieht automatisch beim Starten der ersten Node. Es ist für den Großteil der zusätzlichen + Auslastung verantwortlich, sodass zusätzliche \glspl{ROS Node} die Auslastung nur geringfügig erhöhen werden. % \section{Aufgebaute Anlage} \label{sec: anlgae}