diff --git a/.kile/mechforsch.kilepr.gui b/.kile/mechforsch.kilepr.gui index fc03b3e..1911178 100644 --- a/.kile/mechforsch.kilepr.gui +++ b/.kile/mechforsch.kilepr.gui @@ -129,11 +129,11 @@ TextFolding={"checksum":"5c50dc53ef39690810318af01f4ba4d3cb14fab0","ranges":[]} ViMarks= [view-settings,view=0,item:tex/1_Einleitung.tex] -CursorColumn=28 -CursorLine=41 +CursorColumn=78 +CursorLine=61 Dynamic Word Wrap=false JumpList= -TextFolding={"checksum":"72da509f7bb04dfaf40002d46af28410e2acb580","ranges":[]} +TextFolding={"checksum":"578f69b0ffbc27d095768d7a3111120650ffd5d0","ranges":[]} ViMarks= [view-settings,view=0,item:tex/2_Konzept.tex] @@ -141,23 +141,23 @@ CursorColumn=0 CursorLine=36 Dynamic Word Wrap=false JumpList= -TextFolding={"checksum":"21b8ecf4269d0711922f5a58a25d2691a2aebc7f","ranges":[]} +TextFolding={"checksum":"3273e70036fa23cebeead6b7a47fc2014926bdf5","ranges":[]} ViMarks= [view-settings,view=0,item:tex/3_Auswahl.tex] -CursorColumn=0 -CursorLine=147 +CursorColumn=9 +CursorLine=161 Dynamic Word Wrap=false JumpList= TextFolding={"checksum":"ee9b56159ddf3293cde4120dfc5d90bbd2f0759a","ranges":[]} ViMarks= [view-settings,view=0,item:tex/4_Umsetzung.tex] -CursorColumn=15 -CursorLine=520 +CursorColumn=113 +CursorLine=127 Dynamic Word Wrap=false JumpList= -TextFolding={"checksum":"3e818d80aa0680fb9664cb90786bb0abf72bfd24","ranges":[]} +TextFolding={"checksum":"2172161d77c4b318d98d968032cce683727b0108","ranges":[]} ViMarks= [view-settings,view=0,item:tex/Einleitung.tex] diff --git a/img/MA-subtree-deposit.pdf b/img/MA-subtree-deposit.pdf new file mode 100644 index 0000000..96d8c6d Binary files /dev/null and b/img/MA-subtree-deposit.pdf differ diff --git a/img/MA-subtree-work.pdf b/img/MA-subtree-work.pdf new file mode 100644 index 0000000..09e1fa6 Binary files /dev/null and b/img/MA-subtree-work.pdf differ diff --git a/img/MA-tree-base-robot.pdf b/img/MA-tree-base-robot.pdf new file mode 100644 index 0000000..1867c2b Binary files /dev/null and b/img/MA-tree-base-robot.pdf differ diff --git a/img/MA-tree-colab.pdf b/img/MA-tree-colab.pdf new file mode 100644 index 0000000..e6f9a60 Binary files /dev/null and b/img/MA-tree-colab.pdf differ diff --git a/img/MA-tree-robot-coex.pdf b/img/MA-tree-robot-coex.pdf new file mode 100644 index 0000000..a5ec151 Binary files /dev/null and b/img/MA-tree-robot-coex.pdf differ diff --git a/img/MA-tree-robot-colab.pdf b/img/MA-tree-robot-colab.pdf new file mode 100644 index 0000000..aa1cfb4 Binary files /dev/null and b/img/MA-tree-robot-colab.pdf differ diff --git a/img/MA-tree-robot-coop.pdf b/img/MA-tree-robot-coop.pdf new file mode 100644 index 0000000..748bd3d Binary files /dev/null and b/img/MA-tree-robot-coop.pdf differ diff --git a/tex/1_Einleitung.tex b/tex/1_Einleitung.tex index 7df84f5..578f69b 100644 --- a/tex/1_Einleitung.tex +++ b/tex/1_Einleitung.tex @@ -2,10 +2,8 @@ \section{Motivation} Die Simulation von Maschinen wird im industriellen Umfeld immer beliebter, um deren Verhalten schon vor der eigentlichen Produktion zu testen. Dazu wird ein Modell des gesamten Prozesses in der Simulation geschaffen, der durch die Maschine beeinflusst werden soll. -Das Modell wird um die Maschine selbst erweitert, die Einfluss auf das -System nimmt. -Die Veränderungen durch die Maschine werden analysiert, und erlauben -Rückschlüsse auf die Funktion des Systems. +Das Modell wird um die Maschine selbst erweitert, die Einfluss auf das System nimmt. +Die Veränderungen durch die Maschine werden analysiert, und erlauben Rückschlüsse auf die Funktion des Systems. Ein solches Modell kann nun für die Erkennung von Fehlverhalten und Problemen schon weit vor der eigentlichen Inbetriebnahme der Maschine genutzt werden. @@ -16,18 +14,14 @@ nicht verschiedene Variationen im gesamten Prozess, die durch die Ereignisse in der Simulation ausgelöst werden. Um eine solche Funktionalität bereitstellen zu können, muss der Bewegungsablauf von sowohl Roboter und Mensch zur Laufzeit der Simulation gesteuert werden. -Diese Steuerung soll durch eine eingängliche Beschreibungssprache ermöglicht -werden, die einfach erweitert und auf neue Szenarien angepasst werden kann. -Um diese Funktionalität zu demonstrieren, sind 3 unterschiedliche -Testszenarien in der Simulationsumgebung abzubilden. +Diese Steuerung soll durch eine eingängliche Beschreibungssprache ermöglicht werden, die einfach erweitert und auf neue Szenarien angepasst werden kann. +Um diese Funktionalität zu demonstrieren, sind 3 unterschiedliche Testszenarien in der Simulationsumgebung abzubilden. Diese sollen durch verschiedene Aufgaben unterschiedliche Interaktionsgrade zwischen Mensch und Roboter simulieren. \section{Stand der Wissenschaft} -Aktuelle wissenschaftliche Arbeiten befassen sich mit vielen unterschiedlichen -Teilaspekten einer Simulation eines Mensch-Roboter-Kollaborationsszenarios. +Aktuelle wissenschaftliche Arbeiten befassen sich mit vielen unterschiedlichen Teilaspekten einer Simulation eines Mensch-Roboter-Kollaborationsszenarios. -Die Planung von unterschiedlichen Reaktionen von Roboter auf den Menschen -in verschiedenen Interaktionsszenarien stellt eine Grundlage für spätere +Die Planung von unterschiedlichen Reaktionen von Roboter auf den Menschen in verschiedenen Interaktionsszenarien stellt eine Grundlage für spätere Projekte dar.\cite{DOMBROWSKI2018134} Hierbei wird die erwünschte Interaktion betrachtet und aus den gewonnenen Daten werden Einschränkungen generiert. Diese Einschränkungen können nun in der Interaktion verwendet werden, um Verletzungen durch den Roboter auszuschließen. @@ -54,14 +48,12 @@ Dazu zählen zum Beispiel das Hineingreifen in einen Prozess, das Aufheben von M Das erste Szenario soll sich mit der Simulation einer bereits vollautomatisierten Fertigungsaufgabe befassen, in der ein Roboter im Arbeitsbereich eines Menschen Teile fertigt. Die zu erwartende Interaktion beschränkt sich hierbei auf die Anpassung der Fahrgeschwindigkeit bei Annäherung des Menschen, um Kollisionen zu vermeiden. Der Mensch soll in diesem Szenario an einer anderen Aufgabe arbeiten. -Während dieser Arbeit betritt der Mensch vereinzelt den Arbeitsbereich des -Roboters, was eine entsprechende Reaktion hervorrufen soll. +Während dieser Arbeit betritt der Mensch vereinzelt den Arbeitsbereich des Roboters, was eine entsprechende Reaktion hervorrufen soll. Dieses Szenario ist ein Beispiel für eine Koexistenz zwischen Roboter und Mensch, wo beide an unterschiedlichen Aufgaben, jedoch im selben Raum, arbeiten. Außerdem werden grundlegende Aspekte der Simulation getestet, wie zum Beispiel das Bewegen von Mensch und Roboter und die sicherheitsrelevante Aktion der Geschwindigkeitsanpassung. -Im zweiten Szenario prüft und sortiert der Roboter Teile und legt die -fehlerfreien Exemplare auf einem Fließband zur Weiterverarbeitung ab. +Im zweiten Szenario prüft und sortiert der Roboter Teile und legt die fehlerfreien Exemplare auf einem Fließband zur Weiterverarbeitung ab. Die Mängelexemplare werden hingegen in einer besonderen Zone abgelegt, von wo sie vom Menschen abtransportiert werden. Auch hier soll der Mensch solange eigenständig arbeiten, bis der Roboter ein aussortiertes Teil ablegt, dass weiter transportiert werden muss. @@ -73,8 +65,6 @@ Dieser soll, wenn seine Hilfe nicht benötigt wird, andere Roboter kontrollieren \section{Contributions} Durch diese Arbeit soll in zukünftigen Projekten die Möglichkeit geschaffen werden, konzeptionelle Probleme bei der Erstellung neuer Aufgabenbereiche eines Roboters frühzeitig durch Simulation erkennbar zu machen. -Dazu ist eine schnelle Konfiguration von sowohl Roboter als auch Mensch auf -unterschiedliche Szenarien nötig. -Die Szenarien sollen dabei durch eine Beschreibungssprache definiert -werden. +Dazu ist eine schnelle Konfiguration von sowohl Roboter als auch Mensch auf unterschiedliche Szenarien nötig. +Die Szenarien sollen dabei durch eine Beschreibungssprache definiert werden. Durch deren einfache Struktur soll komplexes Verhalten einfach und überschaubar definierbar sein, dass dann in der Simulation getestet werden kann. diff --git a/tex/4_Umsetzung.tex b/tex/4_Umsetzung.tex index 3e818d8..2172161 100644 --- a/tex/4_Umsetzung.tex +++ b/tex/4_Umsetzung.tex @@ -714,8 +714,100 @@ Um die RobotMove-Node nicht zu unterbrechen, wird diese nur über einen Callback \subsection{Subtrees} Um die Wiederverwendung von bestimmten Verhaltensweisen zu erleichtern, wurden diese in Subtrees ausgelagert. -In diesem Fall wurden die Aktionen ``Arbeiten an der Werkbank'' und ``Ablegen eines Objekts im Lagerregal'' des Menschen ausgelagert, da diese in mehreren Fällen verwendet werden und die Lesbarkeit der Bäume verbessert wird. +In diesem Fall wurden die Aktionen ``Arbeiten an der Werkbank'' und ``Ablegen eines Objekts im Lagerregal'' des Menschen ausgelagert, da diese in mehreren Fällen verwendet werden. +Dies erhöht die Lesbarkeit der Bäume und vereinfacht die Verwendung gleicher Aktionen in mehreren Bäumen. + +Für das Arbeiten an der Werkbank ist eine Bewegung zu dieser erforderlich. +Außerdem muss der Mensch sich zur Werkbank ausrichten, um die späteren Animationen korrekt auszuführen. +Dazu wird eine Bewegung zu einem Punkt vor der Werkbank mit vorgegebener Zielrichtung genutzt. +Nach dieser Bewegung soll ein Arbeitsprozess simuliert werden. +Da dieser Prozess weit vom Roboter entfernt ist, ist eine genaue Animation nicht erforderlich. +In diesem Fall wird die Arbeit durch ausstrecken und zurücknehmen der Hand in Richtung der Werkbank simuliert. +Dies wird durch zwei Animations-Nodes mit entsprechenden Parametern gesteuert. +Die Ausführung der Nodes dieser Gesamtaktion soll Sequenziell erfolgen, weshalb die Nodes unterhalb einer Sequence-Node gruppiert werden. +Der vollständige resultierende Baum ist in Abbildung \ref{subtree_work} visualisiert. + +\begin{figure}[] +\includegraphics[width=\textwidth]{img/MA-subtree-work} +\centering +\caption{BehaviorTree für das Arbeiten an der Werkbank} +\label{subtree_work} +\end{figure} + +Das Ablegen von Objekten in einem Schrank ist ein komplizierterer Prozess, da der Schank in mehreren Ebenen befüllt werden kann. +Außerdem sind mehrere Fächer verfügbar, die genutzt werden können. +Wie bereits bei der Werkank wird zuerst eine Bewegung zum Schrank ausgeführt. +Diese hat ein einzelnes Schrankteil als Ziel, wobei drei Schrankteile existieren. +Die Auswahl des Ziels erfolgt zufällig durch eine WeightedRandom-Node, die eine der drei Bewegungs-Nodes ausführt. +Nachdem erfolgt eine weitere zufällige Auswahl. +Diese entscheidet, ob ein oberes oder unteres Fach genutzt werden soll. +Im Falle eines oberen Faches werden nur zwei Animationen benötigt. +Die Hand wird zu einem oberen Fach ausgestreckt und zurückgezogen. +Für den Fall eines unteren Fachs werden vier Animationen genutzt. +Zuerst kniet die Person auf den Boden nieder, um das untere Fach erreichen zu können. +Danach wird ein Objekt durch inspizieren und ablegen in das Fach gelegt. +Nun kann die Person wieder aufstehen, was die Person wieder zum gleichen Lage wie am Anfang der Aktion bringt. +Für die beiden Fälle werden auch Sequenz-Nodes genutzt, da die Aktionen nacheinander ausgeführt werden sollen. +Die beiden zufälligen Auswahlverfahren werden durch eine Sequenz verbunden. +Der resultierende Ablauf wurde als Baum in Abbildung \ref{subtree_deposit} visualisiert. + +\begin{figure}[] +\includegraphics[width=\textwidth]{img/MA-subtree-deposit} +\centering +\caption{BehaviorTree für das Ablegen von Objekten im Schrank} +\label{subtree_deposit} +\end{figure} \subsection{Verhalten des Roboters} +Das grundlegende Verhalten des Roboters ist in jedem Anwendungsfall gleich. +Dies hängt mit der automatischen Geschwindigkeitsanpassung zusammen. +Der Roboter soll bei annäherndem Mensch zuerst seine Geschwindigkeit reduzieren, wenn dieser eine Warnzone betritt. +Falls sich der Mensch weiter bis in die Sicherheitszone begibt, ist ein vollständiger Stopp des Roboters vorgesehen. + +Um diese Funktionen zu erlauben, ist eine Reaktion auf Statusänderungen von vorherigen Nodes nötig. +Dies wird durch eine übergeordnete ReactiveSequence erreicht. +Eine solche Node verhält sich ähnlich einer normalen Sequence, jedoch prüft sie vor jedem Tick noch einmal vorherige Nodes. +Wenn eine vorherige Node Failure zurückgibt, wird die aktuell laufende spätere Node abgebrochen. + +Als erste Node in der ReactiveSequence wird getestet, ob sich der Mensch in der Sicherheitszone aufhält. +Wenn dies nicht der Fall ist, kann die Ausführung weiter fortgesetzt werden. +Dies wird durch eine über dem Test angeordnete Inverter-Node erreicht. + +Nach diesem Schritt kann die Geschwindigkeitsanpassung vorgenommen werden, falls diese nötig ist. +Dies wird durch eine If-Then-Else Node erreicht. +Als Bedingung wird ein Test auf den Aufenthalt des Menschen in der Warnzone verwendet. +Wenn der Mensch sich in dieser befindet, wird die Geschwingigkeit auf 10\% gesetzt. +Sonst wird die Geschwindigkeit wieder auf 100\% erhöht. + +Nach dieser Sequenz kann der spezifische Teil für die gewünschte Applikation hinzugefügt werden. +In Abbildung \ref{tree_base_robot} wurde dies durch eine Wolke repräsentiert. + +\begin{figure}[] +\includegraphics[width=\textwidth]{img/MA-tree-base-robot} +\centering +\caption{BehaviorTree für das Ablegen von Objekten im Schrank} +\label{tree_base_robot} +\end{figure} + +\begin{figure}[] +\includegraphics[width=\textwidth]{img/MA-tree-robot-coex} +\centering +\caption{BehaviorTree für das Ablegen von Objekten im Schrank} +\label{tree_base_robot} +\end{figure} + +\begin{figure}[] +\includegraphics[width=\textwidth]{img/MA-tree-robot-coop} +\centering +\caption{BehaviorTree für das Ablegen von Objekten im Schrank} +\label{tree_base_robot} +\end{figure} + +\begin{figure}[] +\includegraphics[width=\textwidth]{img/MA-tree-robot-colab} +\centering +\caption{BehaviorTree für das Ablegen von Objekten im Schrank} +\label{tree_base_robot} +\end{figure} \subsection{Verhalten des Menschen} diff --git a/uml/subtree_deposit.puml b/uml/subtree_deposit.puml index ae32918..5ea9cf5 100644 --- a/uml/subtree_deposit.puml +++ b/uml/subtree_deposit.puml @@ -1,4 +1,4 @@ -@startmindmap +@startmindmap subtree_deposit skinparam Linetype ortho