# HG changeset patch # User schnalke@localhost.localdomain # Date 1210666739 -7200 # Node ID 4a9a222853692f83c04a0d0aae2c81f49286b077 # Parent 98f2974a3cb463dfcb476ac4479369e4dbf1e60e added new pictures about the robot arm; added content for collision control diff -r 98f2974a3cb4 -r 4a9a22285369 pics/collision-zones.png Binary file pics/collision-zones.png has changed diff -r 98f2974a3cb4 -r 4a9a22285369 pics/lynx6-terminology.png Binary file pics/lynx6-terminology.png has changed diff -r 98f2974a3cb4 -r 4a9a22285369 taetigkeit.tex --- a/taetigkeit.tex Tue May 13 08:12:51 2008 +0200 +++ b/taetigkeit.tex Tue May 13 10:18:59 2008 +0200 @@ -13,15 +13,31 @@ Der Algorithmus sollte möglichst allgemein sein und nicht nur mit genau unserer Roboteranordnung funktionieren. +\begin{figure}[hbt] %FIXME: where put this picture? + \centering + \label{fig:robot-terminology} + \includegraphics[width=0.8\textwidth]{pics/lynx6-terminology.png} + \caption{Terminologie des Roboterarms} +\end{figure} + +\paragraph{Das Problem} Kollisionserkennung ist einfach Abstandsberechnung von Objekten. Unsere Objekte sind Roboterarme, die sich als vier aneinander hängende Linien ansehen lassen --- jedenfalls aus Sicht der Kollisionserkennung. Das eigentliche Problem besteht also aus Abstandsberechnungen von Strecken (nicht Geraden) im Raum. Um nicht die komplizierte Berechnung von Streckenabständen durchführen zu müssen, habe ich jede Strecke durch eine Anzahl Punkte auf ihr ersetzt. Somit musste ich nur Punktabstände berechnen, was einfach ist; allerdings in größerer Anzahl. Ich berechnete die Abstände jedes Kollisionspunktes eines Roboters, mit jedem Kollisionspunkt jedes anderen Roboters.\footnote{Kollisionen innerhalb eines Roboterarms sollten durch die Kinematik abgefangen werden.} Da dabei, vereinfacht, jeder Punkt mit jedem verglichen wird, resultiert daraus eine quadratische Laufzeit: $O(n^{2})$. Für eine größere Anzahl von Robotern, oder mehr Kollisionspunkten pro Strecke, sollten wir also recht schnell viel Zeit brauchen. Diese Vorraussage wurde von den Performance-Messungen meines Teamspartners bestätigt. -Mit unseren vier Robotern konnte ich 16 Kollisionspunkte pro Knochen einfügen, ohne besonders viel Zeit zu verbrauchen; 32 Punkte waren gerade noch machbar. Ich entschied mich für vier Kollisionspunkt pro Knochen, denn dies führte zu einer voll ausreichenden Genauigkeit, wie Abbildung \ref{fig:kollisionszone} zeigt. %FIXME ref picture. +Mit unseren vier Robotern konnte ich 16 Kollisionspunkte pro Knochen einfügen, ohne besonders viel Zeit zu verbrauchen; 32 Punkte waren noch machbar. Ich entschied mich für vier Kollisionspunkt pro Knochen, denn dies führte zu einer voll ausreichenden Genauigkeit, wie Abbildung \ref{fig:kollisionszone} zeigt. +\begin{figure}[hbt] + \centering + \label{fig:kollisionszone} + \includegraphics[width=0.4\textwidth]{pics/collision-zones.png} + \caption{Hervorgehobene Kollisionszone bei vier Kollisionspunkt pro Knochen} +\end{figure} -% FIXME: insert schematic picture of robot arm +\paragraph{Programmablauf} +Als Ausgangsdaten habe ich die Positionen und Ausrichtungen der Roboter in der ``Welt'' und die sämtliche Gelenkwinkel. Aus diesen Daten habe ich die Welt-Koordinaten, also Koordinaten bezogen auf das globale Koordinatensystem, aller Gelenke berechnet. Mit den globalen Koordinaten führe ich die Kollisionsberechnung durch, denn diese liegen im gleichen Koordinatensystem und Abstandberechnungen sind somit einfach: $distance = \sqrt{\Delta x^{2} + \Delta y^{2} + \Delta z^{2}}$. + \section{Visualisierung}