Skip to content
Snippets Groups Projects
Commit 172605eb authored by Jan Wille's avatar Jan Wille
Browse files

JetBot

parent a29093ae
Branches
No related tags found
No related merge requests found
......@@ -63,3 +63,8 @@ Kernelgröße
Gradientenbetrachtung
Canny-Edge-Detector
for-Schleife
Sparkfun
GPIO
grafikintensive
Jetson
Nano
......@@ -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$"}
No preview for this file type
......@@ -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,
......
......@@ -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}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment