diff --git a/images/Orientation_eval.png b/images/Orientation_eval.png new file mode 100644 index 0000000000000000000000000000000000000000..4e51492d61f6423e843cd04c87250bb0667b9783 Binary files /dev/null and b/images/Orientation_eval.png differ diff --git a/images/velocity_eval.png b/images/velocity_eval.png new file mode 100644 index 0000000000000000000000000000000000000000..fd74a1439811b6450762fce87250548972571190 Binary files /dev/null and b/images/velocity_eval.png differ diff --git a/sections/eval.tex b/sections/eval.tex index 542af175d3a8f75410e08b8093d395aa39370ff6..b79107c27b4219ca28ced72c2201b831eae6e3cc 100644 --- a/sections/eval.tex +++ b/sections/eval.tex @@ -1,9 +1,30 @@ \chapter{Evaluation} Ziel der Fallstudie war die Anwendung einiger der in der Taxonomie eingeordneten Constraints in einem realen Anwendungsfall. In diesem Kapitel wird die Implementierung hinsichtlich der Erfüllung der in Abschnitt~\ref{ch:requirements} gelisteten Anforderungen überprüft. Dazu werden beide Cobot-Anwendungsfälle in einer Gazebo Simulationsumgebung simuliert. Anschließend werden alle aufgetretenen Constraints in die in Kapitel~\ref{ch:taxonomy} präsentierte Taxonomie eingeordnet. + + + \section{Simulation} Die Initialisierung der Simulationsumgebung geschieht in einem Zuge mit dem Hinzufügen der Objekte in die Planning Scene. Die Startzustände der beiden Roboter sind in Abbildung~\ref{fig:cobots_init} zu sehen. + +Um die Einhaltung der Constraints zu validieren, wurde die Beschleunigung, die Geschwindigkeit und die Orientierung des Endeffektors zur Laufzeit der Simulation aufgezeichnet und in einem Graphen dargestellt. In Abbildung~\ref{fig:velocity_eval} ist zu sehen, dass die Beschleunigung, während der Handhabung von gefüllten Behältern, geringer ist, als während der Handlungen in denen das nicht der Fall ist. Abbildung~\ref{fig:orientation_eval} zeigt die Orientierung des Endeffektors, relativ zur Welt. Es ist ersichtlich, dass die Orientierung, während der Handhabung von Objekten, innerhalb der Toleranzgrenzen bleibt, die bei der Erstellung des Orientierungs-Constraints definiert werden (siehe Quellcode~\ref{lst:orientation_constraint}). + +\begin{figure} + \centering + \includegraphics[height=\textheight, width=\textwidth, keepaspectratio]{images/velocity_eval.png} + \caption{Geschwindigkeit und Beschleunigung des Endeffektors relativ zur Welt} + \label{fig:velocity_eval} +\end{figure} + +\begin{figure} + \centering + \includegraphics[height=\textheight, width=\textwidth, keepaspectratio]{images/Orientation_eval.png} + \caption{Orientierung des Endeffektors relativ zur Welt} + \label{fig:orientation_eval} +\end{figure} + + \begin{figure} \ffigbox[\FBwidth]% {\begin{subfloatrow}% diff --git a/sections/implementierung.tex b/sections/implementierung.tex index 5ec7cdf20581577724272a0d2bab973d2c9e4f31..30728868771280405db5980c3601e8af21437420 100644 --- a/sections/implementierung.tex +++ b/sections/implementierung.tex @@ -150,7 +150,7 @@ Die Pakete \textit{cobot\_1} und \textit{cobot\_2} enthalten jeweils die Impleme Nach erfolgreicher Initialisierung, wird das Topic \glqq pressure\_1\grqq{} beziehungsweise \glqq pressure\_2\grqq{} abonniert, um informiert zu werden, sobald das Glas auf den Drucksensor abgestellt wird. Ein Service Client wird zum Stellen von Anfragen an den \textit{SafezoneController} erstellt und mit Hilfe des \textit{ObjectCreators} werden die Umgebungsobjekte, wie der Tisch, die Behälter und die Drucksensoren, zur Planning Scene hinzugefügt. Erst anschließend beginnt die Abarbeitung des Ablaufdiagramms~\ref{fig:ablaufdiagramm}. Die einzelnen Zustände beziehungsweise Aufgaben werden von einer \textit{Cobot}-Instanz ausgeführt, die für jede Aufgabe eine entsprechende Methode bereitstellt. Eine Implementation einer solchen Aufgabe ist im Codebeispiel~\ref{lst:pick_bottle} dargestellt. -\lstinputlisting[firstline=27,lastline=39, label={lst:pick_bottle}, caption={Beispielimplementation einer Cobot-Aufgabe}]{../cobot_ws/src/cobot_1/src/Cobot.cpp} +\lstinputlisting[firstline=29,lastline=41, label={lst:pick_bottle}, caption={Beispielimplementation einer Cobot-Aufgabe}]{../cobot_ws/src/cobot_1/src/Cobot.cpp} Alle Aufgaben erwarten eine Referenz zu einer Move Group, auf der die Bewegung ausgeführt werden soll. Beinhaltet die Aufgabe ein Objekt, wie die Flasche beim Aufnehmen der Flasche, wird zusätzlich noch eine \textit{CollisionObject}-Beschreibung dieses Objektes benötigt, da in ihr Größe und Position des Objektes definiert ist. Die tatsächliche Implementation, zum Aufnehmen und Platzieren von Objekten, ist in einem weiteren Package ausgelagert, damit beide Cobots auf diese Funktionalität zugreifen können und Codeduplikate vermieden werden. Nach Ausführung der Bewegung, werden die notwendigen Constraints angepasst und dem \textit{CobotController}, in Form eines booleschen Werts, den Erfolg der Ausführung zurückgegeben. Die Constraints werden im Konstruktor des \textit{Cobot}s als Klassenvariablen instanziiert und lassen sich so innerhalb der Handlungen anwenden und entfernen. @@ -161,7 +161,8 @@ Neben dem Programmcode enthält das Cobot Package auch noch eine Konfigurationsd \subsection{Constraints}\label{ch:constraint_impl} Das Package \textit{constraints} enthält die Definition der abstrakten \textit{Constraint}-Klasse und die \textcolor{blue}{fünf} konkreten Implementationen \textit{AccelerationConstraint}, \textit{OrientationConstraint}, \textcolor{blue}{\textit{ProximityConstraint}}, \textit{SafezoneConstraint} und \textit{VelocityConstraint}. -Der Orientierungs-Constraint (Codebeispiel~\ref{lst:orientation_constraint}) wird realisiert, indem eine \verb|moveit_msgs::OrientationConstraint| Nachricht erstellt wird, die die aktuelle Orientierung des Endeffektors festsetzt. Diese Nachricht wird dann der Move Group als Pfad-Constraint hinzugefügt. Entfernt wird das Constraint durch das Leeren der Liste \verb|path_constraints.orientation_constraints|. +Der Orientierungs-Constraint (Codebeispiel~\ref{lst:orientation_constraint}) wird realisiert, indem eine\newline + \verb|moveit_msgs::OrientationConstraint|-Nachricht erstellt wird, die die aktuelle Orientierung des Endeffektors festsetzt. Diese Nachricht wird dann der Move Group als Pfad-Constraint hinzugefügt. Entfernt wird das Constraint durch das Leeren der Liste \verb|path_constraints.orientation_constraints|. \lstinputlisting[firstline=11,lastline=26, label={lst:orientation_constraint}, caption={Implementation des Orientierungs-Constraint}]{../cobot_ws/src/constraints/src/OrientationConstraint.cpp}