Mercurial > docs > ps-bericht-ibm
comparison taetigkeit.tex @ 35:f7bc5299e59b
better figure captions (new command for that)
author | schnalke@localhost.localdomain |
---|---|
date | Tue, 17 Jun 2008 14:16:55 +0200 |
parents | 9d9e198cf876 |
children | c64bd51d3dd6 |
comparison
equal
deleted
inserted
replaced
34:410e839fe8b6 | 35:f7bc5299e59b |
---|---|
15 | 15 |
16 \begin{figure}[hbt] %FIXME: where put this picture? | 16 \begin{figure}[hbt] %FIXME: where put this picture? |
17 \centering | 17 \centering |
18 \label{fig:robot-terminology} | 18 \label{fig:robot-terminology} |
19 \includegraphics[width=0.8\textwidth]{pics/lynx6-terminology.png} | 19 \includegraphics[width=0.8\textwidth]{pics/lynx6-terminology.png} |
20 \caption{Terminologie des Roboterarms} | 20 \caption[Terminologie des Roboterarms \source{http://lynxmotion.com, bearbeitet}]{Terminologie des Roboterarms} |
21 \end{figure} | 21 \end{figure} |
22 | 22 |
23 \paragraph{Das Problem} | 23 \paragraph{Das Problem} |
24 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. | 24 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. |
25 | 25 |
30 | 30 |
31 \begin{figure}[hbt] | 31 \begin{figure}[hbt] |
32 \centering | 32 \centering |
33 \label{fig:kollisionszone} | 33 \label{fig:kollisionszone} |
34 \includegraphics[width=0.4\textwidth]{pics/collision-zones.png} | 34 \includegraphics[width=0.4\textwidth]{pics/collision-zones.png} |
35 \caption{Hervorgehobene Kollisionszone bei vier Kollisionspunkt pro Knochen} | 35 \caption[Kollisionszonen]{Hervorgehobene Kollisionszone bei vier Kollisionspunkt pro Knochen} |
36 \end{figure} | 36 \end{figure} |
37 | 37 |
38 | 38 |
39 \paragraph{Programmablauf} | 39 \paragraph{Programmablauf} |
40 Als Ausgangsdaten habe ich die Position und Ausrichtung der Roboter in der ``Welt'' und 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}}$. | 40 Als Ausgangsdaten habe ich die Position und Ausrichtung der Roboter in der ``Welt'' und 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}}$. |
58 | 58 |
59 \begin{figure}[hbt] | 59 \begin{figure}[hbt] |
60 \centering | 60 \centering |
61 \label{fig:svg-named} | 61 \label{fig:svg-named} |
62 \includegraphics[width=0.8\textwidth]{pics/svg-named.png} | 62 \includegraphics[width=0.8\textwidth]{pics/svg-named.png} |
63 \caption{Die generierte SVG-Grafik mit Beschriftungen} | 63 \caption[Generierte SVG-Grafik]{Die generierte SVG-Grafik mit Beschriftungen} |
64 \end{figure} | 64 \end{figure} |
65 | 65 |
66 \paragraph{Animation} | 66 \paragraph{Animation} |
67 Wenig später waren dann selbst die Einzelbilder teilweise zu umständlich, so dass der Wunsch nach einer animierten Darstellung des Geschehens aufkam. SVG-Animationen ausgeben zu lassen wäre deutlich komplizierter geworden, und diese können auch nur von wenigen Programmen dargestellt werden. Deshalb habe ich mit der Programmsammlung \emph{ImageMagick} aus dem SVG-Bildern ein animiertes GIF gemacht. Dieses stellte dann auch die Zeitdimension in den Bewegungen dar. Später wurden die GIFs dann durch komprimierte AVI-Filme (mit \emph{MEncoder} erstellt) ersetzt, da diese deutlich weniger Speicher verbrauchen und schneller erzeugt werden konnten. | 67 Wenig später waren dann selbst die Einzelbilder teilweise zu umständlich, so dass der Wunsch nach einer animierten Darstellung des Geschehens aufkam. SVG-Animationen ausgeben zu lassen wäre deutlich komplizierter geworden, und diese können auch nur von wenigen Programmen dargestellt werden. Deshalb habe ich mit der Programmsammlung \emph{ImageMagick} aus dem SVG-Bildern ein animiertes GIF gemacht. Dieses stellte dann auch die Zeitdimension in den Bewegungen dar. Später wurden die GIFs dann durch komprimierte AVI-Filme (mit \emph{MEncoder} erstellt) ersetzt, da diese deutlich weniger Speicher verbrauchen und schneller erzeugt werden konnten. |
68 | 68 |
120 | 120 |
121 \begin{figure}[hbt] | 121 \begin{figure}[hbt] |
122 \centering | 122 \centering |
123 \label{fig:captured-area} | 123 \label{fig:captured-area} |
124 \includegraphics[width=0.5\textwidth]{pics/captured-area.png} | 124 \includegraphics[width=0.5\textwidth]{pics/captured-area.png} |
125 \caption{Von der Kamera aufgenommener Bereich} | 125 \caption[Blickfeld der Kamera]{Von der Kamera aufgenommener Bereich} |
126 \end{figure} | 126 \end{figure} |
127 | 127 |
128 \paragraph{Heuristik} | 128 \paragraph{Heuristik} |
129 Bilderkennung ist nicht deterministisch und so können bei mehreren Durchläufen mit gleichen Eingangsbild unterschiedliche Bälle gefunden werden. Dies führte dazu, dass bei uns manchmal kein Ball gefunden wurde obwohl einer vorhanden war, ebenso wie gefundene Bälle an Stellen, wo keine waren. Insbesondere die Roboterarme wurden von Zeit zu Zeit als Ball erkannt. | 129 Bilderkennung ist nicht deterministisch und so können bei mehreren Durchläufen mit gleichen Eingangsbild unterschiedliche Bälle gefunden werden. Dies führte dazu, dass bei uns manchmal kein Ball gefunden wurde obwohl einer vorhanden war, ebenso wie gefundene Bälle an Stellen, wo keine waren. Insbesondere die Roboterarme wurden von Zeit zu Zeit als Ball erkannt. |
130 | 130 |
132 | 132 |
133 \begin{figure}[hbt] | 133 \begin{figure}[hbt] |
134 \centering | 134 \centering |
135 \label{fig:101balls} | 135 \label{fig:101balls} |
136 \includegraphics[width=0.7\textwidth]{pics/101balls.png} | 136 \includegraphics[width=0.7\textwidth]{pics/101balls.png} |
137 \caption{Unsere Trainingsbilder} | 137 \caption[Trainingsbilder]{Unsere Trainingsbilder} |
138 \end{figure} | 138 \end{figure} |
139 | 139 |
140 \paragraph{Ergebnis} | 140 \paragraph{Ergebnis} |
141 Alles in allem können wir aber sehr zufrieden mit unserer Ballerkennung sein. Wir haben eine konstante Erfolgsrate von über 90\% und schlechtes Licht oder ein teilweise verdeckter Ball wirken sich wenig aus. Gleichzeitig ist auch die Rate der Fehlerkennungen recht gering. Durch das invertierte Bild und hellem Ball auf dunklem Grund haben wir sowieso fast alle Fehlermöglichkeiten ausgeschlossen. Mit einem matten Untergrund war dann wirklich die letzte Irritationsgefahr gebannt und unser Vision-Modul arbeitete äußerst zuverlässig. | 141 Alles in allem können wir aber sehr zufrieden mit unserer Ballerkennung sein. Wir haben eine konstante Erfolgsrate von über 90\% und schlechtes Licht oder ein teilweise verdeckter Ball wirken sich wenig aus. Gleichzeitig ist auch die Rate der Fehlerkennungen recht gering. Durch das invertierte Bild und hellem Ball auf dunklem Grund haben wir sowieso fast alle Fehlermöglichkeiten ausgeschlossen. Mit einem matten Untergrund war dann wirklich die letzte Irritationsgefahr gebannt und unser Vision-Modul arbeitete äußerst zuverlässig. |
142 | 142 |
154 | 154 |
155 \begin{figure}[hbt] | 155 \begin{figure}[hbt] |
156 \centering | 156 \centering |
157 \label{fig:showcase-stand} | 157 \label{fig:showcase-stand} |
158 \includegraphics[width=1.0\textwidth]{pics/automatica-showcase-stand.jpg} | 158 \includegraphics[width=1.0\textwidth]{pics/automatica-showcase-stand.jpg} |
159 \caption{Unser Showcase am Stand von Matrix Vision} | 159 \caption[Der Showcase auf der Messe \source{privat}]{Unser Showcase am Stand von Matrix Vision} |
160 \end{figure} | 160 \end{figure} |
161 | 161 |
162 \begin{figure}[hbt] | 162 \begin{figure}[hbt] |
163 \centering | 163 \centering |
164 \includegraphics[width=0.8\textwidth]{pics/automatica-besucher.jpg} | 164 \includegraphics[width=0.8\textwidth]{pics/automatica-besucher.jpg} |
165 \caption{Interessierte Besucher} | 165 \caption[Messebesucher am Showcase \source{privat}]{Interessierte Besucher} |
166 \end{figure} | 166 \end{figure} |
167 | 167 |
168 | 168 |
169 | 169 |
170 | 170 |