01.03.2013 Aufrufe

Diplomarbeit (*.pdf - 5,3MB) - Faculty of Computer Science ...

Diplomarbeit (*.pdf - 5,3MB) - Faculty of Computer Science ...

Diplomarbeit (*.pdf - 5,3MB) - Faculty of Computer Science ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Technische Universität Dresden<br />

Fakultät Informatik<br />

Institut für S<strong>of</strong>tware- und Multimediatechnik<br />

<strong>Diplomarbeit</strong><br />

Thema:<br />

„Entwicklung einer virtuellen Laserbearbeitungsanlage“<br />

vorgelegt von:<br />

Helmar Behrends<br />

geb. am 15.01.1979 in Lutherstadt- Wittenberg.<br />

Matrikelnummer: 2620640<br />

Eingereicht am 30. Juni 2005.<br />

Betreuender Hochschullehrer : Pr<strong>of</strong>. Dr. M. Wacker<br />

Betreuer des Fraunh<strong>of</strong>er IWS : Dr. S. Völlmar


Erklärung<br />

Hiermit versichere ich, diese Arbeit selbständig verfasst und nur die<br />

angegebenen Quellen benutzt zu haben.<br />

Helmar Behrends<br />

2


Inhaltsverzeichnis<br />

1 Einleitung ................................................................................................. 8<br />

1.1 Das Fraunh<strong>of</strong>er „Institut für Werkst<strong>of</strong>f- und Strahlentechnik“........ 9<br />

1.2 Problemstellung.............................................................................. 10<br />

1.3 Zielstellung..................................................................................... 11<br />

1.4 Gliederung der Arbeit..................................................................... 12<br />

2 Analyse ................................................................................................... 13<br />

2.1 Beschreibung der vorhandenen Situation am IWS ........................ 13<br />

2.1.1 Einführung Laserstrahlschweißen......................................... 13<br />

2.1.2 Beispiel 1: XXL- Anlage...................................................... 14<br />

2.1.3 Einführung Laserstrahl- Auftragschweißen .......................... 15<br />

2.1.4 Beispiel 2: Modulares Pulverdüsensystem zum<br />

Auftragschweißen Lasertechnik (COAXn).......................... 18<br />

2.1.5 Simulationsumgebungen ....................................................... 19<br />

2.2 Anforderungsermittlung................................................................. 23<br />

2.2.1 Vorbetrachtung...................................................................... 23<br />

2.2.2 Konstruktionswerkzeug......................................................... 24<br />

2.2.3 Simulation ............................................................................. 29<br />

2.2.4 Kollisionserkennung.............................................................. 29<br />

2.3 Zusammenfassung.......................................................................... 30<br />

3 Design ..................................................................................................... 32<br />

3.1 Konstruktion / Spiegelung der Kinematik...................................... 32<br />

3.2 Simulation ...................................................................................... 36<br />

3.3 Kollisionskontrolle......................................................................... 40<br />

3.3.1 Vorbetrachtung...................................................................... 40<br />

3.3.2 Analyse vorhandener Verfahren............................................ 41<br />

3.3.3 Broad Phase (Strukturanalyse).............................................. 42<br />

3.3.4 Narrow Phase ........................................................................ 47<br />

3.3.5 Oriented Bounding Box Trees (OBB-Trees) ........................ 51<br />

3.3.6 OBB Überlappungstest.......................................................... 60<br />

3.3.7 Primitivtest ............................................................................ 61<br />

3.3.8 Integration in die Simulation................................................. 64<br />

3.3.9 Kontinuierliche Kollisionserkennung ................................... 66<br />

4 Implementierung ................................................................................... 70<br />

4.1 Konstruktion................................................................................... 70<br />

4.1.1 Berechnung der Transformationen........................................ 75<br />

4.1.2 Wiederverwendung von Komponenten................................. 77<br />

4.2 Simulation ...................................................................................... 79<br />

4.2.1 Ablaufsteuerung .................................................................... 79<br />

3


4.2.2 Konfiguration ........................................................................ 81<br />

4.2.3 Entwicklung eigener CNC-Interpreter .................................. 83<br />

4.3 Kollisionskontrolle......................................................................... 87<br />

4.3.1 Berechnung der OBB- Parameter.......................................... 87<br />

4.3.2 OBB Aktualisierung.............................................................. 88<br />

4.3.3 OBB-Überlappungstest und Traversierung........................... 89<br />

4.3.4 Primitivtest ............................................................................ 95<br />

4.3.5 Konfiguration ........................................................................ 95<br />

4.3.6 Anzeige der Kollisionen........................................................ 96<br />

4.4 Schnittstellen .................................................................................. 97<br />

4.5 Persistenzstrategie .......................................................................... 99<br />

4.6 VR- Darstellung ........................................................................... 101<br />

4.6.1 Chromium............................................................................ 101<br />

4.6.2 XML3D ............................................................................... 103<br />

5 Test, Anwendungsbeispiele................................................................. 105<br />

5.1 Kuka-Roboter und -Komponenten ............................................... 105<br />

5.2 XXL-Anlage................................................................................. 107<br />

5.3 Laserstrahl-Auftragschweißen ..................................................... 110<br />

6 Zusammenfassung............................................................................... 112<br />

6.1 Fazit und Ausblick ....................................................................... 114<br />

4


Abbildungsverzeichnis<br />

Abb. 1-1 Anwendungsgebiete des IWS ............................................................. 9<br />

Abb. 2-1 Modell XXL- Anlage ........................................................................ 14<br />

Abb. 2-2 Achsanordnung zum beidseitigen 3D-Laserstrahlschweißen ........... 15<br />

Abb. 2-3 Laserstrahl- Auftragschweißen [Völlmar04] .................................... 16<br />

Abb. 2-4 Schema des Gesamtvorgangs............................................................ 17<br />

Abb. 2-5 Diodenlaser und Beschichtungskopf, Kombination mit Roboter ... 18<br />

Abb. 2-6 3 Seiten- Cave des IWS, Navigation mit Flystick............................. 19<br />

Abb. 2-7 Fadal- Anlage: reale Maschine und VRML- Simulation .................. 20<br />

Abb. 2-8 Funktionsschema WireGL/ Chromium ............................................. 21<br />

Abb. 2-9 Übersicht Standardverbindungen [Webh<strong>of</strong>er04] .............................. 25<br />

Abb. 2-10 <strong>of</strong>fene und geschlossene kinematische Ketten................................ 26<br />

Abb. 2-11 Erstellen des kinematischen Modells (Bsp. Kuka KR3)................. 26<br />

Abb. 2-12 Kinematische Kette für KR3 (ohne Kopf) ...................................... 27<br />

Abb. 2-13 Bewegungsrichtungen der XXL- Anlage........................................ 27<br />

Abb. 2-14 Kinematische Ketten der XXL- Anlage (Ausschnitt) .................... 28<br />

Abb. 3-1 Beispiel eines Szenegraphen ............................................................ 32<br />

Abb. 3-2 Erstellen von Baugruppen ................................................................. 33<br />

Abb. 3-3 Szenegraph mit zwei fest angeordneten Baugruppen ....................... 34<br />

Abb. 3-4 Szenegraph mit kinematisch verbundenen Baugruppen ................... 34<br />

Abb. 3-5 Transformationen in einer Hierarchie ............................................... 35<br />

Abb. 3-6 Spezifikation der Bauteiltransformationen und der Achsen ............. 35<br />

Abb. 3-7 Architekturmuster Interpreter im Anwendungskontext .................... 36<br />

Abb. 3-8 Abstrakte Maschine........................................................................... 37<br />

Abb. 3-9 Klassendiagramm CNC- Interpreter ................................................. 38<br />

Abb. 3-10 Zeitliche Diskretisierung der CNC-Programme.............................. 39<br />

Abb. 3-11 Parallelisierung der CNC-Programme (∆ t = 100ms) ..................... 39<br />

Abb. 3-12 Repräsentation von 3D- Modellen nach [Gotttschalk00]................ 41<br />

Abb. 3-13 Kuka-Roboter Kr3........................................................................... 42<br />

Abb. 3-14 Constraints des Kr3......................................................................... 43<br />

Abb. 3-15 Änderung der Parameter einer Gelenkverbindung.......................... 44<br />

Abb. 3-16 Anzahl der Kollisionstests mit/ohne Kohärenz............................... 45<br />

Abb. 3-17 Ermittlung der zu testenden Objektpaare........................................ 46<br />

Abb. 3-18 Kollisionserkennung ....................................................................... 46<br />

Abb. 3-19 Beispiele für Bounding Volumes .................................................... 48<br />

Abb. 3-20 Bounding Volume Hierarchie aus Sphären..................................... 49<br />

Abb. 3-21 Konvergenz einiger Bounding Volume .......................................... 51<br />

Abb. 3-22 vierstufige Hierarchie aus OBBs (S.6)............................................ 51<br />

Abb. 3-23 Binärbaum (l.) u. entsprechender Quadtree (r.) [Mezger01] .......... 52<br />

Abb. 3-24 Kollision zweier Binärbaumblätter (l.), Quadtree (r.) [Mezger01]. 52<br />

Abb. 3-25 Überlappung der Wurzelknoten [Mezger01] .................................. 53<br />

Abb. 3-26 Aufbau einer Bounding Volume Hierarchie ................................... 53<br />

Abb. 3-27 Auswirkung innerer Punkte auf die OBB- Berechnung.................. 55<br />

Abb. 3-28 Auswirkung ungleichmäßiger Sampling- Raten ............................. 55<br />

Abb. 3-29 Integrieren über den Primitiven ...................................................... 56<br />

5


Abb. 3-30 Auswirkungen kleiner Linien/Flächensegmente............................. 56<br />

Abb. 3-31 Verwendung der konvexen Hülle.................................................... 56<br />

Abb. 3-32 L ist separierende Achse für die OBBs A und B ............................. 60<br />

Abb. 3-33 Verfahren von Möller (l.) und Held (r.) .......................................... 62<br />

Abb. 3-34 Geometrische Interpretation für den positiven Fall ........................ 63<br />

Abb. 3-35 Überlappungstest zweier Dreiecke.................................................. 64<br />

Abb. 3-36 Integration der Kollisionskontrolle in die Simulation..................... 65<br />

Abb. 3-37 Schraubenbewegung als allgemeine Starrkörperbewegung............ 66<br />

Abb. 3-38 Kollisionserkennung zwischen zwei Kanten .................................. 68<br />

Abb. 4-1 „Import CAD-Object“-Dialog........................................................... 70<br />

Abb. 4-2 Segmentierung der Baugruppen........................................................ 71<br />

Abb. 4-3 Place-Dialog...................................................................................... 71<br />

Abb. 4-4 Place-Dialog und eingefügtes Bauteil............................................... 72<br />

Abb. 4-5 Szene mit Sockel............................................................................... 72<br />

Abb. 4-6 Zusammenstellen des Rumpfes......................................................... 73<br />

Abb. 4-7 Festlegen der Gelenkparameter......................................................... 73<br />

Abb. 4-8 „Place“-Dialog .................................................................................. 74<br />

Abb. 4-9 Positionierung auf dem Sockel.......................................................... 74<br />

Abb. 4-10 Aufsetzen des Rumpfes auf den Sockel .......................................... 75<br />

Abb. 4-11 Szene mit Sockel und Rumpf.......................................................... 75<br />

Abb. 4-12 Anfügen eines Bauteils im Szenegraphen....................................... 76<br />

Abb. 4-13 Wiederverwendung von modellierten Komponenten ..................... 77<br />

Abb. 4-14 "Import from Project"-Dialog ......................................................... 78<br />

Abb. 4-15 Beeinflussung des Zeitverhaltens.................................................... 79<br />

Abb. 4-16 Thread der Ablaufsteuerung............................................................ 80<br />

Abb. 4-17 Dialog zur Konfiguration der CNC-Simulation.............................. 81<br />

Abb. 4-18 Auswählen der CNC-Interpreter -Klasse ........................................ 81<br />

Abb. 4-19 dynamisches Laden des CNC-Interpreters...................................... 82<br />

Abb. 4-20 Klassendiagramm CNC-Interpreter ................................................ 83<br />

Abb. 4-21 Quellcode des DefaultCNCInterpreter's ......................................... 84<br />

Abb. 4-22 DefaultCNCCommand- Implementierung ...................................... 85<br />

Abb. 4-23 Bestimmung der OBB-Parameter ................................................... 87<br />

Abb. 4-24 Rekursionsbaum für einen BV- Hierarchietest [Mezger01] ........... 89<br />

Abb. 4-25 Algorithmus für Test zweier BVHs ................................................ 90<br />

Abb. 4-26 Implementierung des OBB-Überlappungstests............................... 94<br />

Abb. 4-27 Konfiguration der Kollisionserkennung.......................................... 95<br />

Abb. 4-28 Darstellung der kollidierenden Primitive........................................ 96<br />

Abb. 4-29 Transparente Verwendung der Schnittstellen (Bsp. DCAM) ......... 97<br />

Abb. 4-30 Klassendiagramm der Remote-Control -Schnittstelle..................... 98<br />

Abb. 4-31 XML-Struktur des Datenformats ................................................... 99<br />

Abb. 4-32 Abbildung von Baugruppen auf die verwendete XML-Struktur .. 100<br />

Abb. 4-33 Oberfläche der Anwendung .......................................................... 101<br />

Abb. 4-34 VR-Version (Chromium) der Anwendung.................................... 102<br />

Abb. 4-35 Anzeige de Details der Kollisionen............................................... 102<br />

Abb. 4-36 Verteilung einer Szene auf drei Displays...................................... 102<br />

Abb. 4-37 Architektur des Gesamtsystems nach [Metze].............................. 103<br />

Abb. 4-38 Darstellung einer Szene in XML3D.............................................. 104<br />

6


Abb. 5-1 Kuka-Roboter und -Komponenten.................................................. 106<br />

Abb. 5-2 XXL-Anlage.................................................................................... 107<br />

Abb. 5-3 Laserschweißköpfe.......................................................................... 108<br />

Abb. 5-4 Umsetzung der Faltenbalge als zylindrische Objekte ..................... 109<br />

Abb. 5-5 Reis-Roboter mit Laserkopf............................................................ 110<br />

Abb. 5-6 Reis-Roboter mit Werkstück........................................................... 111<br />

7


1 Einleitung<br />

Aktuelle Veranstaltungen wie die im April stattgefundene Hannover-Messe<br />

und die Ende Juni diesen Jahres stattfindenden IFF- Wissenschaftstage zeigen<br />

einen klaren Trend auf: In zunehmendem Maße sollen »Virtual Reality und<br />

Augmented Reality“ zum Planen, Testen und Betreiben technischer Systeme<br />

eingesetzt werden, um kürzere Innovationszyklen für die Entwicklung von<br />

Produkten, Prozessen und Systemen zu erreichen. Dies erfordert neue<br />

Technologien im CAE-Bereich. Eine aktuelle Lösung ist das Virtual<br />

Engineering:<br />

Virtual Engineering (VE) bietet dabei für die einzelnen Projektphasen:<br />

Planung, Simulation und 3D- Visualisierung spezielle Konzepte an:<br />

Während der Planungsphase sollen untereinander vernetzte - auch<br />

örtlich verteilte - Planungsteams mit gemeinsam erstellten digitale<br />

Modellen in ihrer Entscheidungsfindung und ihrem Agieren unterstützt<br />

werden, um eine konsistente und sichere Planungsbasis zu schaffen.<br />

In der Simulation werden unter Verwendung von CAD-Layoutdaten<br />

und statischen Planungsergebnissen dynamische Sachverhalte in<br />

Simulationsmodellen formuliert. Das System als Simulationsmodell<br />

gestattet die Vorwegnahme der Realität in einer simulierten Virtualität<br />

und erlaubt eine Betrachtung der dynamischen Prozesse über die Zeit.<br />

Die korrekte Dimensionierung der Anlagen, die Überprüfung von<br />

Funktionalitäten sowie die Untersuchung von Steuerungskriterien und<br />

Störfallsituationen werden einfach und kostengünstig realisierbar.<br />

3D-Visualiserung meint die individuelle, auf ihre Aufgabenfelder<br />

abgestimmte dreidimensionale Visualisierung, um somit<br />

unternehmensweite Entscheidungen zu unterstützen. Des Weiteren<br />

bieten Abbildungen, Filme und VR im Bereich Marketing und<br />

Akquisition Einblick in das Potential der entwickelten Technologie.<br />

Diesem Trend folgend beschäftigt sich das Fraunh<strong>of</strong>er "Institut für Werkst<strong>of</strong>f<br />

und Strahlentechnik" (IWS) seit geraumer Zeit mit virtuellen Technologien und<br />

entwickelt zusätzlich eigene, speziell an seine Bedürfnisse angepasste,<br />

S<strong>of</strong>twarekomponenten in den Bereichen CAD,CAM u. CAE.<br />

8


Die vorliegende Arbeit ist ein Bestandteil dieser Entwicklung des VE und<br />

konzentriert sich im wesentlichen auf die Phasen Simulation und 3D-<br />

Visualisierung. Ziel ist es eine virtuelle Simulationsumgebung speziell für den<br />

Anwendungsfall der Lasermaterialbearbeitung zu erstellen.<br />

Im folgenden Abschnitt sollen nun zunächst das Fraunh<strong>of</strong>er IWS kurz<br />

vorgestellt, anschließend die Problemstellung definiert und abschließend eine<br />

Zusammenfassung der Zielstellungen dargelegt werden.<br />

1.1 Das Fraunh<strong>of</strong>er „Institut für Werkst<strong>of</strong>f- und Strahlentechnik“<br />

Das IWS betreibt anwendungsorientierte Forschung und Entwicklung von den<br />

physikalischen und werkst<strong>of</strong>ftechnischen Grundlagen bis hin zur System- und<br />

Anlagenentwicklung. Die Schwerpunkte sind:<br />

Lasertechnik (z.B. Laserschweißen, Laserschneiden, Laserbeschichten,<br />

Laserreinigen)<br />

Oberflächentechnik (z.B. Auftragschweißen, Dünnschichttechnologie).<br />

Diese vielfältigen Technologien (siehe auch Abbildung 1-1) sind für die<br />

verschiedensten Bereiche und Branchen der Wirtschaft interessant.<br />

Insbesondere in den Branchen Automobilindustrie, Luft- und Raumfahrttechnik<br />

und Werkzeug- und Formenbau bietet das IWS Dienstleistungen an.<br />

Abb. 1-1 Anwendungsgebiete des IWS<br />

Der übliche Ablauf sieht vor, dass ein Unternehmen A dem Fraunh<strong>of</strong>er IWS<br />

ein vorhandenes Werkstück mit zugehörigem CAD-Modell für die weitere<br />

Bearbeitung zur Verfügung stellt.<br />

Das IWS erstellt dann entsprechend der Problemstellung eine Bearbeitungsstrategie<br />

z.B. in Form von Laserschweißverfahren, Laserschweißkomponenten


für Industrieroboter oder auch komplett neu entwickelten Schweißanlagen, die<br />

für die Weiterbearbeitung des Werkstücks nötig sind.<br />

Diese Art der Erforschung und Untersuchung von neuen Technologien bzw.<br />

neuen Anwendungsspektren auf den oben angesprochenen Gebieten erfordern<br />

einen sehr hohen informationstheoretischen Aufwand. Der Kostenfaktor für die<br />

Realisierung eines prototypischen Modells wächst dabei unproportional mit der<br />

Komplexität der zu entwickelnden Technologie.<br />

Zur Auflösung dieser Problemstellungen wird derzeitig die Forschung für<br />

virtuelle Räume als Visualisierungs- und Simulationsumgebung am IWS<br />

vorangetrieben. Virtuelle Räume bieten die individuelle Freiheit für<br />

ergebnisorientiertes Forschen und Experimentieren von technologisch<br />

komplexen Gebilden für die Einhaltung von endlichen wirtschaftlichen<br />

Restriktionen.<br />

1.2 Problemstellung<br />

Aktuell werden am IWS zahlreiche S<strong>of</strong>twareprodukte aus den Bereichen CAD,<br />

CAM und CAE eingesetzt. Speziell für den Anwendungsfall Simulation und<br />

3D-Visualiserung von Laserbearbeitungsanlagen wurden diese jedoch aus<br />

unterschiedlichen anwendungsbedingten Gründen (z.B. mangelnde oder nur<br />

eingeschränkt nutzbare Funktionalitäten, Möglichkeiten der VR- Darstellung)<br />

als mehr oder minder geeignet eingeschätzt.<br />

Probleme ergeben sich zusätzlich in lizenzrechtlichen Fragestellungen. Hierbei<br />

gilt, dass jede speziell vom IWS gewünschte Erweiterung der Funktionalität<br />

einer vorhandenen extern entwickelten S<strong>of</strong>tware mit erheblichen Kosten und<br />

mit hohem Kommunikationsaufwand mit dem Hersteller verbunden ist.<br />

Speziell die Auslieferung von S<strong>of</strong>twareprodukten, in Form von mit externer<br />

S<strong>of</strong>tware erstellten Komponenten, an Kunden des IWS stellt dabei <strong>of</strong>t ein<br />

lizenzrechtliches Problem dar.<br />

Die Entscheidung eine eigene Simulationsumgebung zu erstellen, die speziell<br />

an die Bedürfnisse des IWS und dessen Kunden angepasst werden kann, ist<br />

damit ersichtlich.<br />

Einen weiteren Vorteil einer Eigenentwicklung stellt die Möglichkeit der freien<br />

Gestaltung der Schnittstellen dar. Diese können so angepasst werden, dass sich<br />

die neu erstellte S<strong>of</strong>tware problemlos in den vorhandenen Workflow<br />

integrieren lässt und bereits am IWS entwickelte Komponenten auf diese Art<br />

und Weise weiterverwendet werden können. Die möglichst transparente und<br />

flexible Schnittstellengestaltung ist damit eine wesentliche Anforderung an<br />

diese Arbeit.<br />

Die detaillierten Zielstellungen der vorliegenden Arbeit unter Berücksichtigung<br />

der bisher dargestellten Anforderungen sollen im folgenden Abschnitt<br />

zusammengefasst werden.<br />

10


1.3 Zielstellung<br />

Mit Hilfe dreidimensionaler Simulation sollen die kinematischen<br />

Eigenschaften von Maschinen bzw. Maschinenelementen mit Schwerpunkt der<br />

Anwendung bei der Lasermaterialbearbeitung untersucht werden.<br />

Dazu soll ein Programmsystem erstellt werden, welches es ermöglicht,<br />

ausgehend von technischen Zeichnungen oder vorhandenen CAD- Daten, ein<br />

funktionales Abbild der Maschine zu erstellen und dessen einzelne<br />

Maschinenelemente entsprechend ihren kinematischen Eigenschaften<br />

(Rotationen, Translationen etc.) zu verknüpfen.<br />

Der Bewegungsablauf der Maschine wird für ausgewählte Bauteile und<br />

technischen Zielstellungen (z.B. Härten und Auftragsschweißen) an Hand von<br />

Programmen aus technologischen CAD/CAM in das Maschinentool importiert<br />

und die Technologie an der virtuellen Maschine nachvollzogen.<br />

Parallel dazu soll jederzeit eine detaillierte Kollisionskontrolle erfolgen<br />

können, um so bereits in der Simulationsphase eventuelle Konstruktionsmängel<br />

der Maschinenelemente und Fehler in den Anlagen- Programmen aufdecken zu<br />

können. Zur Aufklärung unübersichtlicher Situationen in der 3D- Szene sollte<br />

der Export in eine virtuelle Anlage ermöglicht werden.<br />

In einem weiteren Bearbeitungsschritt soll, ausgehend von der Analyse durch<br />

Kollisionskontrolle ein programminternes Bearbeiten des Bewegungsablaufs<br />

und der Maschinenelemente ermöglicht werden. Hierzu gehören das Entfernen,<br />

Hinzufügen und Bearbeiten der Maschinenelemente über eine möglichst<br />

intuitive und zugleich leistungsfähige Benutzerschnittstelle.<br />

Zusammenfassend ergeben sich folgende Funktionalitäten:<br />

1) Werkzeug zur Konstruktion einer generischen Maschine (Beispiel:<br />

Roboter und Portalanlage).<br />

2) Spiegelung der Kinematik einer Bearbeitung in einer Simulation.<br />

3) Kollisionskontrolle beim Bewegungsablauf und Identifizierung der<br />

Kollisionspunkte<br />

4) Ermöglichung der intuitiven Modifikation von Maschinenelementen<br />

und Bahndaten.<br />

Die volle Funktionalität der virtuellen Bearbeitungsanlage sollte auf<br />

entsprechend ausgerüstetem PC möglich sein, der Export in eine VR-Anlage<br />

sollte so <strong>of</strong>fen gehalten werden, dass die Rückgabe von Informationen aus der<br />

Anlage in die Simulation später möglich ist. Die Schnittstellen können in der<br />

Arbeit nach den Erfordernissen der Programmentwicklung gestaltet werden.<br />

11


Ihre Beschreibung muss die nachträgliche Gestaltung nach den industriellen<br />

Normen (z.B. RRSII) ermöglichen<br />

1.4 Gliederung der Arbeit<br />

Um einen möglichst systematischen Entscheidungsprozess zu vollziehen,<br />

Handlungsspielräume problemorientiert einzugrenzen und dem Leser der<br />

Arbeit einen möglichst intuitiven Einstieg in die Problematik zu bieten, liegt es<br />

nahe, bei der Planung und Durchführung eines Projektes auf bewährte<br />

Strategien im Entwicklungsprozess zurückzugreifen. In der vorliegenden<br />

Arbeit soll dies der für die S<strong>of</strong>twareentwicklung klassische Weg nach<br />

[Sommerville] und [Balzert] sein. Dieser besteht aus den Kernprozessen<br />

Analyse, Entwurf, Implementierung und Test, welche sich somit als<br />

Gliederung anbieten.<br />

12


2 Analyse<br />

Im folgenden sollen alle Anforderungen an die zu erstellende Anwendung<br />

ermittelt werden. Typische Fragestellungen sind: „Welches System soll<br />

entwickelt werden?“, „Was sind die Anforderungen des Kunden?“ und „Ist es<br />

möglich, das geforderte System zu realisieren?“.<br />

Die Analysephase beginnt üblicherweise mit der Feststellung des Ist-<br />

Zustandes. Dieser wird im folgenden Abschnitt dargestellt.<br />

2.1 Beschreibung der vorhandenen Situation am IWS<br />

Da die Aufgabenstellung für die Simulation den Anwendungsfall Laserschweißen<br />

im Allgemeinen vorsieht, soll anhand zweier Beispiele die<br />

zugrundeliegende Technologie erläutert werden. Als Einstieg in die Thematik<br />

ist jedem Beispiel eine kurze Erläuterung der Besonderheiten der jeweiligen<br />

Technologie vorangestellt. In Abschnitt 2.1.5 werden dann die zu den<br />

dargestellten Technologien bereits existierenden Simulationsumgebungen<br />

untersucht.<br />

2.1.1 Einführung Laserstrahlschweißen<br />

Das Laserstrahlschweißen stellt ein Fügeverfahren dar, das gekennzeichnet ist<br />

durch:<br />

• tiefe und schlanke Schweißnähte mit Einschweißtiefen bis ca. 20 mm,<br />

• einen geringen Energieeintrag und damit geringen Schweißverzügen,<br />

• hohen Schweißgeschwindigkeiten im Bereich von mehreren m/min<br />

sowie<br />

• einer hohen Flexibilität der zu verschweißenden Geometrien (3D-<br />

Formen).<br />

Mit dem Fügeverfahren Laserstrahlschweißen lassen sich sowohl Eisenmetalle<br />

(z.B. Baustahl) als auch schweißgeeignete Nichteisenmetalle (z.B. Aluminium,<br />

Titan, Magnesium u. Kupfer) verschweißen.<br />

Das Laserstrahlschweißen kommt in fast allen Bereichen des Fahrzeug-,<br />

Maschinen-, Anlagen-, Apparate- und Schiffbaus als hocheffizientes und


flexibles Fügeverfahren zum Einsatz. Die verarbeiteten Stähle reichen von<br />

unlegierten Kohlenst<strong>of</strong>fstählen, niedriglegierten Einsatzstählen über höher und<br />

hochfeste Feinkornbaustähle bis zu hochlegierten korrosionsbeständigen<br />

Stählen.<br />

2.1.2 Beispiel 1: XXL- Anlage<br />

Zur Technologieentwicklung des Laserstrahlschweißens von sehr großen 3D-<br />

Teilen für die Luft- und Raumfahrt investierte das Fraunh<strong>of</strong>er Institut für<br />

Werkst<strong>of</strong>f- und Strahltechnik (IWS) Dresden in eine neuartige XXL-<br />

Laserstrahlschweißanlage (Abb. 2-1).<br />

Abb. 2-1 Modell XXL- Anlage<br />

Diese Anlage erlaubt die Bearbeitung von 3D-Strukturelementen mit den<br />

Abmessungen 10 x 3 x 1 m und wurde vom IWS Dresden und den Firmen<br />

Airbus Deutschland, Schuler Held Lasertechnik Dietzenbach und Ibs-<br />

Automation Chemnitz konzipiert, hergestellt und in Betrieb genommen. Ibs-<br />

Automation entwickelte und lieferte die gesamte Steuerungstechnik<br />

einschließlich S<strong>of</strong>tware mit CNC- Betriebssystemerweiterungen und<br />

Postprozessor zur automatisierten NC-Programmgenerierung.<br />

Da aus Gründen der Nahtausbildung, der Belastbarkeit und des Verzuges beim<br />

Schweißen von Aluminiumstrukturen mit T-Naht beidseitig gleichzeitig<br />

geschweißt werden muss, sind im Anlagenkonzept zwei mechanisch<br />

unabhängige Schweißköpfe vorgesehen. Mit Hilfe von zwei CNC-Steuerungen<br />

Sinumerik 840D werden die Bewegungen der beiden Schweißköpfe und einer<br />

mitlaufenden Spanntechnik synchronisiert. Die Orientierung des Laserstrahls<br />

im Raum wird mit drei Rundachsen A, B und C realisiert (Abb. 2-2). Die dritte<br />

Rundachse ist notwendig, weil das qualitätsgerechte Schweißen von<br />

Aluminium die Zuführung von Zusatzwerkst<strong>of</strong>f bedingt und somit eine<br />

Positionierung des Schweißkopfes um den Tool Centre Point (TCP) notwendig<br />

wird. Der zusätzlich geforderte flache Anstellwinkel des Laserstrahls zur<br />

14


Grundfläche hat eine Umlenkung des fokussierten Laserstrahls mittels HD-<br />

Spiegel nahe dem TCP zur Folge. Außerdem ist im Vorlauf zum TCP für jeden<br />

Schweißkopf ein optischer Nahtführungssensor montiert. Die prinzipielle<br />

Achsanordnung zum sensorgeführten beidseitig gleichzeitigen 3D-<br />

Laserstrahlschweißen zeigt Abbildung 2-2.<br />

Abb. 2-2 Achsanordnung zum beidseitigen 3D-Laserstrahlschweißen<br />

Synchrone 3D- Nahtführung<br />

Eine wesentliche Forderung zur Programmierung der CNC-Steuerung besteht<br />

darin, dass auf Grundlage eines CAD-Datenfiles die Soll-Schweißbahn mit<br />

Hilfe eines Postprozessors zu berechnen ist. Die Geometriedaten im<br />

berechneten NC-Programm sollen dabei im Werkstückkoordinatensystem der<br />

Maschine vorliegen (TCP- Programmierung). Der spezielle Postprozessor<br />

wurde im Rahmen des Projektes durch ibs entwickelt. Aus der in Abbildung 2-<br />

2 dargestellten Anordnung der Rundachsen ist ersichtlich, dass für die TCP-<br />

Programmierung eine kinematische 6-Achs-Transformation erforderlich ist.<br />

Zur Ausführung des beidseitig gleichzeitigen 3D-Laserstrahlschweißen führen<br />

beide Schweißköpfe ein automatisch generiertes NC-Programm mit gleichen<br />

Bahnpunkten aus. Neu entwickelte Strukturen im CNC-Betriebssystem sorgen<br />

dafür, dass die NC-Programme für beide Köpfe synchron abgearbeitet werden<br />

und generieren bei Überschreitung einer vorgegebenen Abweichung eine<br />

Fehlermeldung bzw. stoppen die Laserschweißanlage.<br />

2.1.3 Einführung Laserstrahl- Auftragschweißen<br />

Wie alle Maschinenteile sind auch Rotoren von Turbinen und Flugzeugtriebwerken<br />

den Gesetzen allen Irdischen unterworfen: Vielfältige Einflüsse im<br />

rauen Betrieb setzen ihnen zu. In einer neuen, als »Bladed Disks» (Blisks)<br />

bezeichneten Bauweise werden sie nicht mehr wie früher aus mehreren Teilen<br />

zusammengesetzt, sondern aus Gründen der Festigkeit, Kompaktheit und<br />

Wirtschaftlichkeit in einem Stück gefertigt. Sollten jedoch die Schaufeln<br />

(Blades) zu sehr verschlissen oder etwa durch Vogelschlag beschädigt sein,<br />

lassen sie sich nicht mehr einfach von der Scheibe (Disk) abnehmen und<br />

austauschen. Eine neue Blisk schlägt mit typischerweise 35 000 bis 60 000<br />

15


Euro zu Buche. Sechs- bis siebenmal kostengünstiger ist eine Instandsetzung<br />

durch Direct Metal Deposition, das auf dem Laserstrahl- Präzisions- Auftragschweißen<br />

basiert. In der Luftfahrtindustrie ist dieses Reparaturverfahren im<br />

Kommen – im Fahrzeugbau werden Umformwerkzeuge damit bereits serienmäßig<br />

wieder auf Vordermann gebracht.<br />

Beim Laserstrahl-Auftragschweißen handelt es sich um ein generierendes<br />

Fertigungsverfahren, das gegenüber spanenden Methoden immer dann im<br />

Vorteil ist, wenn Einzelstücke oder kleinere Serien schnell erzeugt oder eben<br />

individuell repariert werden sollen. Zunächst wird das beschädigte Bauteil<br />

dreidimensional gescannt. Ein <strong>Computer</strong>programm (LAVA) berechnet die<br />

physikalischen Eigenschaften der Schweißraupe. Eine am Institut<br />

mitentwickelte S<strong>of</strong>tware (DCAM) steuert auch die Bahn des Lasers, der Pulver<br />

aus Titanlegierungen aufschweißt und so die schadhafte Stelle aus vielen<br />

»Schweißraupen« (Abb. 2-3) schichtweise rekonstruiert. Die gesamte<br />

Prozesskette ist geschlossen und läuft von der Datenerfassung über das<br />

Schweißen bis zur Endbearbeitung automatisiert ab (Abb. 2-4).<br />

Abb. 2-3 Laserstrahl- Auftragschweißen<br />

Bevor mit der Erläuterung des zweiten Beispiels begonnen wird, soll zunächst<br />

auf die Vorgehensweise beim Laserstrahl-Auftragschweißen in Hinblick auf<br />

den zu erstellenden Anforderungskatalog eingegangen werden. Dieser Ablauf<br />

ist typisch für zahlreiche Anwendungsgebiete des IWS und soll daher,<br />

unabhängig von konkreten Beispielen, noch etwas detaillierter untersucht<br />

werden.<br />

Die Darstellung der Prozesskette für die Verarbeitung einzelner Werkstücke in<br />

Abb. 2-4 zeigt eine wichtige Problematik auf. Es wird ersichtlich, dass u.U. bis<br />

zu vier unabhängig voneinander agierende Programme (inkl. CAD- u.<br />

Visualisierungss<strong>of</strong>tware) für die Bearbeitung eines einzelnen Werkstücks<br />

notwendig sind. Diese Situation wird vom IWS als äußerst hinderlich<br />

eingeschätzt. Um diesem Problem zu begegnen, sollte die zu erstellende<br />

Simulationss<strong>of</strong>tware daher besonders integrative Konzepte berücksichtigen.<br />

Denkbar wäre dazu beispielsweise, dass ein Starten der Simulation aus einer<br />

16


anderen Anwendung heraus und ein Datenaustausch zwischen diesen beiden<br />

Programmen ermöglicht wird. Dieser Vorgang sollte dabei für den Anwender<br />

möglichst transparent ablaufen. Auch die ausschließliche Verwendung von<br />

einzelnen Komponenten der Anwendung (bspw. die Kollisionserkennung) für<br />

andere Anwendungen wäre denkbar. Hier spielen s<strong>of</strong>twaretheoretische<br />

Modelle, speziell komponentenbasierte Systeme und Framework-<br />

Architekturen eine wichtige Rolle für die Entwicklung. Diese Konzepte sollten<br />

also in jedem Fall in den Systementwurf integriert werden.<br />

Korrektur<br />

Anlage<br />

Auftrag /<br />

Bauteil<br />

Geometrieerfassung<br />

Bearbeitungsstrategie<br />

Werkst<strong>of</strong>fe<br />

Bearbeitungsparameter<br />

Werkzeugbahnberechnung<br />

DCAM<br />

Generierung CNC-Programm<br />

Numerische und VR- Simulation<br />

Aufbau Systemtechnik<br />

Bearbeitung / Prozessüberwachung /<br />

Kontrolle<br />

LAVA<br />

Abb. 2-4 Schema des Gesamtvorgangs nach [Völlmar04]<br />

Korrektur<br />

Bearbeitung<br />

Im folgenden Abschnitt sei nun das zweite Anwendungsbeispiel dargestellt.<br />

17


2.1.4 Beispiel 2: Modulares Pulverdüsensystem zum Auftragschweißen<br />

Lasertechnik (COAXn)<br />

Die präzise Herstellung von Oberflächenschutz- und Funktionsschichten sowie<br />

schnelle Reparaturen von Hochwertbauteilen zählen zu den wichtigsten<br />

Anwendungsgebieten, in denen sich das Laserstrahl- Auftragschweißen heute<br />

industriell etabliert hat. Eine wichtige Voraussetzung für den erfolgreichen<br />

Einsatz des Verfahrens sind robuste Pulverdüsen, die einfach zu handhaben<br />

sind und eine exakte sowie stabile Zufuhr des Schweißpulvers auch an weniger<br />

gut zugänglichen Bearbeitungsstellen sowie beim Beschichten von<br />

Freiformflächen ermöglichen. Mit dem modularen Pulverdüsensystem COAXn<br />

des Fraunh<strong>of</strong>er IWS steht dem Anwender ein flexibles Werkzeug zur<br />

Verfügung, das zusammen mit der entsprechenden Lasertechnik leicht in<br />

Standard- Werkzeugmaschinen und Bearbeitungssysteme integriert werden<br />

kann.<br />

Abb. 2-5 Diodenlaser und Beschichtungskopf, Kombination mit Roboter<br />

Bei der Konstruktion des Pulverdüsensystems wurde besonderes Augenmerk<br />

auf die leichte Integrierbarkeit in Werkzeug- oder sonstige Bearbeitungsmaschinen<br />

gelegt, die heute üblicherweise bei den Anwendern bereits<br />

vorhanden sind. Einschließlich des Lasers kann somit das komplette<br />

Beschichtungssystem als Nachrüstsatz erworben und in die bestehende<br />

Anlagentechnik eingebaut werden (z.B. Abb. 2-5 links): kompakte Einheit,<br />

bestehend aus 2 kW-Diodenlaser und Beschichtungskopf vom Typ COAX8).<br />

Mit einem Gelenkarmroboter kombiniert, steht eine preiswerte, 3D-fähige<br />

Bearbeitungsanlage zur Verfügung (Abb. 2-5 rechts). Für eine Verfahrenskombination<br />

aus Auftragschweißen und Endbearbeiten (Fräsen) sind Köpfe aus<br />

dem System COAXn und 3- und 5achs-CNC-Fräszentren integriert worden.<br />

Die mit den COAXn- Köpfen hergestellten Strukturen reichen von filigranen<br />

Einzelraupen mit Breiten und Höhen von wenigen zehntel Millimetern über<br />

großflächige Beschichtungen mit Schichtdicken von maximal 2,5 mm bis hin<br />

zu 3D-Geometrieaufbauten. Beispiele für hochpräzise Anwendungen sind<br />

Laseranlagen zur Reparatur von komplex geformten Triebwerkkomponenten<br />

wie Schaufeln (siehe Anwendungsbeispiel Kap. 6), Scheiben und Blisks. Auf<br />

der anderen Seite werden heute auch große Umformwerkzeuge aus dem<br />

Automobilbereich durch lokale Laser-Auftragschweißungen repariert und<br />

schnell im Design geändert.<br />

18


2.1.5 Simulationsumgebungen<br />

Für die vorgestellten und weitere Anlagen existieren am IWS bereits<br />

Simulationsumgebungen. Die Vor- und Nachteile dieser Anwendungen sollen<br />

im folgenden analysiert werden.<br />

Da die Möglichkeit der VR- Darstellung auf der institutseigenen VR- Anlage<br />

ein entscheidendes Analysekriterium darstellt, soll diese zu Beginn vorgestellt<br />

werden.<br />

VR- Anlage<br />

Im IWS steht eine modifizierte 3 Seiten- Cave nach dem Schema in Abb. 2-6<br />

zur Verfügung. In einem Freiraum von zirka 2 m x 2 m x 3 m können virtuelle<br />

Anlagen in einem Besprechungsraum dargestellt werden.<br />

Die Installation besteht aus drei Projektionsflächen und sechs Beamern, in<br />

denen die Bilder für die beiden Augen der Nutzer durch Polarisationseffekte<br />

getrennt erzeugt werden. Jedem Beamer ist im Netzwerk ein separater PC<br />

zugeordnet, so dass eine hohe Performance der Abläufe erreicht werden kann.<br />

Die Anwender lösen durch Verwendung ihrer Polarisationsbrillen die Bilder<br />

auf den Schirmen als räumliche virtuelle Darstellung der Anlage auf.<br />

Die Installation ist mit einem optischen Tracking – System der Firma<br />

Advanced Realtime Tracking GmbH, Herrsching, ausgerüstet. Damit können<br />

sowohl die genaue Position einer Referenzperson als auch die Orientierung von<br />

Steuergeräten ermittelt werden. Die VR-Darstellung wird exakt auf diese<br />

Person bezogen berechnet, weitere Nutzer in deren Umgebung nehmen die<br />

Inhalte mit geringen Qualitätsverlusten wahr. Die Interaktion erfolgt über einen<br />

Flystick und in dem hier behandelten Fall über einen entsprechend<br />

programmierten und frei beweglichen Touch-Screen zur Steuerung.<br />

XXL- Anlage<br />

Abb. 2-6 3 Seiten- Cave des IWS, Navigation mit Flystick<br />

Die Simulation der XXL- Anlage erfolgt bisher mittels der eigens am IWS<br />

entwickelten S<strong>of</strong>tware „CNCInspector“. Diese ist in der Lage, die für den<br />

19


Betrieb der Anlage notwendigen drei parallel abzuarbeitenden CNC-<br />

Programme auszuführen und zu visualisieren. Als entscheidender Mangel wird<br />

die Tatsache eingeschätzt, dass die Anwendung zwar in der Lage ist,<br />

Kollisionen zwischen den Baugruppen der Anlage oder der Anlage und dem<br />

Werkstück zu erkennen, dies jedoch aufgrund mangelnder Performance bisher<br />

praktisch nicht einsetzbar ist. Die Simulation der XXL- Anlage in einer<br />

generischen Simulationsanwendung, inklusive schneller Kollisionskontrolle<br />

und CNC- Steuerung, wäre damit ein entscheidender Fortschritt.<br />

Laserstrahl- Auftragschweißen<br />

Die Simulation des Laserstrahl- Auftragschweißens erfolgt derzeit auf<br />

unterschiedlichen Umgebungen. Teilweise wurden komplette Anlagen in<br />

VRML umgesetzt, um somit eine Darstellung auf der institutseigenen CAVE<br />

mit Hilfe des X- Rooms S<strong>of</strong>twarepakets zu ermöglichen. Als Beispiel sei die<br />

Fadal – Anlage (Abb. 2-7) angeführt. Hierbei haben sich jedoch schnell die<br />

Grenzen einer Umsetzung in VRML aufgezeigt. Grund hierfür ist, dass es sich<br />

bei VRML um eine Beschreibungssprache für 3D- Szenen handelt. Die<br />

Möglichkeiten einer Programmiersprache besitzt diese natürlich nicht. Daher<br />

wird angestrebt, Anwendungen in herkömmlichen Programmiersprachen, z.B.<br />

in der Sprache Java in Verbindung mit Java3D umzusetzen.<br />

Abb. 2-7 Fadal- Anlage: reale Maschine und VRML- Simulation<br />

Für die Robotersimulation existieren am IWS ebenfalls bereits zahlreiche<br />

Anwendungen. Hier wären vor allem die Hersteller eigenen Produkte von Reis<br />

und Kuka zu nennen. Diese zeichnen sich durch eine sehr komfortable<br />

Simulationsumgebung für die jeweils eigenen Produkte aus. Roboter anderer<br />

Hersteller können jedoch nicht (zumindest nicht voll funktionsfähig) in die<br />

Umgebungen importiert werden.<br />

An dieser Stelle sei daher die am Institut vorhandene S<strong>of</strong>tware „EasyRob“ zu<br />

nennen. Diese bietet für fast alle gängigen Roboterhersteller Komponentenbibliotheken<br />

an und stellt zugleich eine große Anzahl an Schnittstellen zur<br />

Verfügung. Leider lassen sich mit dieser Anwendung die erstellten Szenen<br />

nicht in der vorhandenen VR- Anlage darstellen. Grund hierfür ist, dass am<br />

20


IWS aktuell die Verwendung der Opensource Komponentens<strong>of</strong>tware<br />

Chromium zur VR- Darstellung angestrebt wird, welche abschließend im<br />

folgenden kurz vorgestellt werden soll.<br />

Chromium<br />

Diese Verteilungss<strong>of</strong>tware bietet die Möglichkeit OpenGL- Anwendungen in<br />

verschiedenster Form auf mehrere Rechner zu verteilen Das System fungiert<br />

dabei als OpenGL- Treiber (die Original- Treiber werden durch eigene ersetzt)<br />

und hat somit Zugriff auf die darzustellende Geometrie der aktuell auf dem<br />

System laufenden 3D- Anwendung. Die Geometriedaten können anschließend<br />

über ein Netzwerk auf verschiedene Rechner in unterschiedlichen Konfigurationen<br />

verteilt werden. Eine solche Beispiel- Konfiguration zeigt<br />

Abbildung 2-8.<br />

Abb. 2-8 Funktionsschema WireGL/ Chromium<br />

Chromium ist aktuell in der Version 1.8 für alle gängigen Linux- und<br />

Windowssysteme verfügbar. In einer Studienarbeit am IWS wurden die<br />

Möglichkeiten dieser Technologie detailliert untersucht. Dabei stellte sich<br />

heraus, dass die Nutzung der S<strong>of</strong>tware gewissen Einschränkungen unterliegt.<br />

So traten besonders bei Anwendungen die nach den Micros<strong>of</strong>t MFC SDI/MDI<br />

Komponenten programmiert wurden Probleme auf. Diese konnten nicht<br />

dargestellt werden. Da die S<strong>of</strong>tware EasyRob <strong>of</strong>fensichtlich auf diesen<br />

Modellen entwickelt wurde, schlug eine Darstellung in der VR-Anlage fehl. Im<br />

21


Gegensatz dazu lassen sich die am Institut getesteten Java3D Anwendungen<br />

ohne größere Umstände und mit sehr hoher Performance auf dem VR-System<br />

darstellen. Es wurden lediglich einige, sehr unproblematische Implementierungsregeln<br />

für Java3D- Anwendungen aufgestellt. In Absprache mit dem<br />

IWS wird daher für die vorliegende Arbeit eine Implementierung in<br />

Java/Java3D angestrebt.<br />

Weitere Vorgehensweise<br />

Nachdem nun die prinzipiellen Verfahrensweisen des IWS und die aktuelle<br />

Situation in Bezug auf vorhandene Simulationsumgebungen dargestellt wurde,<br />

sollen im folgenden Abschnitt, ausgehend von den in Abschnitt 1.3 gesetzten<br />

Zielstellungen, die Anforderungen an das zu erstellende Projekt zusammengetragen<br />

werden.<br />

22


2.2 Anforderungsermittlung<br />

Die Anforderungsermittlung unterscheidet in der Ermittlung von funktionalen<br />

und nicht-funktionalen Anforderungen. Erstere beschreiben das, was das<br />

System tun soll, letztere formulieren einschränkende Bedingungen, also wie die<br />

funktionalen Anforderungen zu realisieren sind.<br />

Die in Abschnitt 1.3 genannten Zielstellungen unterscheiden im wesentlichen<br />

vier Funktionalitäten. Deren spezielle funktionale und nicht-funktionale<br />

Anforderungen unter Berücksichtigung der dargestellten Beispiele sollen im<br />

Anschluss an eine Vorbetrachtung in den folgenden Abschnitten erörtert<br />

werden.<br />

2.2.1 Vorbetrachtung<br />

Ziel der Arbeit ist das Untersuchen der kinematischen Verhältnisse von<br />

Maschinen bzw. Maschinenelementen. Der Begriff Kinematik ist wie folgt<br />

definiert:<br />

Def. 2-1 Die Kinematik (kinema, griech., Bewegung) ist die Lehre von der<br />

mathematischen Beschreibung der Bewegung von Punkten und Körpern mit<br />

Hilfe der Größen Weg, Geschwindigkeit und Beschleunigung im Raum, ohne<br />

auf die Ursachen einer Bewegung einzugehen. Sie ist neben der Statik und<br />

Dynamik ein Teilgebiet der Mechanik.<br />

Im vorliegenden Anwendungsfall sind also die Bewegungen von Körpern in<br />

Form von Maschinenteilen zu modellieren. In der Mechanik werden diese <strong>of</strong>t<br />

idealisiert als starre Körper betrachtet (siehe Definition 2).<br />

Def. 2-2 In der klassischen Mechanik ist ein starrer Körper ein System von<br />

Massepunkten, deren Entfernungen voneinander konstant sind.<br />

Da sich die wesentlichen Baugruppen, aus denen die zu simulierenden<br />

Laserschweißanlagen aufgebaut sind, während eines ordnungsgemäßen<br />

Schweißvorganges nicht verformen, kann auch für die Simulation idealisiert<br />

von starren Körpern ausgegangen werden. Sollten sich die Baugruppen, etwa<br />

auf Grund von Kollisionen, trotzdem verformen, so liegt bereits bei Eintritt der<br />

Kollision ein Fehlverhalten vor. Das Auffinden dieser Kollision stellt damit<br />

bereits die Fehlererkennung dar. Die Konsequenz des Fehlverhaltens zu<br />

simulieren, beispielsweise in Form von Verformung oder Zerstörung von<br />

Komponenten, ist nicht Aufgabe der Simulation.<br />

Es sei an dieser Stelle jedoch vermerkt, dass z.B. Schweißroboter mit einer<br />

Reihe von Schläuchen, die den Laserschweißkopf mit den erforderlichen<br />

Ressourcen versorgen, ausgestattet sind. Als Modellierungsmethode für derlei<br />

Anwendungsfälle bietet sich die Verwendung von Finite- Elemente- Methoden<br />

23


an. Dabei wird das Gesamtmodell aus einer Reihe einzelner FE- Teilmodelle<br />

aufgebaut, die durch Gelenke miteinander verbunden sind. Diese<br />

Gelenkverbindungen lassen sich in Form kinematischer Bindungen<br />

mathematisch formulieren und schränken somit die Bewegungsmöglichkeit der<br />

einzelnen Glieder zueinander ein. Unter Minimierung der potentiellen Energie<br />

des Gesamtsystems könnten dann entsprechend Lage und Position der<br />

Elemente bestimmt werden.<br />

Leider hat die Verwendung solcher Algorithmen auch Nachteile. Ein<br />

gravierender Nachteil ist der numerische Aufwand. Auch unter Verwendung<br />

moderner Hardware benötigen diese Verfahren unter Umständen Minuten oder<br />

gar Stunden an Rechenzeit. Da sich die vorliegende Arbeit aus Zeit- und<br />

Kostengründen auf die Simulation der kinematischen Verhältnisse<br />

konzentrieren und damit die dynamischen Gegebenheiten unberücksichtigt<br />

lassen soll, empfiehlt es sich, die Simulation auf die Verwendung starrer<br />

Körper zu beschränken.<br />

2.2.2 Konstruktionswerkzeug<br />

Zunächst gilt es den Begriff Konstruktion im vorliegenden Anwendungskontext<br />

zu definieren. Unter Konstruktion soll hier das Zusammenfügen von<br />

bereits in CAD- Anwendungen modellierten dreidimensionalen Baugruppen<br />

unter Berücksichtigung der kinematischen Verhältnisse des Systems<br />

verstanden werden.<br />

Für die virtuelle Konstruktion einer realen Anlage wird zunächst ein<br />

programminternes Modell benötigt, dass in der Lage ist, alle für die Simulation<br />

wichtigen Informationen abzubilden. Dieses sollte so generisch angelegt sein,<br />

dass es für die heterogenen Anlagentypen des Laserschweißverfahrens einsetzbar<br />

ist. Im folgenden soll daher untersucht werden, ob ein solches Modell<br />

existiert und unter welchem Aufwand es programmtechnisch umgesetzt werden<br />

kann.<br />

Für die Entwicklung dieses Modells empfiehlt sich die Betrachtung der<br />

Gesetze der Mechanik. In der klassischen Mechanik besitzt ein starrer Körper<br />

sechs Freiheitsgrade: drei Ortskoordinaten eines (beliebigen) Referenzpunktes<br />

im Körper sowie drei Drehwinkel. Für seine Bewegung existieren folgende<br />

Möglichkeiten:<br />

reine Translation<br />

reine Rotation und<br />

die Abbildung der Ortskoordinaten und Drehwinkel als Funktionen<br />

der Zeit<br />

Maschinen bestehen in der Regel aus einer Reihe einzelner Teilkörper<br />

(Baugruppen, Bauteile), die durch Lagerungen, Führungen, Verbolzung o.a. so<br />

miteinander gekoppelt sind, dass die zur Erfüllung der Funktion der Maschine<br />

in Verbindung stehenden Bewegungen und Kraftübertragungen bestmöglichst<br />

erreicht werden. Somit können selbst komplexe Bewegungen starrer Körper<br />

durch Kombination von Bindungselementen in sogenannten gelenkgekoppelten<br />

24


Mehrkörpersystemen realisiert werden. Eine Übersicht einiger häufig<br />

verwendeter Bindungselemente findet sich in Abbildung 2-9. Diese gehören<br />

ausschließlich der Gruppe der holonomen Bindungen an. Somit hängen die<br />

Bindungsgleichungen lediglich von den Lagekoordinaten ab. Mathematisch<br />

können holonome Bindungen in fast beliebiger Ausartung beschrieben werden.<br />

In technischer Hinsicht erfüllen jedoch nur wenige Ausprägungen eine<br />

sinnvolle Funktion und sind mit den konventionellen Mitteln der<br />

Produktionstechnik herstellbar. Diese Restriktionen schränken die Anzahl<br />

theoretisch möglicher Bindungselemente stark ein. Aus den verbleibenden<br />

Möglichkeiten lässt sich eine Auswahl von Standardgelenken ableiten, die je<br />

nach Anzahl ihrer Freiheitsgrade klassifiziert werden kann.<br />

Abb. 2-9 Übersicht Standardverbindungen [Webh<strong>of</strong>er04]<br />

Man spricht in diesem Zusammenhang auch von kinematischen Ketten. Diese<br />

bestehen aus einer endlichen Anzahl von Gliedern, die durch Gelenke<br />

miteinander verbunden sind. Ein Gelenk lässt Bewegungen in bestimmten<br />

Freiheitsgraden oder Relativbewegungen zwischen einzelnen Gliedern zu oder<br />

schränkt sie ein. Kinematische Ketten können als <strong>of</strong>fene oder geschlossene<br />

Strukturen ausgeprägt sein (Abbildung 2-10).<br />

Fasst man nun mehrere hierarchische Ketten in einem Gesamtsystem<br />

zusammen, so ergibt sich ein hierarchisches System, in dem die einzelnen<br />

Objekte (Baugruppen) durch Beziehungen miteinander verknüpft werden. Die<br />

Beziehungen entsprechen den durch den Freiheitsgrad der Bewegung und die<br />

festgelegten Einschränkungen (Constraints) definierten Elementverbindungen.<br />

In dem so modellierten Gesamtsystem können durch Manipulation weniger<br />

Parameter verschiedene Konfigurationen des Modells erzeugt werden und<br />

25


somit die verschiedenen Betriebszustände einer Maschine effizient<br />

nachgebildet werden. Darüber hinaus lässt sich ein solches Modell als Graph<br />

darstellen und bietet daher eine transparente Möglichkeit Maschinensysteme<br />

abzubilden.<br />

Abb. 2-10 <strong>of</strong>fene und geschlossene kinematische Ketten<br />

Ausgehend von den vorangegangen Betrachtungen wird daher als Modell ein<br />

gelenkgekoppeltes Starrkörpersystem verwendet. Die Modellierung geschieht<br />

folgendermaßen: In einem ersten Schritt wird das reale System in Baugruppen<br />

und Bauteile (Substrukturen) zerlegt. Diese stellen im Starrkörpermodell die<br />

beweglichen Glieder einer Starrkörperkette dar. Unter rein kinematischer<br />

Betrachtung werden die Teilkörper in einem zweiten Schritt gemäß den realen<br />

Lagerungen, Führungen, Verbolzungen etc. durch geeignete Bindungselemente<br />

(Scharniergelenk, Linearführung, Schiebehülse etc.) an ihren<br />

Gelenkanschlüssen im Modell miteinander verbunden. Man erhält somit einen<br />

Mechanismus mit den Bewegungsmöglichkeiten der realen Maschine<br />

(Abbildung 2-11).<br />

Baugruppen<br />

Grundgestell<br />

Rumpf<br />

Schwinge<br />

Arm<br />

Konstruktion<br />

Verknüpfen<br />

Constraints<br />

Kinematisches Modell<br />

A1 – A6 Rotationsachsen des<br />

vollständigen Modells<br />

Abb. 2-11 Erstellen des kinematischen Modells (Bsp. Kuka KR3)<br />

26


Der zugehörige Graph des kinematischen Modells ist eine <strong>of</strong>fene kinematische<br />

Kette (Abbildung 2-12).<br />

Schlitten<br />

Rotation<br />

Rotation<br />

Rotation<br />

Y1 Z1<br />

X1<br />

Szene<br />

Abb. 2-12 Kinematische Kette für KR3 (ohne Kopf)<br />

Betrachtet man die Anwendungsbeispiele aus Abschnitt 2.1, so können einige<br />

Rückschlüsse auf die zu erwartende Komplexität der kinematischen Strukturen<br />

gezogen werden. Abbildung 2-13 zeigt ein Modell der XXL- Anlage mit<br />

eingezeichneten Transformationsrichtungen im Koordinatensystem der<br />

Maschine für ausgewählte Bauteile. Es fehlen lediglich die in Abbildung 2-2<br />

dargestellten Schweißkomponenten.<br />

X2<br />

Grundgestell<br />

Rumpf<br />

Schwinge<br />

Arm<br />

Abb. 2-13 Bewegungsrichtungen der XXL- Anlage<br />

x<br />

z<br />

y<br />

27


Überführt man die Hierarchie der Maschine in einen Graphen, so ergibt sich<br />

die in Abbildung 2-14 dargestellte Struktur. Analysiert man diese, so ergeben<br />

sich folgende Sachverhalte:<br />

Zunächst ist ersichtlich, dass im Gegensatz zum oben dargestellten Beispiel<br />

(KR3) das System aus kinematischen Ketten besteht, bei denen ein Objekt<br />

mehrere Kind- Objekte haben kann, daher die Baumstruktur.<br />

Seitenteil 1 Basis<br />

Seitenteil 2<br />

X- Teil 1 Schlitten<br />

X- Teil 2<br />

Y- Teil 1<br />

Z- Teil 1<br />

Szene<br />

Y1- Teil 2<br />

Z1- Teil 2<br />

... ... ...<br />

Y2- Teil 2<br />

Z2- Teil 2<br />

Abb. 2-14 Kinematische Ketten der XXL- Anlage (Ausschnitt)<br />

Translation<br />

feste Bindung<br />

Des weiteren enthalten die dargestellten Graphen keine Zyklen. Dies<br />

vereinfacht die programmtechnische und algorithmische Verfahrensweise. Es<br />

soll daher die Annahme übernommen werden, dass die Graphen azyklisch sind.<br />

Darüber hinaus kommen die Modelle, abgesehen von Fest-Verbindungen,<br />

lediglich mit Bindungselementen aus, die eine reine Translation oder eine reine<br />

Rotation um eine beliebige Achse realisieren. Zunächst sollen daher diese drei<br />

Bindungselemente in den Anforderungskatalog aufgenommen werden.<br />

28


2.2.3 Simulation<br />

Die Simulation soll auf zwei Arten erfolgen können. Zum einen soll der<br />

Benutzer die Maschinen manuell steuern können. Dies dient typischen<br />

Anwendungsfällen in Form von Erreichbarkeitsstudien oder dem generellen<br />

Untersuchen des Potentials der entwickelten Maschine.<br />

Des Weiteren sollte eine Steuerung mittels CNC- Programmen implementiert<br />

werden. Da es sich bei den vorliegenden Anwendungsbeispielen, was die<br />

CNC- Steuerung betrifft, um sehr heterogene Systeme handelt, sollte auch<br />

diese Funktionalität entsprechend generisch ausgelegt sein. Grund hierfür ist,<br />

dass derzeit zwar ein einheitlicher CNC- Standard existiert, gleichzeitig aber<br />

für fast jede Maschine eine Reihe von Sonderbefehlen existiert.<br />

Darüber hinaus tritt speziell bei der XXL- Anlage die Problematik auf, dass<br />

mehrere CNC- Programme parallel abgearbeitet werden müssen. Die gleiche<br />

Problematik ergibt sich in einer Simulationsszene mit mehreren Robotern. Das<br />

zu erstellende System sollte also in der Lage sein, mehrere parallel laufende<br />

CNC- Programme ausführen zu können.<br />

2.2.4 Kollisionserkennung<br />

Die Kollisionserkennung dient der Auflösung von Fehlern in Form von<br />

Konstruktionsmängeln oder Fehlern in den Anlagenprogrammen. Daher sollte<br />

sowohl während der manuellen Steuerung als auch parallel zur CNC-<br />

Simulation eine Erkennung möglich sein.<br />

Dabei gilt, dass bei Eintritt einer Kollision ein Fehlverhalten vorliegt und die<br />

Simulation dies dem Benutzer in geeigneter Form mitteilen muss. Zur späteren<br />

Analyse des Fehlverhaltens ist es notwendig, dass Ort und Zeit der Kollision<br />

bekannt sind und speziell die entsprechenden CNC- Zeilen, in denen<br />

Kollisionen aufgetreten sind, markiert werden.<br />

Darüber hinaus gilt es zu beachten, dass sich mehrere Baugruppen parallel<br />

bewegen können. Dies ist beispielsweise im Falle der XXL- Anlage relevant.<br />

Hier können sich die einzelnen Türme und der Schlitten unabhängig<br />

voneinander bewegen.<br />

29


2.3 Zusammenfassung<br />

Anhand der Anwendungsbeispiele Laserstrahlschweißen und Laserstrahl-<br />

Auftragschweißen inklusive vorhandener Simulationsumgebungen wurden<br />

typische Verfahrensweisen und Problemstellungen des IWS aufgezeigt.<br />

Anschließend wurden die Anforderungen für das Erreichen der gesetzten Ziele<br />

an das zu erstellende System analysiert. Dabei stellte sich heraus, dass auf<br />

Basis eines generischen Modells für die vorgestellten Beispiele eine<br />

Modellierung möglich ist. Es ist davon auszugehen, dass sich damit ein<br />

Großteil der zu erwartenden Anlagentypen in das System integrieren lässt, da<br />

die Einschränkungen lediglich Spezialfälle in der Konstruktion ausschließen.<br />

Der Anspruch, ein System für alle theoretisch denkbaren Anlagenkonstruktionen<br />

zu erstellen, ist im Rahmen der vorliegenden Arbeit sicher nicht<br />

zu erfüllen. Entscheidend ist jedoch, dass die Klasse der modellierbaren<br />

Systeme klar definiert ist und die vorhandenen Problemstellungen gelöst<br />

werden können.<br />

Im folgenden seien als Ausgangpunkt für die nachfolgenden Kapitel noch<br />

einmal alle funktionalen und nicht- funktionalen Anforderungen zusammengefasst.<br />

funktionale Anforderungen<br />

Import von Bauteilgeometrien aus unterschiedlichen CAD- Datenformaten<br />

Konstruktion des Gesamtsystems unter Beachtung der kinematischen<br />

Eigenschaften<br />

Möglichkeit der manuellen Steuerung der Anlage und gleichzeitiger<br />

(möglichst realistischer) visueller Darstellung<br />

flexible CNC-Steuerung, die an die Besonderheiten einer jeden<br />

Maschine (Dialekt, mehrere parallel laufende CNC- Programme)<br />

angepasst werden kann.<br />

Kollisionserkennung<br />

Export in VR-Anlage (Cave des IWS)<br />

30


nicht-funktionale Anforderungen<br />

Implementierung in Java/ Java3D<br />

Plattform: aktueller PC und aktuelle Grafikkarte<br />

Ergonomie<br />

Integrative Konzepte, Portabilität<br />

Nachdem nun alle Anforderungen an das System analysiert sind soll im<br />

folgenden Kapitel die zu erstellende Anwendung modelliert werden. Dazu ist<br />

es notwendig, Lösungen für die geforderten Funktionalitäten und aufgedeckten<br />

Problemstellungen zu entwickeln und in ein Gesamtkonzept zu integrieren.<br />

31


3 Design<br />

Die S<strong>of</strong>tware-Architektur (Architekturentwurf) repräsentiert die früheste<br />

S<strong>of</strong>twaredesign-Entscheidung. Mit ihr werden alle Parameter wie Modifizierbarkeit,<br />

Wartbarkeit, Sicherheit, Performance etc. in gewissen Grenzen<br />

festgelegt und sind nach der in der Literatur vorherrschenden Meinung in<br />

späteren Entwicklungsphasen nur noch mit erheblichen Kosten- und<br />

Zeitaufwendungen abänderbar. Die Entscheidung über das Design einer<br />

S<strong>of</strong>tware-Architektur ist somit eine der kritischsten und wichtigsten Punkte<br />

während des S<strong>of</strong>tware-Entwicklungsprozesses.<br />

Ziel der Entwurfsplanung ist es, alle projektspezifischen Problemstellungen zu<br />

berücksichtigen und so ein stimmiges und realisierbares Planungskonzept zu<br />

erhalten. Entsprechend den ermittelten Anforderungen ist auch diese Kapitel<br />

gegliedert.<br />

3.1 Konstruktion / Spiegelung der Kinematik<br />

In der Konstruktionsphase sollen die kinematischen Strukturen der virtuellen<br />

Anlage erzeugt und parametrisiert werden können. Die Bauteildaten liegen in<br />

unterschiedlichen CAD- Formaten vor. Zunächst muss also ein Weg gefunden<br />

werden, die Geometrie der Objekte in die Simulationsumgebung zu<br />

importieren.<br />

Abb. 3-1 Beispiel eines Szenegraphen<br />

Hierfür existieren speziell für Java3D entsprechende FileLoader-<br />

Implementierungen für diverse 3D- Formate (VRML, 3DS , STL etc.). Diese<br />

können die genannten Formate lesen und die in den Dateien enthaltenen<br />

32


Objekte in einen Java3D- Szenegraphen umwandeln, der alle Daten des<br />

geladenen Objekts inklusive der Beleuchtung enthält (Abbildung 3-1).<br />

Aus dem so erstellten Szenegraphen sollen nun kinematische Strukturen in dem<br />

Szenegraphen der Simulationsumgebung erstellt werden. Dazu ist es<br />

notwendig die kinematischen Einheiten in Form von Baugruppen zu<br />

segmentieren. Die Idee ist daher, dass der Anwender die Blattknoten des<br />

Szenegraphen (Shape-, Light- oder Fog- Knoten) in beliebiger Kombination zu<br />

Baugruppen zusammenfügen und anschließend diese Baugruppen entsprechend<br />

ihren kinematischen Eigenschaften in einer Hierarchie anordnen kann.<br />

Szenegraph<br />

Abb. 3-2 Erstellen von Baugruppen<br />

Baugruppe<br />

Baugruppe 1<br />

Die erstellten Baugruppen (Abbildung 3-2) bestehen folglich aus mehreren<br />

Shape- Knoten und deren Transformation in das Bauteilkoordinatensystem<br />

(TransformGroup), die unter einer Verzweigungsgruppe (BranchGroup)<br />

angeordnet sind. Die Transformationen für die TransformGroup’s werden aus<br />

der Multiplikation aller Transformationen des Pfades vom Shape- Knoten zum<br />

Wurzelknoten des geladenen Szenegraphen berechnet.<br />

Eine so erstellte Baugruppe wird nun der eigentlichen zu erstellenden Szene<br />

hinzugefügt. Diese besitzt ebenfalls einen Szenegraphen, welcher eine spezielle<br />

Verzweigungsgruppe enthält, an der das gesamte Maschinenmodell angefügt<br />

werden soll. Die Baugruppen auf der obersten Ebene der Hierarchie der<br />

Maschine werden, zusammen mit einer Transformationsgruppe für die<br />

Transformation des Bauteils in das Weltkoordinatensystem der Hauptszene, an<br />

diese Verzweigungsgruppe angefügt (Abbildung 3-3).<br />

Sollen zwei Baugruppen über eine Gelenkverbindung verknüpft werden, so<br />

geschieht dies, indem an die BranchGroup des in der Hierarchie oben<br />

stehenden Bauteils zwei TransformGroup’s angefügt werden, an deren Ende<br />

das zweite Bauteil angebracht ist. Die erste TransformGroup dient der<br />

Transformation des zweiten Bauteils in das Koordinatensystem des Ersten. Die<br />

zweite TransformGroup spiegelt die kinematische Transformation des<br />

verbindenden Gelenks (also Rotation oder Translation um/entlang einer<br />

beliebigen Achse) wieder (Abbildung 3-4).<br />

TG<br />

BG<br />

TG<br />

S S<br />

33


Abb. 3-3 Szenegraph mit zwei fest angeordneten Baugruppen<br />

TG<br />

Baugruppe 1<br />

TG<br />

TG<br />

Baugruppe 3<br />

BG<br />

TG<br />

BG<br />

TG<br />

S S<br />

TG<br />

S S<br />

TG<br />

Baugruppe 1<br />

TG<br />

BG<br />

Szenegraph<br />

TG<br />

S S<br />

BG<br />

TG<br />

Baugruppe 2<br />

Abb. 3-4 Szenegraph mit kinematisch verbundenen Baugruppen<br />

TG<br />

BG<br />

TG<br />

Szenegraph<br />

TG<br />

TG<br />

TG<br />

Baugruppe 4<br />

BG<br />

BG<br />

TG<br />

S S<br />

TG<br />

S S<br />

TG<br />

Baugruppe 2<br />

TG<br />

BG<br />

TG<br />

S S<br />

34


Die hierarchische Anordnung der Baugruppen im Szenegraphen hat den<br />

Vorteil, dass sich Transformationen des übergeordneten Objekts auf alle<br />

untergeordneten auswirken und sich entgegengesetzt Transformationen des<br />

untergeordneten Objekts nicht auf das übergeordnete auswirken (Abb. 3-5).<br />

Abb. 3-5 Transformationen in einer Hierarchie<br />

Die Definition der Koordinatentransformation zwischen zwei Bauteilen sowie<br />

die Spezifikation der Parameter der Gelenkverbindungen soll dabei wie folgt<br />

geschehen (Abbildung 3-6):<br />

1) Definition eines Punktes und zweier orthogonaler Vektoren im<br />

anzufügenden Bauteil. Der Punkt und der erste Vektor (gelb)<br />

entsprechen Lage und Orientierung der Gelenkachse, der zweite Vektor<br />

(magenta) dient der Definition des Nullpunktes der Gelenktransformation<br />

(Rotation o. Translation). Der cyanfarbene Vektor wird<br />

automatisch so ergänzt, dass sich ein Rechtssystem ergibt.<br />

2) Definition der gleichen Elemente im Koordinatensystem des Bauteils<br />

an das angefügt werden soll.<br />

3) Festlegen der Beschränkungen der Gelenkverbindung.<br />

Das roten, grünen und blauen Achsen entsprechen der Basis des Bauteilkoordinatensystems<br />

in der Reihenfolge x-, y- u. z-Achse.<br />

(1) (2) (3)<br />

±180°<br />

Abb. 3-6 Spezifikation der Bauteiltransformationen und der Achsen<br />

35


3.2 Simulation<br />

Nachdem die Konstruktionsphase abgeschlossen ist, steht ein gelenkgekoppeltes<br />

Starrkörpermodell der realen Anlage zur Verfügung. Der Zustand<br />

dieser virtuellen (und der realen) Maschine ist durch die Konfiguration der<br />

Parameter der Gelenkverbindungen definiert.<br />

Während der Simulationsphase soll nun sowohl durch manuelle Ansteuerung<br />

als auch durch das Ausführen von Steuerbefehlen in Form von CNC-<br />

Programmen das Verhalten der Anlage simuliert werden. Speziell für die CNC-<br />

Steuerung müssen also die Maschinenprogramme der realen Anlage in Modellkonfigurationen<br />

der virtuellen Maschine umgesetzt werden. Für diese Aufgabe<br />

eignet sich das aus der S<strong>of</strong>twaretechnik bekannte Architekturmuster<br />

„Interpreter“ (Abbildung 3-7).<br />

Programm (CNC)<br />

Benutzer<br />

Abstrakte Maschine(Interpreter)<br />

Basissystem (Simulationsumgebung)<br />

Abb. 3-7 Architekturmuster Interpreter im Anwendungskontext<br />

Es handelt sich hierbei um eine Schichtenarchitektur mit Parametrisierung. Auf<br />

einem Basissystem sollen heterogene Programme ausgeführt werden, die ein<br />

Interpreter, als Teil einer abstrakten Maschine, in eine für das Basissystem<br />

ausführbare Form übersetzt.<br />

Im vorliegenden Fall entspricht das Basissystem der Simulationsumgebung.<br />

Die abstrakte Maschine soll in Form einer CNC- Emulationskomponente<br />

umgesetzt werden. Deren Aufgabe ist es, in einem ersten Schritt die CNC-<br />

Quelltexte in eine interne einheitliche Beschreibung umzusetzen und diese<br />

anschließend an eine Ablaufsteuerung zu übergeben. Die Ablaufsteuerung<br />

erstellt dann in einem weiteren Schritt, nach Interaktion mit dem Benutzer, aus<br />

der internen Beschreibung der CNC- Programme eine zeitliche Abfolge von<br />

Modellkonfigurationen der Anlage und visualisiert diese im Basissystem. Die<br />

Verwendung einer internen Beschreibungssprache bietet den Vorteil, dass beim<br />

Ausführen der Simulation die Programme bereits geparst worden sind und nur<br />

noch die interne Struktur abgearbeitet werden muss. Das entwickelte Modell ist<br />

schematisch in Abbildung 3-8 dargestellt.<br />

36


CNC-<br />

Programm<br />

Abstrakte Maschine<br />

CNC-Interpreter<br />

interne<br />

Beschreibung<br />

Basissystem (Simulationsumgebung)<br />

Abb. 3-8 Abstrakte Maschine<br />

Benutzer<br />

Ablaufsteuerung<br />

Modell-<br />

Konfigurationen<br />

Der dargestellte CNC-Interpreter muss in der Lage sein, die heterogenen CNC-<br />

Dialekte zu verarbeiten und in die interne Beschreibungsform umzusetzen. In<br />

Kapitel 2 wurde analysiert, dass diesbezüglich kein vollständig einheitlicher<br />

Standard existiert. Es bietet sich daher an, diesen Interpreter, dem<br />

Gesamtkonzept der zu erstellenden Anwendung folgend, ebenfalls generisch zu<br />

konstruieren.<br />

Da die Umsetzung eines CNC-Befehls in ein Maschinenverhalten unter<br />

Umständen sehr komplex sein kann, bietet es sich an, für diese Konvertierung<br />

die Möglichkeiten einer Programmiersprache zu nutzen. Die Anwender sollten<br />

folglich für ihre speziell verwendeten virtuellen Maschinen eigene Interpreter<br />

schreiben und diese in das Gesamtsystem integrieren können. Die Idee ist<br />

daher, den CNC-Interpreter als ein System von abstrakten Klassen zu<br />

modellieren. Diese bieten die Möglichkeit, erforderliche Schnittstellen zu<br />

definieren und den Zugriff auf andere Objekte zu regeln. Dabei können<br />

einzelne Funktionen vorimplementiert werden und andere durch Schnittstellen<br />

definierte Funktionalitäten erst durch abgeleitete Klassen spezifiziert werden.<br />

Die Definition der zu implementierenden Schnittstellen stellt sicher, dass die<br />

erforderliche Funktionalität durch die hinzugefügten Klassen erbracht wird und<br />

ermöglicht gleichzeitig die Verwendung einer einheitlichen Ablaufsteuerung<br />

für diverse CNC- Systeme.<br />

Mit Hilfe der Java Reflection API können diese zusätzlich implementierten<br />

Klassen anschließend zur Laufzeit in das Programmsystem geladen und<br />

verwendet werden. Somit steht ein dynamisches System zur Verfügung, in dem<br />

das spezielle Maschinenverhalten bei Ansteuerung durch unterschiedlichste<br />

CNC-Programmsysteme modelliert und integriert werden kann.<br />

Abbildung 3-9 zeigt einen ersten Entwurf der abstrakten Maschine in einem<br />

prototypischen Klassendiagramm.<br />

37


Model<br />

-model:Model<br />

><br />

CNCInterpreter<br />

+parse(source:string):CNCProgram<br />

CNCInterpreterImpl<br />

-model:Model<br />

+run():void<br />

+pause():void<br />

+stop():void<br />

CNCEmulator<br />

erstellt<br />

+run():void<br />

CNCProgram<br />

><br />

CNCCommand<br />

-model:Model<br />

+execute():void<br />

+getTotalTime():int<br />

CNCCommandImpl<br />

Abb. 3-9 Klassendiagramm CNC- Interpreter<br />

Die Ablaufsteuerung übernimmt die Klasse CNCEmulator. Die abstrakte<br />

Klasse CNCInterpreter repräsentiert die Oberklasse für alle zu entwickelnden<br />

speziellen Interpreter. Deren Aufgabe ist es, aus den CNC- Quelltexten die<br />

interne Beschreibung der CNC-Programme in Form von sogenannten<br />

CNCProgram-Klassen zu erstellen. Diese Programme bestehen wiederum aus,<br />

nach Ausführungsreihenfolge geordneten, abstrakten CNCCommand- Klassen.<br />

Ein CNCCommand repräsentiert einen einzelnen CNC-Befehl und ist für<br />

dessen Ausführung zuständig. Die Ablaufsteuerung muss daher lediglich alle<br />

erstellten CNCProgram-Klassen abarbeiten und für die Ausführung der<br />

einzelnen Befehle (CNCCommand-Klassen) sorgen. Die CNCCommand-<br />

Klassen beschreiben dabei, welche Änderungen der Konfiguration vorgenommen<br />

werden sollen und in welcher Zeit dies geschehen soll.<br />

Da nun der Fall auftreten kann, dass mehrere CNC-Programme parallel<br />

abgearbeitet werden, muss ein Weg gefunden werden, diese zu parallelisieren.<br />

Diese Aufgabe soll die Ablaufsteuerung übernehmen. Dazu wird der Zeitraum<br />

der Programmausführung in diskrete Einheiten unterteilt (Abbildung 3-10). Die<br />

Ablaufsteuerung ruft nun während der Abarbeitung der CNC-Programme die<br />

einzelnen Kommandos nicht vollständig auf, sondern lediglich für eine gewisse<br />

*<br />

*<br />

38


Zeitspanne. Somit können abwechselnd Zeitintervalle der einzelnen aktuell<br />

auszuführenden Kommandos quasiparallel abgearbeitet werden.<br />

Abb. 3-10 Zeitliche Diskretisierung der CNC-Programme<br />

Die Methode execute() der CNC- Kommandos wird daher um zwei Parameter<br />

t0 und t1 erweitert. Diese repräsentieren einen Start- und Endzeitpunkt<br />

innerhalb der Laufzeit des jeweiligen Kommandos. Die Umsetzung der CNC-<br />

Programme in Aufrufe der CNC- Kommandos zeigt Abbildung 3-11.<br />

…<br />

ti-1<br />

ti<br />

ti+1<br />

ti+2<br />

ti+3<br />

ti+4<br />

∆ t<br />

1<br />

2<br />

ti-1<br />

ti<br />

ti+1<br />

ti+2<br />

ti+3<br />

ti+4<br />

CNC<br />

Programm 1<br />

CNC -<br />

Programm 1<br />

3<br />

4<br />

1<br />

2<br />

CNC<br />

Programm 2<br />

CNC -<br />

Programm 2<br />

Command1.execute(0,50)<br />

Command3.execute(50,150)<br />

Command1.execute(50,150)<br />

Command3.execute(150,250)<br />

Command2.execute(0,100)<br />

Command3.execute(250,300)<br />

Command4.execute(0,50)<br />

Abb. 3-11 Parallelisierung der CNC-Programme (∆ t = 100ms)<br />

Der Autor der CNC- Interpreter und damit auch der CNC- Kommando-<br />

Klassen muss daher zeitlich abhängige Konfigurationsänderungen implementieren.<br />

Dies gibt ihm beispielsweise die Möglichkeit, die kinematischen<br />

Größen Geschwindigkeit und Beschleunigung der einzelnen Maschinen-<br />

3<br />

4<br />

. . .<br />

. . .<br />

CNC –<br />

Kommando<br />

39


elemente bei Ausführung von CNC- Programmen abzubilden. Je feiner die<br />

zeitliche Diskretisierung, d.h. je kleiner ∆t gewählt wird, desto genauer werden<br />

diese Effekte dargestellt.<br />

3.3 Kollisionskontrolle<br />

Kollisionserkennung handelt kurz gesprochen davon, herauszufinden ob sich<br />

zwei Objekte berühren oder schneiden. Falls sich die Objekte im Raum<br />

bewegen, ist <strong>of</strong>t auch noch wichtig, den Zeitpunkt des Zusammentreffens zu<br />

bestimmen. Kollisionserkennung findet daher im Allgemeinen in Raum und<br />

Zeit statt.<br />

Die Problematik besteht im Allgemeinen darin, dass der naive Ansatz, die<br />

Primitive eines jeden Objekts gegen die der anderen auf Überschneidungen zu<br />

testen, in den meisten Anwendungsfällen zu rechenaufwendig ist. Kollisionserkennung<br />

ist daher meist der Flaschenhals in der Simulation. Es sollte daher<br />

besonders an dieser Stelle auf die Effizienz der Rechenverfahren Wert gelegt<br />

werden.<br />

3.3.1 Vorbetrachtung<br />

Für die Erkennung und Behandlung von Kollisionen existiert eine große<br />

Anzahl unterschiedlicher Verfahren. Dabei gilt, dass keines unter optimalen<br />

Kosten universell einsetzbar ist. Die Entscheidung für eines dieser Verfahren<br />

hängt im wesentlichen von den Eigenschaften der Simulationsumgebung ab.<br />

Simulationsumgebungen werden in Hinblick auf die Entscheidung für ein<br />

Kollisionserkennungsverfahren in statische und dynamische Umgebungen<br />

unterteilt:<br />

Statische Umgebung: Objekte bewegen sich nicht<br />

Dynamische Umgebung: Objekte bewegen sich im Raum.<br />

Da sich die Objekte im vorliegenden Anwendungsfall bewegen sollen, handelt<br />

es sich also um eine dynamische Umgebung.<br />

Des Weiteren gilt es zu klären, ob es sich um starre oder deformierbare Körper<br />

handelt und in welcher Objektrepräsentation diese vorliegen. Ersteres wurde<br />

bereits in Kapitel 2 ausführlich erörtert und letzteres wird folgend analysiert.<br />

Objektrepräsentation<br />

Geometrische Modelle, die in der <strong>Computer</strong>grafik Verwendung finden, lassen<br />

sich nach [Gottschalk00] in zwei Kategorien unterteilen: Polygonale- und<br />

Nichtpolygonale Objekte (Abbildung 3-12).<br />

40


Constructive<br />

solid<br />

geometry<br />

Nichtpolygonale Objekte Polygonale Objekte<br />

Implizite<br />

Flächen<br />

Abb. 3-12 Repräsentation von 3D- Modellen nach [Gotttschalk00]<br />

Im folgenden soll von beliebigen polygonalen Modellen, also speziell auch von<br />

„Polygon soups“ ausgegangen werden. Es wird sich jedoch später noch zeigen<br />

(Abschnitt 3.3.7), dass diese recht allgemeine Annahme noch etwas<br />

eingegrenzt werden kann.<br />

Laufzeitanforderungen<br />

Parametrisierte<br />

Flächen<br />

3D Modelle<br />

Des weiteren ist entscheidend für die Auswahl des Verfahrens, dass möglichst<br />

viele der erforderlichen Berechnungen vor Beginn der eigentlichen Simulation<br />

durchgeführt werden können. Deren Kosten sind weitaus unkritischer zu<br />

bewerten als Berechnungen, die während der eigentlichen Simulation in jedem<br />

Zeitschritt durchgeführt werden müssen. Es ist daher anzustreben, so weit als<br />

möglich Berechnungen vor Beginn der Simulation durchzuführen und die<br />

Ergebnisse in den entsprechenden Objekten zu speichern. Dies erhöht<br />

einerseits die Speicheranforderungen, bedeutet zugleich aber einen<br />

Geschwindigkeitsgewinn.<br />

3.3.2 Analyse vorhandener Verfahren<br />

konvex<br />

Strukturierte<br />

Objekte<br />

nicht konvex<br />

Polygon<br />

soups<br />

Wie bereits erwähnt existieren zahlreiche Kollisionserkennungsverfahren für<br />

unterschiedliche Anwendungsfälle. Die Problematik, dass ein einfacher<br />

gegenseitiger Test aller Primitive auf Überschneidungen meist zu aufwendig<br />

ist, wird dabei gelöst, indem versucht wird die Menge der Primitive auf einer<br />

höheren Abstraktionsebene zu strukturieren und mittels konservativerer Tests<br />

die Anzahl der notwendigen Primitivtests zu reduzieren.<br />

Dabei wird meist in zwei Phasen vorgegangen. In der ersten Phase (Broad<br />

Phase) der Kollisionserkennung wird versucht, alle Paare von Objekten<br />

auszuschließen, die nicht kollidieren können. Räumliche und zeitliche<br />

Kohärenzen können genutzt werden, um diese Erkennung zu beschleunigen.<br />

41


In der zweiten Phase (Narrow Phase) werden die Kollisionen zwischen<br />

Objektpaaren exakt bestimmt. Räumliche, hierarchische Datenstrukturen, wie<br />

beispielsweise AABB- , OBB- oder k-dop- Bäume werden genutzt, um<br />

möglichst schnell in Bereiche zu leiten, in denen Kollisionen auftreten. Auf<br />

den entsprechenden (kleineren) Teilmengen von geometrischen Figuren kann<br />

anschließend ein exakter Schnittest (Primitivtest) durchgeführt werden.<br />

Darüber hinaus existieren beispielsweise noch sogenannte Raumaufteilungsverfahren<br />

(Gittermethode, Quad/Oktonärbäume o. BSP- Bäume). Diese<br />

sortieren grob die Objekte aus, die nicht kollidieren können und nutzen somit<br />

räumliche Kohärenz aus. Probleme bereiten diese Verfahren jedoch bei<br />

dynamischen Szenen, da sie nur schlecht aktualisiert werden können.<br />

Generell gilt, dass soweit als möglich a priori- Wissen über die vorhandene<br />

Szene und deren Strukturen für die Kollisionserkennung verwendet werden<br />

sollte, um somit die Kosten für die Erkennung zu senken. Es soll daher<br />

zunächst damit begonnen werden, die Struktur der zu simulierenden Objekte<br />

im Hinblick auf die Entwicklung einer Kollisionserkennungsstrategie zu<br />

untersuchen.<br />

3.3.3 Broad Phase (Strukturanalyse)<br />

In Kapitel 2 wurde ein Modell entwickelt, mit dem die kinematischen<br />

Eigenschaften der realen Maschinen abgebildet werden. Dieses besteht aus<br />

gelenkgekoppelten Starrkörpern in Form von Baugruppen. Ziel der<br />

Kollisionserkennung soll sein, die Kollision von Baugruppen zu erkennen und<br />

zu visualisieren. Die Baugruppen (und damit deren Primitive) entsprechen<br />

somit den zu testenden Objekten.<br />

Diese Objekte sind in einer Baumstruktur angeordnet. Eine Vater-Kind-<br />

Beziehung dieses Graphen entspricht dabei einer Kopplung der Baugruppen<br />

über eine Gelenkverbindung. Diese wird durch den Nutzer parametrisiert.<br />

Festzulegen sind zum einen die Koordinatentransformation und damit die<br />

Positionierung der Baugruppen zueinander und zum anderen die Constraints<br />

(Beschränkungen) eines jeden Gelenks, die üblicherweise durch min/max-<br />

Drehwinkel etc angegeben werden (Abbildung 3-13 und 3-14).<br />

Abb. 3-13 Kuka-Roboter Kr3<br />

42


Abb. 3-14 Constraints des Kr3<br />

Da letzteres die Bewegungsfreiheit eines Gelenks gemäß der Auslegung der<br />

realen Maschine einschränkt, kann davon ausgegangen werden, dass somit<br />

Kollisionen zwischen direkt gekoppelten Baugruppen ausgeschlossen werden<br />

können.<br />

Für die gesamte Anlage heißt dies jedoch nicht, dass keine Kollisionen<br />

auftreten können, da diese Einschränkungen jeweils nur Kollisionen zwischen<br />

zwei gekoppelten Baugruppen ausschließen. Es ist davon auszugehen, dass<br />

auch unter Einhaltung aller Constraints der Gelenkverbindungen Konfigurationen<br />

der Anlage auftreten können, in denen Kollisionen zwischen nicht<br />

direkt verbundenen Baugruppen auftreten können.<br />

Folglich sollen zunächst von der Kollisionskontrolle alle diejenigen<br />

Objektpaare ausgeschlossen werden, die in einer direkten Vater- Kind-<br />

Beziehung im zugehörigen Modellgraphen stehen.<br />

Weiterhin ist über die Struktur der Szene bekannt, dass die enthaltenen Objekte<br />

in einer Hierarchie angeordnet sind. Auch dieses Wissen soll im folgenden für<br />

die Reduzierung der notwendigen Kollisionstests verwendet werden.<br />

In Kapitel 2.1 stellte sich heraus, dass diese hierarchische Anordnung den<br />

Vorteil besitzt, dass sich Transformationen des übergeordneten Objekts auf alle<br />

untergeordneten auswirken und sich entgegengesetzt Transformationen des<br />

untergeordneten Objekts nicht auf das übergeordnete auswirken. Dies bedeutet,<br />

dass bei Änderung der Parameter einer Gelenkverbindung sich lediglich die<br />

unterhalb dieser Kante im Graphen angeordneten Knoten bewegen. Alle<br />

übrigen verändern ihre Position und Lage nicht. Darüber hinaus gilt, dass die<br />

sich bewegenden Objekte ihre relative Position und Lage zueinander ebenfalls<br />

nicht verändern.<br />

Abbildung 3-15 zeigt schematisch diesen Fakt. Ändert sich beispielsweise die<br />

Translation Tr1 , so werden alle farblich markierten Knoten bewegt. Alle<br />

anderen Knoten bleiben unverändert. Somit entstehen zwei Mengen<br />

(orangefarbene und weiße Knoten), deren Elemente gegeneinander auf<br />

Kollisionen getestet werden müssen. Dies reduziert die Anzahl der zu<br />

testenden Paare.<br />

43


Seitenteil 1 Basis<br />

Seitenteil 2<br />

X- Teil 1 Schlitten<br />

X- Teil 2<br />

Y- Teil 1<br />

Z- Teil 1<br />

Tr3<br />

Szene<br />

Y1- Teil 2<br />

Z1- Teil 2<br />

... ... ...<br />

Abb. 3-15 Änderung der Parameter einer Gelenkverbindung<br />

Es darf jedoch nicht unbeachtet bleiben, dass sich durch die Ermittlung der zu<br />

testenden Paare ein Mehraufwand in jedem Zeitschritt ergibt. Betrachtet man<br />

unabhängig von der Baumstruktur, und damit den Vater-Kind-Ausschluss<br />

unbeachtet lassend, das Resultat dieser Verfahrensweise, so ergibt sich<br />

folgende Rechnung:<br />

Bisher war die Anzahl der zu testenden Paare in jedem Zeitschritt konstant<br />

gegeben durch:<br />

a<br />

1<br />

n(<br />

n −1)<br />

=<br />

2<br />

Durch die Separierung ergeben sich zwei aus unterschiedlichen Objekten<br />

bestehenden Mengen M1 und M2, für die gilt:<br />

M<br />

M<br />

1<br />

2<br />

= n<br />

Die Anzahl der erforderlichen Tests errechnet sich somit aus<br />

1<br />

= n<br />

a =<br />

n ⋅ n<br />

2<br />

1<br />

2<br />

2<br />

Tr2<br />

.<br />

Tr1<br />

a... Anzahl der Paare<br />

n... Anzahl der Objekte<br />

n n = n<br />

1 + 2<br />

Y2- Teil 2<br />

Z2- Teil 2<br />

Translation<br />

feste Bindung<br />

44


Deren Maximum wird erreicht, wenn gilt<br />

und beträgt somit<br />

n<br />

n 1 = n2<br />

=<br />

2<br />

2<br />

⎛ ⎞<br />

max ( 2 ) = ⎜ ⎟<br />

⎝ 2 ⎠<br />

n<br />

n a<br />

Berechnet man nun die Differenz d aus der ursprünglich und der nun maximal<br />

erforderlichen Anzahl an zu testenden Objektpaaren, so ergibt sich:<br />

. 1 2 1<br />

d =<br />

n −<br />

4 2<br />

n<br />

Diese Differenz ist für alle n > 2 positiv und steigt exponentiell (quadratisch)<br />

mit wachsendem n (Abbildung 3-16). Es kann also davon ausgegangen werden,<br />

dass der Mehraufwand durch die Ermittlung der zu testenden Paare besonders<br />

bei großen n durch die Reduzierung der Anzahl der Tests kompensiert wird.<br />

Abb. 3-16 Anzahl der Kollisionstests mit/ohne Kohärenz<br />

Die bisher aufgestellten Rechnungen gelten jedoch nur für den Fall, dass sich<br />

pro Zeitintervall jeweils nur eine Transformation ändert. Es ist aber nach<br />

Kapitel 2 auch zulässig, dass sich mehrere Transformationen gleichzeitig<br />

ändern können. In diesem Fall (Abbildung 3-17) entstehen für jede geänderte<br />

Transformation (T1 u. T2) jeweils zwei Mengen von Objekten (bewegte -<br />

unbewegte), die gegeneinander auf Kollisionen getestet werden müssen (M1<br />

und M2). Jedes Paar definiert dabei eine Liste von Objektpaaren, die auf<br />

Kollisionen getestet werden müssen (P1 und P2). Die Vereinigung aller dieser<br />

Objektpaare ( P1 ∪ P2<br />

) ergibt dann die Menge der zu testenden Paare.<br />

.<br />

.<br />

45


1<br />

2 3<br />

T2<br />

4 5 . . .<br />

. . . . . .<br />

Konfigurationsänderung<br />

T1<br />

. . .<br />

Abb. 3-17 Ermittlung der zu testenden Objektpaare<br />

Darüber hinaus gilt zu beachten, dass die Kollisionserkennung als<br />

Zustandsmaschine zu implementieren ist, die alle aufgetretenen Kollisionen<br />

speichern muss, wenn diese im neuen Zeitschritt nicht neu berechnet werden.<br />

Dieser Fall tritt auf, wenn Kollisionen zwischen Objekten auftraten, deren<br />

gegenseitige Lage sich im aktuellen Zeitschritt nicht ändert und die somit<br />

folglich auch nicht erneut auf Kollisionen untersucht werden. Abbildung 3-18<br />

zeigt schematisch die Vorgehensweise.<br />

Kollisionserkennung<br />

Kollisionspaare<br />

ermitteln<br />

Kollisionen<br />

berechnen<br />

Simulation<br />

Neu zu<br />

berechnende<br />

Paare<br />

Neuer Zustand<br />

Neu zu<br />

berechnende<br />

Paare entfernen<br />

Kollidierende<br />

Paare<br />

hinzufügen<br />

Kollisionen<br />

visualisieren<br />

Abb. 3-18 Kollisionserkennung<br />

T1: M1 = { orange }<br />

M2 = { weiß, grün }<br />

P1 = { 3-1, 3-2, 3-4, 3-5 }<br />

T2: M1 = { grün }<br />

M2 = { weiß, orange }<br />

P2 = { 5-1, 5-2, 5-3, 5-4 }<br />

P1 ∪ P2 = { 3-1, 3-2, 3-4, 3-5,<br />

5-1, 5-2, 5-4 }<br />

Kollisionen<br />

Zusammengefasst betrachtet, nutzt die beschriebene Verfahrensweise die<br />

zeitliche und räumliche Kohärenz des Systems für die Reduzierung der Anzahl<br />

der zu testenden Objekte aus. Der Ausschluss von Objekten, die in einer<br />

46


direkten Vater- Kind- Beziehung stehen, beruht hingegen auf der<br />

Verwendungen von a priori - Wissen über die zu simulierende Szene.<br />

Nachdem nun in der Strukturanalyse die Anzahl der notwendigen Tests<br />

zwischen einzelnen Objekten reduziert wurde, soll im folgenden Abschnitt<br />

geklärt werden, wie diese verbleibenden Objekttests möglichst effizient<br />

durchgeführt werden können.<br />

3.3.4 Narrow Phase<br />

Für den Überschneidungstest zweier Baugruppen eignet sich die Verwendung<br />

von Bounding Volumes (BV) und Bounding Volume Hierarchien (BVH),<br />

welche daher im folgenden kurz vorgestellt werden.<br />

3.3.4.1 Bounding Volumes<br />

Bounding Volumes (BV, Hüllkörper) werden häufig in Kollisionserkennungsverfahren<br />

verwendet. Die Idee ist, den aufwendigen Schnittest zwischen zwei<br />

aus Polygonen bestehenden Objekten, durch einen weniger „teuren“,<br />

konservativeren Test zu ersetzen. Dazu wird an Stelle der Originalgeometrie<br />

der Objekte eine einfachere Geometrie um das Objekt gelegt und somit der<br />

Schnittest vereinfacht. Anschließend wird bei Erkennen einer Kollision<br />

zwischen den Hüllkörpern eine detailliertere Untersuchung durchgeführt. Da in<br />

der Regel davon auszugehen ist, dass eine Kollision zweier Objekte ein<br />

Spezialfall ist, bedeutet dieses Verfahren einen Geschwindigkeitsgewinn.<br />

Um beim BV- Überlappungstest möglichst nur dann Überlappungen<br />

festzustellen, wenn die Objekte tatsächlich kollidieren, sollten sie durch ihre<br />

Bounding Volumes so gut wie möglich approximiert werden. Allerdings sind<br />

für eine bessere Approximation auch komplexere Bounding Volumes nötig, so<br />

dass dann der Überlappungstest selbst wieder aufwendiger wird. Bei bewegten<br />

Objekten muss außerdem Wert darauf gelegt werden, dass die Aktualisierung<br />

der Bounding Volumes effizient durchgeführt werden kann. Hinzu kommt,<br />

dass die Bounding Volumes dazu geeignet sein müssen, den Aufbau und die<br />

Aktualisierung einer BV- Hierarchie (Abschnitt 3.3.4.2) zu unterstützen. Ein<br />

weiteres Kriterium für die Eignung zu Hierarchiebildung ist die Konvergenzgeschwindigkeit,<br />

mit der sich die Bounding Volumes bei weitergehender<br />

Verfeinerung der Hierarchie an ein Objekt anpassen.<br />

Für die Bewertung der Bounding Volumes ist ein Gütekriterium erforderlich.<br />

In der Literatur existiert dazu ein einheitlicher Ansatz einer Kostenfunktion der<br />

folgenden Form:<br />

T = N u ⋅C<br />

u + N v ⋅C<br />

v + N p ⋅C<br />

. p<br />

Dabei ist<br />

Nu<br />

Cu<br />

Nv<br />

Anzahl der aktualisierten Bounding- Volumes<br />

Kosten für die Aktualisierung eines einzelnen BVs<br />

Anzahl der BV- Überlappungstests<br />

47


Cv<br />

Np<br />

Cp<br />

Kosten für einen BV- Überlappungstest<br />

Anzahl der Primitivtests<br />

Kosten für einen Primitivtest.<br />

Ein gutes Verfahren zur Kollisionserkennung mit Bounding Volumes hat die<br />

Aufgabe, T zu minimieren. Abbildung 3-19 zeigt einige der gebräuchlichsten<br />

Bounding Volumes und ihre Eigenschaften bezüglich der Anzahl und<br />

Geschwindigkeit der Überlappungstests.<br />

Sphäre AABB OBB 6-dop Konvexe<br />

Hülle<br />

Erhöhung der Passgenauigkeit<br />

Abnahme der Anzahl der Überlappungstests<br />

Abnahme der Kosten für (Überlappungstest + BV- Aktualisierung)<br />

Abb. 3-19 Beispiele für Bounding Volumes<br />

Sphären. Für Sphären müssen lediglich Kugelmittelpunkt und –radius<br />

gespeichert werden, da sie rotationsinvariant sind. Sowohl Überlappung als<br />

auch Abstand zweier Kugeln lassen sich wesentlich schneller als mit jeder<br />

anderen Art von Bounding Volume bestimmen. Weil die Konvergenz noch<br />

schlechter als bei AABBs ist, existiert eine Vielzahl von Methoden, um je nach<br />

Art der Objekte möglichst geeignete Hierarchien über Kugeln aufzubauen.<br />

Axis-aligned Bounding Boxes (AABB). Dies ist die einfachste Form eines<br />

Bounding Volumes, sie entspricht einem Quader, der senkrecht zu den<br />

Koordinatenachsen ausgerichtet ist. Die Speicheranforderung für AABBs ist<br />

sehr gering und Überlappungstest und Aktualisierung lassen sich mit wenigen<br />

Koordinatenvergleichen durchführen. Durch einfaches Aufspalten in mehrere<br />

kleinere Quader eignen sie sich für den automatischen Top-Down-Aufbau<br />

einer Hierarchie. Diesen Vorgang kann man solange Fortsetzten, bis die<br />

AABBs auf der untersten Ebene nur noch eine Facette enthalten.<br />

Oriented Bounding Boxes (OBB). OBBs sind einer Erweiterung von AABBs<br />

und können in beliebige Richtungen rotiert werden. Aus diesem Grund<br />

konvergieren sie wesentlich schneller (quadratisch) gegen das approximierte<br />

Objekt. Die optimale Anpassung einer OBB an eine Punktmenge ist allerdings<br />

48


nicht trivial, es muss zumindest die konvexe Hülle der Punkte bestimmt<br />

werden, deren Kovarianzmatrix dann die Ausrichtung der OBB über ihre<br />

Eigenvektoren bestimmt.<br />

Discret Oriented Polytopes (k- Dop). Ein k-Dop [Klosowski98] ist ein durch<br />

k Hyperebenen begrenzter Polyeder. Die Normalen der Hyperebenen werden<br />

aus einer kleinen Menge von Vektoren gebildet. Im allgemeinen wählt man die<br />

Einträge der Normalenvektoren aus der Menge {-1,0,1}. Zu jeder Normalen<br />

wird auch die Normale in die Gegenrichtung gebraucht, so dass<br />

gegenüberliegende Facetten des Polyeders parallel zueinander sind.<br />

Lässt man beispielsweise im R³ für jeden Normalenvektor nur jeweils einen<br />

Eintrag ungleich 0 zu, ergeben sich die sechs Normalenvektoren einer AABB<br />

(6-Dop), dagegen erhält man mit Einträgen aus {-1,1} einen Oktaeder (8-<br />

Dop). Durch Hinzunahme weiterer Vektoren werden weitere k-Dop’s (z.B. 14-<br />

,18- oder 26 Dop) gebildet.<br />

3.3.4.2 Bounding Volume Hierarchien<br />

Bounding Volume Hierarchien (BVHs) sind einfache und häufig verwendete<br />

Datenstrukturen für die Kollisionserkennung zwischen komplexen Objekten.<br />

Sie lassen sich unabhängig von den topologischen Eigenschaften des Modells<br />

erstellen und sind somit auch für Polygon soups einsetzbar.<br />

Ein BVH ist eine Baumstruktur aus unterschiedlichen Bounding Volumes,<br />

deren Blattknoten zusammen die gesamte Objektgeometrie enthalten und in der<br />

jeder Vater-Knoten, die Geometrie aller seiner Kind- Knoten umhüllt. Im<br />

Allgemeinen ist jedes BV in der Hierarchie in Bezug auf Volumen, Oberfläche,<br />

Durchmesser o.a. Gütekriterien so optimal wie möglich zu gestalten.<br />

Abbildung 3-20 zeigt ein Beispiel einer BVH mit Sphären.<br />

Abb. 3-20 Bounding Volume Hierarchie aus Sphären<br />

Die Kollisionserkennung mittels BVHs wird durch rekursives Testen auf<br />

Überschneidungen der im Baum enthaltenen BV durchgeführt. Wurde eine<br />

Überlappung entdeckt, so werden anschließend die Kind- Knoten der<br />

beteiligten BVs getestet. Falls keine Kollision festgestellt werden konnte, wird<br />

die Rekursion für diesen Zweig des Baumes abgebrochen. Setzt sich die<br />

49


Rekursion bis zu den Blattknoten fort, so wird anschließend ein Primitivtest der<br />

in den Knoten enthaltenen Geometrie durchgeführt.<br />

Im Allgemeinen gilt, dass Komplexere BVs die Objektgeometrie besser<br />

approximieren und damit die Anzahl der notwendigen Überlappungstests<br />

reduzieren. Zugleich sind diese Tests jedoch gewöhnlich aufwendiger als bei<br />

einfacheren BVs. Es muss also gemäß der Kostenfunktion u.a. ein Kompromiss<br />

zwischen der Anzahl und der Kosten der durchzuführenden Tests sowie den<br />

Aktualisierungskosten gefunden werden. Im folgenden Abschnitt soll dies<br />

näher analysiert werden.<br />

3.3.4.3 Entscheidung für ein Bounding Volume<br />

Auch hier gilt wieder, dass kein Bounding Volume unter optimalen Kosten für<br />

alle Anwendungsfälle einsetzbar ist. Die Entscheidung für ein BV muss daher<br />

die speziellen Anforderungen der Simulationsumgebung und die Eigenschaften<br />

der unterschiedlichen BVs berücksichtigen. Denkbar sind darüber hinaus auch<br />

Kombinationen unterschiedlicher BVs. Prinzipiell gilt, dass alle vorgestellten<br />

BVs im vorliegenden Anwendungsfall eingesetzt werden könnten.<br />

Die beste Approximation der Objekte wird mit k-Dops erreicht. Problematisch<br />

ist jedoch, dass bei Rotation des Objekts, diese, auf Grund ihrer<br />

Achsparallelität, neu erzeugt werden müssten. Gleiches gilt für die (an sich in<br />

der Gruppe der k-dops enthaltenen) AABBs. Speziell im Hinblick auf die<br />

Verwendung einer Hierarchie von BVs stellt dieser Fakt ein erhebliches<br />

Problem dar, da dann zu Laufzeit der Simulation in jedem Zeitschritt die BV-<br />

Hierarchien eines jeden Objekts (bei Rotation) neu erzeugt werden müssten.<br />

Um diesem Problem zu begegnen, existieren Verfahren, die entweder nur<br />

wirklich bewegte Objekte neu erzeugen oder bereits vor Ausführung der<br />

Simulation verschiedene quantisierte Orientierungen der BVs berechnen und<br />

abspeichern (QuOSPOs).<br />

Prinzipiell geht aus der Literatur- Recherche hervor, dass sich für dynamische<br />

Umgebungen mit Starrkörpern OBBs am besten eignen. Der Grund hierfür ist,<br />

dass die Gesamte OBB- Hierarchie <strong>of</strong>fline erzeugt werden kann und dass bei<br />

Rotation eines Objekts, diese nicht neu erzeugt werden muss, sondern einfach<br />

mitrotiert werden kann. Alle Hüllkörper können somit vor Beginn der<br />

eigentlichen Simulation berechnet werden.<br />

Sphären haben den Vorteil, dass der Überlappungstest im Vergleich zu allen<br />

anderen BVs sehr schnell durchzuführen ist. Problematisch ist hier, dass die<br />

Konvergenz der Approximation an das zu umhüllende Objekt meist sehr gering<br />

ist. Im vorliegenden Fall ist dies ebenso anzunehmen, da sich<br />

<strong>of</strong>fensichtlicherweise Maschinenteile oder speziell Roboterarme nur sehr<br />

schlecht mit Sphären approximieren lassen (Abbildung 3-21). Dies hat dann<br />

die Konsequenz, dass sich Bounding Boxen in zunehmenden Maße überlappen,<br />

obwohl keine Kollision eingetreten ist und somit die Anzahl der<br />

Überlappungstests steigt.<br />

50


Abb. 3-21 Konvergenz einiger Bounding Volume<br />

Es sollen daher für den Schnitttest der Baugruppen Orientierte Bounding Boxe<br />

Hierarchien (OBB- Trees) verwendet werden, welche im folgenden näher<br />

erläutert werden.<br />

3.3.5 Oriented Bounding Box Trees (OBB-Trees)<br />

Eine orientierte Bounding Box (OBB) ist ein beliebig orientierter Quader. Eine<br />

OBB Repräsentation besteht folglich aus einem Mittelpunkt, der Orientierung<br />

der Box und der Ausdehnung in die sich aus der Orientierung ergebenden drei<br />

Richtungen. Abbildung 3-22 zeigt eine zweidimensionale schematische<br />

Repräsentation einer vierstufigen OBB- Hierarchie.<br />

Abb. 3-22 vierstufige Hierarchie aus OBBs (S.6)<br />

Im folgenden soll nun zum einen gezeigt werden, wie diese Hierarchien erstellt<br />

werden können und zum anderen, welche Möglichkeiten es gibt, die Parameter<br />

der OBBs für eine gegebene Polygonmenge zu berechnen.<br />

3.3.5.1 Erstellen der Bounding Volume Hierarchie<br />

Bounding Volume Hierarchien können auf drei Arten erstellt werden: Top-<br />

Down, Bottom Up oder durch Inkrementelles Einfügen. OBB- Hierarchien<br />

51


werden auf Grund der einfachen Implementierung meist Top-Down in einer<br />

sogenannten „split and fit“ - Strategie erstellt. Das bedeutet, dass zunächst das<br />

gesamte Objekt umhüllt wird und anschließend das so erstellte Volumen in<br />

eine feste Anzahl kleinerer Volumen zerlegt wird. Für die in jedem dieser<br />

Teilvolumen enthaltene Objektgeometrie wird dann ein neues Hüllvolumen<br />

berechnet. Dies wird so lange durchgeführt, bis die Volumen auf der untersten<br />

Ebene nur noch ein Primitiv der Objektgeometrie enthalten.<br />

Die Anzahl der Unterteilungen eines jeden Volumens bestimmt den<br />

Verzweigungsgrad der so erstellten Bäume. Denkbar sind daher beispielsweise<br />

Binär-, Quad- oder Oktonärbäume (Abbildung 3-23).<br />

Abb. 3-23 Binärbaum (l.) u. entsprechender Quadtree (r.) [Mezger01]<br />

Höhergradige Bäume haben dabei den Vorteil, dass sie mit weniger Knoten<br />

auskommen. Somit benötigen sie in der Regel weniger Speicherplatz.<br />

Abbildung 3-24 zeigt die Rekursionsbäume für einen Binär- und Quadtree für<br />

den Fall, dass zwei Blätter kollidieren. Es zeigt sich, dass die Anzahl der<br />

notwendigen Überlappungstests gleich ist, der Binärbaum jedoch doppelt so<br />

tief ist. Dadurch erhöhen sich beim Binärbaum die Traversierungskosten.<br />

Abb. 3-24 Kollision zweier Binärbaumblätter (l.), Quadtree (r.) [Mezger01]<br />

Falls sich nun allerdings nur die Wurzeln der beiden Hierarchien überlappen,<br />

aber keine Kollision stattfindet (Abbildung 3-25), sind bei der Quadtree-<br />

Implementierung fast doppelt so viele Überlappungstests (Nv) nötig.<br />

52


Abb. 3-25 Überlappung der Wurzelknoten [Mezger01]<br />

Aufgrund dessen, dass im vorliegenden Fall die Kosten für einen<br />

Überlappungstest (Cv) relativ hoch sind, sollte daher jeder unnötige Schnitttest<br />

(Nv) vermieden werden. Die größeren Speicheranforderungen durch<br />

Binärbäume und die erhöhte Traversierungsdauer werden dafür in Kauf<br />

genommen. Es werden folglich Binärbäume verwendet.<br />

Das Teilen der OBBs erfolgt, indem zunächst eine Trennebene orthogonal zur<br />

längsten Achse der Box aufgespannt wird. Diese wird so konstruiert, dass sie<br />

den Scherpunkt der Objektgeometrie enthält. Anschließend wird jedes Primitiv<br />

entsprechend der Lage seines Schwerpunkts einem der beiden durch die<br />

Trennebene definierten Halbräume zugeordnet. Sind beiden Halbräumen<br />

Primitive zugeordnet worden, so werden aus diesen neue Boxen erzeugt<br />

(Abbildung 3-26).<br />

Abb. 3-26 Aufbau einer Bounding Volume Hierarchie<br />

Konnte keine Separierung vorgenommen werden, so wird die Trennebene<br />

orthogonal zur zweitlängsten Achse gewählt. Wurden auch hier wieder alle<br />

Primitive einem Halbraum zugeordnet so wird die kürzeste Achse als Normale<br />

der Trennebene verwendet. Dieser Vorgang wird so lange wiederholt, bis die<br />

OBBs auf der untersten Ebene jeweils nur noch ein Primitiv enthalten.<br />

53


3.3.5.2 Berechnung der OBB-Parameter<br />

Soll ein beliebiges Objekt durch eine OBB umhüllt werden, so müssen deren<br />

optimale Parameter (Mittelpunkt, Orientierung und Ausdehnung) bestimmt<br />

werden. Besonders problematisch ist hierbei, die Orientierung der Box zu<br />

berechnen. Ist diese bekannt, so lassen sich die übrigen Parameter einfach<br />

bestimmen, was im folgenden gezeigt werden soll:<br />

Unter der Annahme, dass die Orientierung der Box bereits berechnet ist, lassen<br />

sich die Ausdehnungen entlang der Flächennormalen v1, v2 und v3<br />

folgendermaßen bestimmen:<br />

u1 = max k ( v1<br />

⋅ pk<br />

)<br />

u = ( v ⋅ p )<br />

2 max k 2 k<br />

3 = max k ( v3<br />

pk<br />

u ⋅<br />

l1 = min k ( v1<br />

⋅ pk<br />

)<br />

l = ( v ⋅ p )<br />

2 min k 2 k<br />

3 = min k ( v3<br />

pk<br />

l ⋅<br />

)<br />

Die Punkte pk entsprechen dabei den Vertices der zu umhüllenden Geometrie.<br />

Die Ausdehnung entlang einer Achse vi berechnet sich aus der Differenz ui - li.<br />

Der Mittelpunkt c wird anschließend bestimmt:<br />

1<br />

1 1<br />

c = ( l1<br />

+ u1)<br />

v1<br />

+ ( l2<br />

+ u2<br />

) + ( l3<br />

+ u3<br />

) v3<br />

2<br />

2 2<br />

Nun gilt es zu klären, wie die Orientierung der OBB berechnet werden kann.<br />

Ziel ist es, die OBB nach dem zu umhüllenden Objekt auszurichten. Ist dieses<br />

beispielsweise lang und dünn, wie z.B. ein Stift, so sollte eine Achse der<br />

berechneten Box nach dessen längster Seite ausgerichtet sein. Ist das Objekt<br />

hingegen besonders dünn entlang einer Richtung, wie dies beispielsweise bei<br />

einem Blech der Fall ist, so sollte eine Achse der OBB möglichst an dessen<br />

Normale ausgerichtet sein. Dies wird nach [Gottschalk00] erreicht, indem die<br />

statistische Verteilung der Geometrie des zu umhüllenden Objekts untersucht<br />

wird, was im folgenden näher erläutert werden soll.<br />

3.3.5.3 Kovarianzbasierte Methoden<br />

Die Form und Gestalt einer Puntkwolke lässt sich approximativ mit einer<br />

Kovarianzmatrix C und ihrem Mittelpunkt m beschreiben. Für Punkte im n-<br />

dimensionalen Raum ergeben sich entsprechend eine reelle, symmetrische<br />

nxn–Matrix und ein n-dimensionaler Vektor. Diese Größen beschreiben die<br />

Punktmenge genau auf die gleiche Art und Weise, wie eine Gaußkurve die<br />

Verteilung einer Menge von Punkten auf einer reellen Achse beschreibt. Die<br />

Kovarianzmatrix und der Mittelpunkt sind lediglich Verallgemeinerungen auf<br />

höhere Dimensionen der üblichen Glockenkurve.<br />

)<br />

54


Die statistische Verteilung in eine spezielle Richtung v ist gegeben durch<br />

v T Cv. Dies entspricht der Streuung der Achs-Projektionen der Punkte auf v. Die<br />

Richtung, die diesen Wert maximiert oder minimiert entspricht den<br />

Eigenvektoren von C, welche zueinander orthogonal sind, da C reell und<br />

symmetrisch ist.<br />

Zur Bestimmung der Orientierung der OBBs wird daher zunächst die<br />

Kovarianzmatrix und deren Eigenvektoren berechnet. Anschließend werden,<br />

wie oben beschrieben, alle Punkte auf diese projiziert und so der Mittelpunkt<br />

und die Ausdehnung der Box bestimmt.<br />

Berechnet man nun die Kovarianz aus den Vertices des zu umhüllenden<br />

Objekts, so treten unter Umständen Probleme dahingehend auf, dass die<br />

berechnete Box nicht optimal ist. Innen liegende Punkte können beispielsweise<br />

die Ausrichtung der OBB verfälschen (Abbildung 3-27).<br />

Abb. 3-27 Auswirkung innerer Punkte auf die OBB- Berechnung<br />

Es ist daher zu empfehlen nur aus den äußeren Punkten die Kovarianzmatrix zu<br />

bestimmen. [Gottschalk00] zeigt jedoch, dass auch damit noch nicht optimale<br />

Boxen erzeugt werden können, falls die extremalen Punkte ungleichmäßig über<br />

den Rand des Objekts verteilt sind (Abbildung 3-28).<br />

Abb. 3-28 Auswirkung ungleichmäßiger Sampling- Raten<br />

Aus den bisher gezeigten Problemen folgt, dass eine Berechnung der<br />

statistischen Verteilung der Vertices allein <strong>of</strong>fenbar nicht ausreichend ist. Die<br />

Idee nach Gottschalk ist daher, über den Flächen/Linien der Primitive zu<br />

55


integrieren und aus diesen Ergebnissen die Kovarianz zu bestimmen<br />

(Abbildung 3-29).<br />

Abb. 3-29 Integrieren über den Primitiven<br />

Das Problem daran ist nun, dass die Ausrichtung von der Länge/Größe der<br />

Linien/Flächen abhängig ist und dass das zu umhüllende Objekt unter<br />

Umständen aus sehr kleinen Linen-/Flächensegmenten bestehen kann, die<br />

keinen großen Einfluss auf die Orientierung der Box haben, diese aber in ihrer<br />

Größe sehr ausdehnen (Abbildung 3-30).<br />

Abb. 3-30 Auswirkungen kleiner Linien/Flächensegmente<br />

Die Idee ist daher, die konvexe Hülle des Objekts zu bilden, und aus deren<br />

Oberfläche die Kovarianz zu berechnen (Abbildung 3-31).<br />

Abb. 3-31 Verwendung der konvexen Hülle<br />

56


Für die Berechnung der Kovarianzmatrix auf der konvexen Hülle, muss diese<br />

zuvor trianguliert werden. Anschließend wird die Kovarianzmatrix<br />

folgendermaßen aufgestellt:<br />

Die Kovarianzmatrix ist bestimmt durch:<br />

Cij = E[<br />

xi<br />

x j ] − E[<br />

xi<br />

] E[<br />

x j ]<br />

die Erwartungswerte E [ xi<br />

] und [ i j ] x x E sind definiert durch:<br />

E [ xi<br />

] =<br />

[ i j ] x x E =<br />

∫<br />

M<br />

x dA<br />

∫<br />

M<br />

i<br />

dA<br />

1<br />

= M ∑ A k<br />

∫<br />

M<br />

x x<br />

i<br />

∫<br />

M<br />

1<br />

A<br />

j<br />

dA<br />

dA<br />

xi<br />

A<br />

... i-te Koordinate eines beliebigen Punktes der Dreiecke<br />

M ... Fläche aller Dreiecke<br />

A k ... Fläche des k-ten Dreiecks<br />

mi k mi<br />

... i-te Koordinate des Mittelpunkts des k-ten Dreiecks<br />

M pi<br />

... i-te Koordinate des Mittelpunkts des gesamten Modells<br />

k ,qi k ,ri k ... i-te Koordinaten der Eckpunkte des k-ten Dreiecks<br />

s,t ... Parameter der Dreiecksparametrisierung:<br />

k<br />

k<br />

x ( s,<br />

t)<br />

= p<br />

k k<br />

k k<br />

+ s ⋅ ( q − p ) + t ⋅ ( r − p ) = f ( s,<br />

t)<br />

A<br />

k<br />

m<br />

k<br />

i<br />

1 1−s<br />

k<br />

= ∑ 2A<br />

M ∫ ∫<br />

k<br />

0<br />

0<br />

f ( s,<br />

t)<br />

dtds<br />

k<br />

1 2A<br />

k k k k k k k k<br />

= ∑ [ 9mi<br />

m j + pi<br />

p j + qi<br />

q j + ri<br />

rj<br />

]<br />

M<br />

A<br />

k<br />

24<br />

und somit ergibt sich für die Kovarianzmatrix:<br />

k<br />

k k k k k k k k M M<br />

[ m m + p p + q q + r r ] m m<br />

1 1<br />

Cij = M ∑ 9 i j i j i j i j −<br />

A 24<br />

i<br />

j<br />

.<br />

.<br />

57


Für die Identifikation der OBB- Parameter müssen abschließend die<br />

Eigenvektoren der Kovarianzmatrix berechnet werden. Dies soll im folgenden<br />

Abschnitt erläutert werden.<br />

3.3.5.4 Bestimmung der Eigenvektoren<br />

Die Berechnung der Eigenvektoren erfordert zunächst die Bestimmung der<br />

Eigenwerte. Diese lassen sich durch die Lösung der folgenden Gleichung<br />

bestimmen, wobei det(M) die Determinante einer nxn-Matrix M und E die nxn-<br />

Einheitsmatrix bezeichnet:<br />

det( A − λ E)<br />

= 0 .<br />

Die Auflösung der Determinante liefert ein Polynom n-ten Grades. Da dessen<br />

Auflösung sehr ineffizient ist, werden die Eigenvektoren großer Matrizen in<br />

der Regel durch spezielle numerische Verfahren bestimmt. Eines dieser<br />

Standardverfahren ist die QR- Zerlegung.<br />

QR- Zerlegung<br />

Es gibt wiederum drei Verfahren, mit denen sich eine QR- Zerlegung<br />

berechnen lässt:<br />

1) Das Verfahren von Gram-Schmidt, das auf dem Verfahren beruht, aus n<br />

linear unabhängigen Vektoren n orthonormale Vektoren zu machen.<br />

Diese Verfahren ist numerisch instabil, wenn man keine Modifikation<br />

vornimmt.<br />

2) Das Householder-Verfahren, das man sich über Spiegelungen an<br />

Hyperflächen veranschaulichen könnte.<br />

3) Das Givens-Verfahren, das mit Rotation von Vektoren in einem<br />

Koordinatensystem begründet werden kann. Im Vergleich zum<br />

Householder Verfahren ist der Aufwand des Givens- Verfahrens<br />

größer, weil nicht spaltenweise sondern elementweise Nullen erzeugt<br />

werden.<br />

Aus den beschriebenen Eigenschaften geht hervor, dass zur Berechnung der<br />

QR- Zerlegung die Verwendung des Householder Verfahrens anzustreben ist.<br />

Eine detaillierte Beschreibung des Householder- Verfahrens soll an dieser<br />

Stelle ausgelassen werden, da es sich hierbei um ein Standardverfahren der<br />

Numerik handelt.<br />

Die Eigenwerte berechnen sich anschließend nach folgendem Algorithmus:<br />

Iteriere bis zur Konvergenz:<br />

Berechne QR- Zerlegung A = Q ⋅ R<br />

T<br />

Setze A = R ⋅Q<br />

(Ähnlichkeitstransformation A → Q ⋅ A ⋅Q<br />

)<br />

58


Das Verfahren konvergiert zu einer Matrix in oberer Dreiecksform, deren<br />

Hauptdiagonale die Eigenwerte enthält.<br />

Berechnung der Eigenvektoren<br />

Aus den Eigenwerten lassen sich die Eigenvektoren aus der Gleichung:<br />

( A − λ E)<br />

⋅ x = 0<br />

bestimmen. Es muss somit lediglich ein lineares Gleichungssystem mit drei<br />

Gleichungen gelöst werden.<br />

Nachdem nun alle Parameter der OBBs bestimmt sind, soll im folgenden soll<br />

geklärt werden, wie der Überlappungstest zwischen OBBs möglichst effizient<br />

durchgeführt werden kann.<br />

59


3.3.6 OBB Überlappungstest<br />

Ein trivialer Test auf Nichtüberschneidung stellt die Projektion der Boxen auf<br />

eine beliebige Achse dar. Jede Box würde so ein Intervall auf dieser Achse<br />

aufspannen. Überlappen sich diese Intervalle nicht, so wird diese Achse als<br />

separierende Achse für die Boxen bezeichnet und die Boxen überlappen sich<br />

folglich ebenfalls nicht. Überlappen sich die Intervalle jedoch, so kann keine<br />

Aussage über eine Kollision getr<strong>of</strong>fen werden, die Boxen könnten sich<br />

schneiden, müssen es aber nicht. In diesem Fall wären weitere Tests<br />

erforderlich.<br />

Nach [Gottschalk00] kann gezeigt werden, dass zwei nichtüberlappende<br />

konvexe Polytope im R 3 immer von einer Ebene separiert werden können, die<br />

parallel zu einer Fläche des Polytops oder parallel zu einer Kante von jedem<br />

Polytop ist [Gottschalk, Lin, Manocha96].<br />

Da jede Box drei unterschiedliche Flächenorientierungen und drei unterschiedliche<br />

Kantenrichtungen besitzt, sind folglich für den OBB- Schnitttest maximal<br />

15 potentielle separierende Achsen zu testen (3 Flächen der einen Box, 3<br />

Flächen der anderen Box und 9 paarweise Kombinationen der Kanten).<br />

Überlappen sich die beiden Boxen nicht, so existiert unter diesen keine<br />

separierende Achse. Somit ist ein Test der 15 Achsen hinreichend für die<br />

Aussage, ob sich die Boxen überlappen oder nicht.<br />

Um diesen Test durchzuführen, müssen also die Mittelpunkte und die<br />

aufgespannten Radien der Boxen auf einer der zu testenden Achsen projiziert<br />

werden (Abbildung 3-32). Ist die Entfernung der Boxmittelpunkte größer als<br />

die Summe der Radien, so überlappen sich die Intervalle und damit die Boxen<br />

nicht. Die gewählte Achse wird somit zu einer separierenden Achse und der<br />

Test kann abgebrochen werden.<br />

Abb. 3-32 L ist separierende Achse für die OBBs A und B<br />

60


Folglich ergibt sich für die Berechnung einer separierenden Achse folgender<br />

Ausdruck:<br />

r r<br />

T ⋅ L<br />

><br />

∑<br />

i<br />

r<br />

i<br />

a A ⋅ L +<br />

i<br />

∑<br />

i<br />

r<br />

b B<br />

i<br />

i<br />

⋅ L .<br />

Ist dieser erfüllt, so separiert L die beiden getesteten Boxen und diese<br />

überlappen sich folglich nicht.<br />

3.3.7 Primitivtest<br />

Bisher wurden lediglich Überschneidungstests zwischen Hüllvolumen betrachtet.<br />

Handelt es sich hierbei im Falle einer Überlappung um Blattknoten in der<br />

entsprechenden Hierarchie, so muss für eine exakte Kollisionserkennung eine<br />

Untersuchung der von den Volumen eingeschlossenen Geometrie durchgeführt<br />

werden.<br />

Zunächst soll analysiert werden, welche geometrischen Primitive zu erwarten<br />

sind und welche Möglichkeiten für einen gegenseitigen Überlappungstest<br />

bekannt sind.<br />

3.3.7.1 Geometrie<br />

Die Java3D – Geometrie eines Shapes besteht aus Punkten, Linien, Dreiecken<br />

oder Vierecken. Prinzipiell müssten also für alle diese Primitive Überlappungstests<br />

implementiert werden. In der vorliegenden Arbeit soll sich der<br />

Primitivtest jedoch auf Dreiecke beschränken. Grund hierfür ist, dass es sich<br />

bei den durch die FileLoader geladenen Bauteile in der Regel um<br />

dreidimensionale Objekte handelt, deren äußere Hülle durch Flächen (Dreiecke<br />

oder Vierecke) approximiert wird. Sollte es sich bei diesen Flächenstücken um<br />

Vierecke handeln, so können diese leicht trianguliert werden.<br />

Für den Schnittest zweier Dreiecke existieren eine Reihe von Verfahren. Die<br />

Literaturrecherche ergab, dass die am häufigsten Verwendung findenden<br />

Algorithmen diejenigen von [Möller97], [Held97] und [Devillers02] sind,<br />

welche im folgenden vorgestellt werden sollen.<br />

3.3.7.2 Möller<br />

[Möller97] beginnt mit der gegenseitigen Lageuntersuchung jedes Dreiecks in<br />

Bezug auf die durch das andere Dreieck aufgespannte Ebene. Liegen alle<br />

Eckpunkte jeweils im gleichen Halbraum und keiner auf der Ebene, so<br />

überlappen sich die Dreiecke nicht und der Test kann abgebrochen werden.<br />

Andernfalls schneiden die Dreiecke die Schnittgerade L der durch sie<br />

aufgespannten Ebenen (Abbildung 3-33). Ein Test der Intervalle [t3,t4]und<br />

[t1,t2] auf Überschneidungen liefert schlussendlich ein Ergebnis.<br />

61


3.3.7.3 Held<br />

[Held97] untersucht in ähnlicher Art und Weise zunächst die gegenseitigen<br />

Lagebeziehungen der Eckpunkte p2, q2 u. r2 des zweiten Dreiecks T2 in Bezug<br />

auf die durch das erste aufgespannte Ebene Π1. Liegen diese nicht alle im<br />

selben Halbraum, so wird in einem zweiten Schritt direkt das Liniensegment s<br />

= T2 ∩ Π1 bestimmt (Abbildung 3-33).<br />

Abb. 3-33 Verfahren von Möller (l.) und Held (r.)<br />

Anschließend wird in einem zweidimensionalen Linie/Dreieck- Schnitttest<br />

untersucht, ob dieses Segment T1 schneidet.<br />

3.3.7.4 Devillers<br />

Die Verfahren von Möller und Held berechnen den Schnitt der Dreiecke in<br />

mehreren Stufen und haben nach [Devillers02] daher zwei Nachteile.<br />

Zum einen muss die Ausnahmebehandlung für jeden Schritt der Verfahren<br />

exklusiv durchgeführt werden. Weiterhin hat die Abarbeitung von mehreren<br />

Schritten zur Folge, dass sich die Verwendung von Zwischenergebnissen<br />

nachteilig auf die Rechengenauigkeit auswirkt. Das Verfahren nach<br />

[Devillers02] kommt ohne die Verwendung von Zwischenergebnissen aus, ist<br />

damit numerisch robuster und zusätzlich auch effizienter.<br />

Das Verfahren nach [Devillers02] basiert lediglich auf der Auswertung von<br />

Prädikaten der folgenden Form:<br />

Def. 3-1 Gegeben seien vier Punkte in R 3 : a = (ax; ay; az), b = (bx; by; bz), c =<br />

(cx; cy; cz) and d = (dx; dy; dz), so definieren wir die Determinante<br />

62


Das Vorzeichen dieses Prädikats besitzt zweierlei geometrische Interpretationen<br />

(Abbildung 3-34). Zum einen liefert es eine Aussage darüber, ob der<br />

Punkt d über, unter oder auf der durch a,b u. c aufgespannten Ebene liegt,<br />

wobei oben durch die Rechte- Hand- Regel definiert ist. Äquivalent dazu lässt<br />

sich mit Hilfe des Vorzeichens bestimmen, ob sich eine rechtsdrehende<br />

Schraubenbewegung um ab in Richtung cd drehen würde.<br />

Abb. 3-34 Geometrische Interpretation für den positiven Fall<br />

Unter ausschließlicher Verwendung dieser Prädikate ergibt sich zusammengefasst<br />

folgende Verfahrensweise.<br />

In einem ersten Schritt wird wie bei Möller die relative Position des ersten<br />

Dreiecks T1 zu der durch das zweite Dreieck aufgespannten Ebene Π2 ermittelt.<br />

Dazu werden die Vorzeichen der Prädikate [p2,q2,r2,p1] , [p2,q2,r2,q1] und<br />

[p2,q2,r2,r1] untersucht. Drei unterschiedliche Fälle sind denkbar:<br />

a) alle haben das gleiche Vorzeichen und keines ist Null<br />

b) alle sind Null<br />

c) unterschiedliche Vorzeichen<br />

Im Fall a) liegen alle Punkte aus T1 im selben durch Π2 aufgespannten<br />

Halbraum. Die Dreiecke überschneiden sich daher nicht und der Test wird<br />

abgebrochen. Im Fall b) sind die Dreiecke koplanar, folglich wird ein<br />

zweidimensionaler Schnittest durchgeführt, der dann ein Ergebnis liefert. Auf<br />

diesen Test soll an dieser Stelle nicht gesondert eingegangen werden. Es ist<br />

lediglich wichtig zu wissen, dass auch dieser mit der Auswertung von, auf den<br />

zweidimensionalen Fall spezialisierten, Prädikaten der oben beschriebenen<br />

Form auskommt.<br />

Im Fall c) schneidet das Dreieck T1 die Ebene Π2. In einem anschließenden<br />

Schritt wird daher nun in gleicher Art und Weise die Lage der Eckpunkte aus<br />

T2 in Bezug auf Π1 ermittelt. Sollte auch dieser erneute Test keine<br />

63


Entscheidung liefern, so wird in einem dritten Schritt wird eine geeignete<br />

Permutation der Vertices beider Dreiecke gesucht, so dass jeweils p1<br />

(respektive p2) auf der einen Seite von Π2 (respektive Π1) und alle anderen<br />

Punkte des Dreiecks auf der gegenüberliegenden Seite liegen. Die Auswertung<br />

zweier weiterer Prädikate:<br />

[p1,q1,p2,q2] ≤ 0 ∧ [p1,r1,r2,p2] ≤ 0<br />

liefert somit eine Entscheidung für den Überlappungstest. Anhand von<br />

Abbildung 3-35 und den oben beschriebenen geometrischen Interpretationen<br />

der verwendeten Prädikate lässt sich dies leicht nachvollziehen:<br />

Abb. 3-35 Überlappungstest zweier Dreiecke<br />

Eine Überlappung tritt folglich auf, wenn sich die Intervalle [i,j] und [k,l]<br />

überschneiden, also folglich die Bedingungen k ≤ j und i ≤ l erfüllt sind. Genau<br />

dies prüfen die beiden Prädikate.<br />

Auf Grund der Robustheit und der Effizienz soll daher das Verfahren von<br />

[Devillers02] für den Dreieck-Dreieck-Schnitttest verwendet werden.<br />

Im folgenden Abschnitt soll nun gezeigt werden, wie die Kollisionskontrolle in<br />

die vorhandene Simulationsumgebung integriert werden kann.<br />

3.3.8 Integration in die Simulation<br />

Die Ablaufsteuerung unterteilt den Ausführungszeitraum der CNC-Programme<br />

in diskrete Zeitintervalle gleicher Länge. Um parallel laufende Programme<br />

ausführen zu können, werden daher zwischen jedem Zeitschritt nur die, für das<br />

aktuelle Zeitintervall in den CNC-Kommandos vorgesehenen Konfigurationsänderungen,<br />

ausgeführt.<br />

64


Die Kollisionserkennung wird daher, der zeitlichen Diskretisierung der<br />

Simulation folgend, nach Ausführung aller Konfigurationsänderungen eines<br />

Zeitschritts, also an dessen Ende durchgeführt (Abbildung 3-36).<br />

…<br />

ti-1<br />

ti<br />

ti+1<br />

ti+2<br />

ti+3<br />

ti+4<br />

CNC<br />

Programm 1<br />

∆ t<br />

1<br />

2<br />

CNC<br />

Programm 2<br />

3<br />

4<br />

Command1.exceute(0,50)<br />

Command3.exceute(50,150)<br />

Command1.exceute(50,150)<br />

Command3.exceute(150,250)<br />

Command2.exceute(0,100)<br />

Command3.exceute(250,300)<br />

Command4.exceute(0,50)<br />

Abb. 3-36 Integration der Kollisionskontrolle in die Simulation<br />

Folglich wird diese lediglich zu diskreten Zeitpunkten berechnet. Hier zeigt<br />

sich ein typisches Problem der Diskretisierung von kontinuierlichen Prozessen.<br />

Die Problematik besteht darin, dass Kollisionen, die zwischen zwei<br />

Zeitschritten aufgetreten sind und am Ende des Zeitschritts, also zum Zeitpunkt<br />

der Kollisionserkennung nicht mehr existent sind, vom System somit nicht<br />

erkannt werden können. Um diesem Fakt entgegenzuwirken wird derzeit die<br />

Erforschung von kontinuierlichen Kollisionserkennungsverfahren vorangetrieben.<br />

Diese wirken sich jedoch bislang noch sehr negativ auf die<br />

Performance des Gesamtsystems aus und sind nur relativ aufwendig zu<br />

implementieren.<br />

Da die angesprochene Problematik in durchgeführten Tests mit entsprechend<br />

kleiner zeitlicher Auflösung (bspw. 100ms) für die dargestellten Anwendungsbeispiele<br />

auf Grund der relativ langsamen Bewegung der Objekte kein akutes<br />

Problem darstellte, wurde unter Abschätzung von Kosten und Nutzen von der<br />

Implementierung einer kontinuierlichen Kollisionserkennung zunächst abgesehen.<br />

Da S<strong>of</strong>tware jedoch immer auch an ihrer Erweiterbarkeit gemessen<br />

wird, soll ein Ansatz für eine kontinuierliche Kollisionserkennung unter<br />

Verwendung der bisher verwendeten Strukturen (OBBs) vorgestellt werden,<br />

um somit bei Bedarf eine Implementierung für erweiterte Versionen der<br />

aktuellen S<strong>of</strong>tware zu vereinfachen und vorzubereiten.<br />

. . .<br />

CollisionDetection()<br />

CollisionDetection()<br />

CollisionDetection()<br />

65


3.3.9 Kontinuierliche Kollisionserkennung<br />

Vorgestellt werden soll ein Ansatz nach [Redon00-04], der sich besonders<br />

durch Geschwindigkeit und Robustheit auszeichnet. Das Verfahren erkennt<br />

Kollisionen zwischen mehreren sich bewegenden, starren Objekten, auch wenn<br />

diese besonders dünn sind oder sich schnell bewegen. Seine Effektivität beruht<br />

auf der Kombination aus Intervall-Arithmetik und OBBs.<br />

Zusammengefasst beruht das Verfahren auf folgender Vorgehensweise: In<br />

einem ersten Schritt wird die Bewegung der Objekte durch eine einfache<br />

Zwischenbewegung interpoliert. Anschließend wird eine kontinuierliche<br />

Version des Separierenden-Achsen-Theorems aufgestellt, um somit OBBs über<br />

einen ganzen Zeitraum auf Überlappungen testen zu können. Zusätzlich enthält<br />

das Verfahren einen kontinuierlichen Kollisionstest für sich bewegende<br />

Primitive.<br />

Interpolierende Zwischenbewegung<br />

Für kleine Zeitintervalle soll zur Vereinfachung der Berechnungen die<br />

Bewegung der Objekte interpoliert werden. Nach dem Theorem von Chasles<br />

lässt sich für zwei beliebige Zustände eines starren Körpers (Position und<br />

Orientierung) eine Schraubenbewegung definieren [Selig03], die diesen<br />

unabhängig von der Originalbewegung vom Start- in den Endzustand überführt<br />

(Abbildung 3-37).<br />

Abb. 3-37 Schraubenbewegung als allgemeine Starrkörperbewegung<br />

Folglich wird eine einfache Schraubenbewegung mit konstanter Winkel- und<br />

Translationsgeschwindigkeit als Zwischenbewegung verwendet. Die entsprechende<br />

Transformationsmatrix für eine Schraubenbewegung um/entlang<br />

der z-Achse ist im folgenden dargestellt:<br />

mit<br />

−1<br />

S ( t)<br />

= P V ( t)<br />

P<br />

P ...Transformation der<br />

Schraubachse auf die<br />

z-Achse<br />

66


⎛cos( ω.<br />

t)<br />

− sin( ω.<br />

t)<br />

⎜<br />

⎜ sin( ω.<br />

t)<br />

cos( ω.<br />

t)<br />

V ( t)<br />

=<br />

⎜ 0 0<br />

⎜<br />

⎝ 0 0<br />

0<br />

0<br />

1<br />

0<br />

0 ⎞<br />

⎟<br />

0 ⎟<br />

⎟<br />

.<br />

s.<br />

t<br />

⎟<br />

1<br />

⎟<br />

⎠<br />

Für die sich bewegenden Objekte werden für das aktuell betrachtete<br />

Zeitintervall folglich Schraubenbewegungen berechnet, so dass sich die<br />

Parameter der Objekte (Lage und Orientierung) als einfache Funktionen der<br />

Zeit darstellen lassen:<br />

x<br />

−1<br />

( t)<br />

= P(<br />

t)<br />

x0<br />

= P V ( t)<br />

PP0<br />

x0<br />

wobei x0 einem beliebigen Punkt, P(t) der Originalbewegung und P0 der<br />

Objektpositionsmatrix zum Zeitpunkt t0 entspricht. Diese Funktion ist die<br />

Grundlage für den kontinuierlichen Überlappungstest der OBBs, welcher im<br />

folgenden vorgestellt werden soll.<br />

Kontinuierlicher Überlappungstest für OBBs<br />

Grundlage des Verfahrens ist nun, dass der diskrete Überlappungstest zweier<br />

OBBs:<br />

⋅ ATB<br />

3<br />

> ∑ ai<br />

a⋅<br />

ei<br />

3<br />

+ ∑<br />

i=<br />

1<br />

i=<br />

1<br />

a T b a⋅<br />

f<br />

i<br />

i<br />

durch eine kontinuierliche Variante ersetzt wird. Für den kontinuierlichen Fall<br />

ergeben sich auf der linken und rechten Seite der Gleichung folglich<br />

kontinuierliche Funktionen der Zeit. Beide Funktionen können in ihrem<br />

Wertebereich eingegrenzt werden, in dem Intervall- Arithmetik [Snyder92]<br />

verwendet wird. Sind nun [l1,l2] die Grenzen der linken Seite und [r1,r2] die der<br />

rechten Seite, so ist a eine separierende Achse über dem gesamten<br />

Zeitintervall, wenn gilt: l1 > r2.<br />

Da nun dieser Test lediglich herausfinden kann, ob eine Achse a die Boxen<br />

über dem gesamten Zeitintervall separiert, soll das Intervall bei Fehlschlagen<br />

der 15 Tests geteilt werden. Als Kriterium für eine weitere Unterteilung eines<br />

getesteten Intervalls wird das Verhältnis von Geschwindigkeit und Größe der<br />

Objekte verwendet. Demnach soll ein Intervall geteilt werden, wenn folgender<br />

Ausdruck erfüllt ist:<br />

3<br />

⎛<br />

⎞<br />

vr<br />

⋅ ei<br />

( t0<br />

) + ( t1<br />

− t0<br />

) vr<br />

> k⎜∑<br />

bi<br />

vr<br />

⋅ f ( t0<br />

) ⎟<br />

⎝ i=<br />

1<br />

⎠<br />

3<br />

∑ ai i<br />

i=<br />

1<br />

wobei vr der Relativgeschwindigkeit der beiden Objekte:<br />

ei, fi ... Orientierungen der Boxen<br />

ai, bi ... Ausdehnungen der Boxen<br />

a<br />

TA, TB<br />

... zu testende Achse<br />

... Mittelpunkte der Boxen<br />

67


vr = v(<br />

TA<br />

) − v(<br />

TB<br />

)<br />

und v(TA) der Geschwindigkeit der Box A entspricht:<br />

v ) P T<br />

1<br />

( TA<br />

) = PA<br />

V ′ A ( t0<br />

−<br />

Der Parameter k wurde experimentell ermittelt. Die besten Ergebnisse wurde<br />

nach [Redon02] für k = 0.2 erreicht.<br />

Kontinuierliche Kollisionserkennung zwischen Primitiven<br />

Für die kontinuierliche Kollisionserkennung zwischen aus Flächen bestehenden<br />

Objekten gilt es lediglich folgende Kontaktarten zu berücksichtigen:<br />

Eckpunkt/Fläche, Fläche/Eckpunkt, und Kante/Kante. Zudem kann nach<br />

[Redon02] jeder dieser Kollisionstests so formuliert werden, dass der erste<br />

Kontaktzeitpunkt der Nullstelle einer zeitabhängigen Funktion entspricht:<br />

Sei a(t)b(t) die erste und c(t)d(t) die zweite Gerade der Kanten, so tritt eine<br />

Kollision (der Geraden) ein, sobald gilt (Abbildung 3-38):<br />

a ( t)<br />

c(<br />

t)<br />

⋅ ( a(<br />

t)<br />

b(<br />

t)<br />

× c(<br />

t)<br />

d(<br />

t))<br />

= 0 .<br />

Diese Gleichung wird nun mittels eines intervallbasierten Nullstellenverfahrens<br />

gelöst. Ist eine Lösung im Intervall gefunden, so wird nur dann einen Kollision<br />

angezeigt, wenn der ermittelte Punkt auf beiden Kanten liegt.<br />

Abb. 3-38 Kollisionserkennung zwischen zwei Kanten<br />

Für den Eckpunkt/Fläche- bzw. Fläche/Eckpunkt- Fall wird zuerst eine<br />

Kollision zwischen dem Eckpunkt und der durch die Fläche aufgespannten<br />

Ebene gesucht. Sei a(t) ein Eckpunkt und b(t)c(t)d(t) ein Dreieck, dann tritt<br />

eine Kollision ein, wenn gilt:<br />

a ( t)<br />

b(<br />

t)<br />

⋅ ( b(<br />

t)<br />

c(<br />

t)<br />

× b(<br />

t)<br />

d(<br />

t))<br />

= 0 .<br />

Eine Lösung tr der Gleichung wird folglich nur akzeptiert, wenn a(tr) innerhalb<br />

des Dreiecks b(tr)c(tr)d(tr) liegt.<br />

A<br />

A<br />

.<br />

68


Für die rekursive Nullstellensuche gilt es dabei folgendes zu beachten: Wenn<br />

ein Zeitintervall [tl,tr] in zwei Teilintervalle [tl,tm] und [tm,tr] zerlegt wird, so<br />

müssen die Lösungen zuerst in [tl,tm] gesucht werden. Erst wenn dort keine<br />

Lösung gefunden wurde, wird das zweite Intervall rekursiv durchsucht.<br />

69


4 Implementierung<br />

Im folgenden soll zum einen die entwickelte Anwendung vorgestellt und<br />

gleichzeitig detailliert auf einige Problemstellungen und Lösungen der<br />

Implementierungsphase eingegangen werden.<br />

Der Struktur der bisherigen Arbeit folgend ist auch dieses Kapitel zu Beginn in<br />

die Abschnitte Konstruktion, Simulation und Kollisionskontrolle gegliedert.<br />

Anschließend werden die Schnittstellengestaltung, die verwendete Persistenzstrategie<br />

und die für die VR- Darstellung erforderlichen Implementierungen<br />

erläutert.<br />

4.1 Konstruktion<br />

Zur Erläuterung der Konstruktion soll im folgenden beispielhaft gezeigt<br />

werden, wie die Komponenten Rumpf und Sockel des bereits vorgestellten<br />

Kuka-Roboters „Kr3“ mit der entwickelten Anwendung modelliert werden<br />

können, um somit ein Abbild der realen Kinematik zu erhalten.<br />

Die Konstruktion der Maschinen erfolgt mit Hilfe des „Import CAD-Object-<br />

Dialogs (Abbildung 4-1).<br />

Abb. 4-1 „Import CAD-Object“-Dialog<br />

In diesem können die Daten in den Formaten VRML, 3DS und STL geladen<br />

werden. Wurde eine Baugruppe oder eine komplette Maschine geladen, so wird<br />

70


der gesamte enthaltene Szenegraph im linken oberen Bereich angezeigt. Im<br />

unteren Bereich sind alle enthaltenen Shape3D-Instanzen und Lichtquellen<br />

aufgelistet, die im Modell enthalten sind 1 . Die gesamte Geometrie wird in dem<br />

linken der beiden 3D-Fenster graphisch dargestellt.<br />

Anschließend kann der Benutzer die Baugruppen segmentieren, indem er die<br />

zu verwendenden Shapes selektiert. Die so ausgewählte Geometrie wird im<br />

rechten 3D-Fenster angezeigt (Abbildung 4-2).<br />

Abb. 4-2 Segmentierung der Baugruppen<br />

Ist die Baugruppe vollständig segmentiert, so muss diese benannt und<br />

anschließend in der eigentlichen Szene platziert werden. Letzteres geschieht<br />

mit Hilfe des „Place“-Dialogs (Abbildung 4-3).<br />

Abb. 4-3 Place-Dialog<br />

1 Da der verwendete VRML-Loader zunächst nur die Lichtquellen lädt, muss für die Anzeige<br />

der Shapes der Button „add shapes“ betätigt werden, so dass auch alle Shapes mit in die Liste<br />

im linken unteren Bereich aufgenommen werden.<br />

71


Da im gezeigten Beispiel der Sockel ohne Rotation oder Translation in der<br />

Szene platziert werden soll, werden die Standard-Einstellungen für die<br />

Positionierung (Punkt: (0,0,0), Direction: (1,0,0) und Up: (0,1,0)) verwendet<br />

und durch betätigen des „place“-Buttons direkt der „Place“-Dialog aufgerufen<br />

(Abbildung 4-3). Dieser enthält auf der linken Seite einen Baum, der die<br />

Struktur der modellierten Szene darstellt. Da diese bisher noch leer ist, enthält<br />

der Baum nur den Knoten „Scene“, welcher dem Wurzelknoten der Gesamtszene<br />

entspricht.<br />

Mit Hilfe des „add“-Buttons wird das Bauteil der Szene unter Verwendung der<br />

Standard-Positionierung hinzugefügt (Abbildung 4-4).<br />

Abb. 4-4 Place-Dialog und eingefügtes Bauteil<br />

Wird dieser Vorgang mit „Ok“ bestätigt, so ist der Sockel der Szene<br />

hinzugefügt (Abbildung 4-5).<br />

Abb. 4-5 Szene mit Sockel<br />

Anschließend soll nun der Rumpf des Roboters auf den soeben platzierten<br />

Sockel aufgesetzt werden. Dazu wird dieser im „Import CAD-Object“-Dialog<br />

zunächst aus den entsprechenden Shapes zusammengestellt (Abbildung 4-6).<br />

72


Abb. 4-6 Zusammenstellen des Rumpfes<br />

Da sich dieser nun auf dem Sockel drehen soll, muss die Rotationsachse nach<br />

der in Abschnitt 3.1 beschriebenen Art und Weise festgelegt werden.<br />

Abbildung 4-7 zeigt diesen Vorgang.<br />

Abb. 4-7 Festlegen der Gelenkparameter<br />

Der Vektor „Direction“ entspricht wie bereits erwähnt der Achse, um die sich<br />

das Objekt drehen soll, der „Up“-Vektor dient der eindeutigen Positionierung<br />

(der Button „show“ dient dem Anzeigen der Vektoren). Insgesamt definieren<br />

diese Komponenten folglich die Anschlussstelle am anzufügenden Bauteil.<br />

Nun muss auch dieses Bauteil in der Szene platziert werden. Nach Betätigen<br />

des „place“-Buttons wird erneut der „Place“-Dialog geöffnet (Abbildung 4-8).<br />

73


Abb. 4-8 „Place“-Dialog<br />

Hier wird nun zunächst das Bauteil der Szene ausgewählt, an welches der<br />

Rumpf angefügt werden soll. Da dies der Sockel ist, wird dieser selektiert und<br />

erscheint daraufhin in seinem Bauteilkoordinatensystem.<br />

Anschließend wird auch hier die Positionierung in der oben beschriebenen<br />

Form festgelegt und damit die Anschlussstelle am Bauteil, an das angefügt<br />

werden soll, definiert (Abbildung 4-9).<br />

Abb. 4-9 Positionierung auf dem Sockel<br />

Zusätzlich wird als Transformation der Gelenkverbindung die Rotation<br />

gewählt. Der Rumpf wird daraufhin mittels „add“ an der definierten Position<br />

eingefügt (Abbildung 4-10).<br />

74


Abb. 4-10 Aufsetzen des Rumpfes auf den Sockel<br />

Durch bestätigen mit „Ok“ ist die Szene nun vollständig modelliert. Abbildung<br />

4-11 zeigt das erstellte Objekt. Mit Hilfe des Reglers im rechten unteren<br />

Bereich lässt sich nun der Rumpf auf dem Sockel drehen.<br />

Abb. 4-11 Szene mit Sockel und Rumpf<br />

Im folgenden soll nun gezeigt werden, wie die für die Konstruktion<br />

erforderlichen Transformationen berechnet werden.<br />

4.1.1 Berechnung der Transformationen<br />

Für die Aufstellung der Gleichungen soll nun wieder vom allgemeinen Fall<br />

ausgegangen werden, dass eine Baugruppe A an eine Baugruppe B angefügt<br />

werden soll (Abbildung 4-12).<br />

75


Abb. 4-12 Anfügen eines Bauteils im Szenegraphen<br />

Für beide Baugruppen A und B werden folgende Transformationen aufgestellt:<br />

R =<br />

A<br />

r A r A r A<br />

vdir<br />

vup<br />

v3<br />

0<br />

0<br />

0<br />

r<br />

0<br />

T A<br />

TB<br />

1<br />

r A<br />

v3 und<br />

R =<br />

B<br />

r B r B r B<br />

vdir<br />

vup<br />

v3<br />

Die Vektoren<br />

entsprechenden „Direction“- und „Up“-Vektoren berechnet. Die Transformationen<br />

T A und TB entsprechen der Translation zu dem im Bauteilkoordinatensystem<br />

von A und B definierten Punkt.<br />

0<br />

0<br />

r B<br />

v3 wurden jeweils aus dem Kreuzprodukt der<br />

Somit ergibt sich als Transformation für TG1 folgender Ausdruck:<br />

−1 −1<br />

M AB = TB<br />

⋅ RB<br />

⋅ ( RA<br />

) ⋅ ( TA<br />

) .<br />

Die Gelenktransformation TG2 berechnet sich folglich aus:<br />

bzw.<br />

M<br />

TG<br />

TG1<br />

TG2<br />

Baugruppe A<br />

BG<br />

TG<br />

S S<br />

Baugruppe B<br />

TG<br />

−1 −1<br />

Gelenk = TA<br />

⋅ RA<br />

⋅ rot x ⋅ ( RA<br />

) ⋅ ( TA<br />

)<br />

BG<br />

−1 −1<br />

M Gelenk = TA<br />

⋅ RA<br />

⋅ transl x ⋅ ( RA<br />

) ⋅ ( TA<br />

) ,<br />

TG<br />

S S<br />

Schnittstelle Baugruppe A Schnittstelle Baugruppe B<br />

0<br />

r<br />

0<br />

1<br />

76


wobei rotx einer Rotation um die x-Achse und translx einer Translation entlang<br />

dieser um einen bestimmten Wert entspricht. Dieser Wert entspricht dem<br />

Zustand der Gelenkverbindung, also beispielsweise dem aktuellen Drehwinkel<br />

eines Roboterarms.<br />

Um die Berechnung dieser Transformationen zu beschleunigen werden die<br />

−1 −1<br />

Transformationen ( R A ) ⋅ ( TA<br />

) und TA ⋅ RA<br />

zusammengefasst und in den<br />

Gelenkverbindungen gespeichert.<br />

4.1.2 Wiederverwendung von Komponenten<br />

Da der Prozess der Konstruktion recht aufwendig ist, wurde zusätzlich die<br />

Möglichkeit geschaffen, einmal konstruierte Maschinenelemente wiederverwenden<br />

zu können. Dies bedeutet, dass beispielsweise ein bereits<br />

modellierter Roboter mehrfach in eine neue (oder auch die gleiche Szene)<br />

importiert werden kann, ohne dass dieser neu konstruiert werden muss<br />

(Abbildung 4-13).<br />

Komponenten Kombinationen<br />

Abb. 4-13 Wiederverwendung von modellierten Komponenten<br />

Die kinematischen Eigenschaften der Maschine werden beim Importieren mit<br />

übernommen. Somit lassen sich verschiedene Konfigurationen komplexer<br />

77


Szenen relativ einfach konstruieren, da lediglich die bereits zuvor modellierten<br />

Objekte neu zusammengefügt werden müssen. Dies ergibt im Resultat eine Art<br />

Baukastensystem mit dem die Wiederverwendung von einmal erstellten<br />

Komponenten ermöglicht wird.<br />

Abbildung 4-14 zeigt den zugehörigen Dialog. Nachdem eine Szene geladen<br />

wurde, wird auf der linken Seite deren Struktur angezeigt. Anschließend<br />

können einzelne Teile der Hierarchie für den Import in die aktuelle Szene<br />

ausgewählt werden.<br />

Abb. 4-14 "Import from Project"-Dialog<br />

Die Positionierung der Objekte erfolgt analog zu dem in der Konstruktion<br />

verwendeten Verfahren.<br />

78


4.2 Simulation<br />

Im folgenden sollen detailliert die Konfiguration der CNC- Simulation und die<br />

Entwicklung von anlagenspezifischen CNC-Interpretern erläutert werden.<br />

Zuvor wird vorbereitend die erweiterte Funktionsweise der Ablaufsteuerung<br />

und deren Konfiguration dargestellt.<br />

4.2.1 Ablaufsteuerung<br />

Da die Ablaufsteuerung einerseits ein möglichst realistisches Abbild des CNC-<br />

Steuerungsprozesses darstellen, andererseits jedoch auch parametrisierbar sein<br />

soll, muss deren Zeitverhalten noch näher spezifiziert werden.<br />

Wünschenswert wäre es, wenn sich das Zeitverhalten der Simulation so<br />

beeinflussen ließe, dass der eigentliche Prozess durch Konfiguration<br />

beschleunigt oder verlangsamt werden kann. Um dies zu realisieren wird am<br />

Ende eines jeden Zeitschritts eine Verzögerung (delay_time) eingefügt<br />

(Abbildung 4-15).<br />

…<br />

ti-1<br />

ti<br />

ti+1<br />

ti+2<br />

ti+3<br />

ti+4<br />

CNC<br />

Programm 1<br />

∆ t<br />

1<br />

2<br />

CNC<br />

Programm 2<br />

3<br />

4<br />

. . .<br />

Command1.exceute(0,50)<br />

Command3.exceute(50,150)<br />

CollisionDetection()<br />

sleep(delay_time)<br />

Command1.exceute(50,150)<br />

Command3.exceute(150,250)<br />

CollisionDetection()<br />

sleep(delay_time)<br />

Command2.exceute(0,100)<br />

Command3.exceute(250,300)<br />

Command4.exceute(0,50)<br />

CollisionDetection()<br />

sleep(delay_time)<br />

. . .<br />

Abb. 4-15 Beeinflussung des Zeitverhaltens<br />

79


Da die Ausführung der CNC- Kommandos in der Simulation und die<br />

Kollisionserkennung, abgesehen von der benötigten Rechenzeit, keine Zeit in<br />

Anspruch nehmen, wird die Simulation für den Fall delay_time = ∆t nahezu in<br />

Echtzeit ausgeführt. Wird delay_time größer bzw. kleiner gewählt, so<br />

verlangsamt bzw. beschleunigt sich die Ausführung der CNC- Simulation.<br />

Abbildung 4-16 zeigt einen Ausschnitt der Implementierung der Ablaufsteuerung.<br />

Die CNC-Programme und die Kollisionskontrolle werden dabei in<br />

einem eigenen Prozess (Thread) ausgeführt.<br />

Thread thread = new Thread() {<br />

}<br />

public void run() {<br />

}<br />

...<br />

// main loop<br />

while (!allProgramsDone()) {<br />

}<br />

...<br />

...<br />

// CNC- Programme schrittweise ausführen<br />

for (int i = 0; i < cncPrograms.length; i++)<br />

cncPrograms[i].step(emulation_resoultion);<br />

// Kollisionserkennung<br />

if (collisionDetectionEnabled)<br />

checkCollisions();<br />

// Verzögerungszeit<br />

sleep(delay_time);<br />

...<br />

Abb. 4-16 Thread der Ablaufsteuerung<br />

Es sei an dieser Stelle darauf hingewiesen, dass selbstverständlich auch der Fall<br />

eintreten kann, dass ein CNC-Kommando eine Laufzeit kleiner ∆t hat. Dies<br />

wird von der Ablaufsteuerung berücksichtigt.<br />

80


4.2.2 Konfiguration<br />

In der folgenden Abbildung ist der Dialog für die Konfiguration der CNC-<br />

Steuerung dargestellt.<br />

Abb. 4-17 Dialog zur Konfiguration der CNC-Simulation<br />

Hier können die zeitliche Auflösung der Simulation (∆t) und die<br />

Verzögerungszeit am Ende eines Zeitschritts (delay_time) eingestellt werden.<br />

Darüber hinaus lässt sich festlegen, welche CNC- Interpreter- Klasse<br />

verwendet werden soll. Diese kann entweder aus einer Liste aller im Projekt<br />

bekannten Klassen ausgewählt (Abbildung 4-18) oder direkt durch Eingabe des<br />

vollständigen Namens spezifiziert werden.<br />

Abb. 4-18 Auswählen der CNC-Interpreter -Klasse<br />

81


Das Laden der ausgewählten Klasse und deren Instanziierung zeigt Abbildung<br />

4-19.<br />

public void createDynCNCInterpreterClass(String name)<br />

throws ClassNotFoundException, NoSuchMethodException,<br />

IllegalAccessException, InstantiationException,<br />

InvocationTargetException<br />

{<br />

}<br />

// Klasse laden<br />

Class dynCNCInterpreter = Class.forName(name);<br />

// Parametertyp des zu ermittelnden Konstruktors<br />

Class[] paramTypes = new Class[] { Joints.class };<br />

Object[] paramValues;<br />

// Konstruktor ermitteln<br />

Constructor cncInterpreterConstructor = dynCNCInterpreter<br />

.getConstructor(paramTypes);<br />

// Konstruktor-Parameter erstellen<br />

paramValues = new Object[] {<br />

new Joints(elementConnections,cncEmulator)<br />

};<br />

// Instanz erzeugen<br />

cncInterpreter = (CNCInterpreter) cncInterpreterConstructor<br />

.newInstance(paramValues);<br />

// Interpreter der Ablaufsteuerung zuweisen<br />

cncEmulator.setInterpreter(cncInterpreter);<br />

Abb. 4-19 dynamisches Laden des CNC-Interpreters<br />

Zusätzlich können im Konfigurationsdialog der CNC-Simulation die Anzahl<br />

der parallel auszuführenden CNC-Programme festgelegt und diese benannt<br />

werden. Folglich können beliebig viele parallel laufende Prozesse simuliert<br />

werden.<br />

Zur Auswertung der CNC-Simulationen können die wichtigsten angefallenen<br />

Daten in einer Log-Datei gespeichert werden. Diese enthält Informationen über<br />

den zeitlichen Verlauf der Simulation und eventuell aufgetretene Kollisionen<br />

(auf Wunsch inklusive der kollidierenden Primitive). Letztere werden dabei der<br />

aktuellen CNC-Zeile und dem aktuellen Zeitschritt zugeordnet. Somit lassen<br />

sich in einer nachträglichen Auswertung Rückschlüsse auf die Ursache der<br />

Kollision ziehen.<br />

Es soll an dieser Stelle nicht unerwähnt bleiben, dass bei Eintritt einer<br />

Kollision selbstverständlich auch eine Ermittlung des ersten Kontaktzeitpunkts<br />

zwischen zwei Zeitschritten möglich wäre. Da hier jedoch lediglich die<br />

betr<strong>of</strong>fene CNC-Zeile von Interesse ist, wurde von einer Implementierung<br />

abgesehen. Darüber hinaus wäre es sicherlich lohnender, die in Abschnitt 3.3.9<br />

angesprochene kontinuierliche Kollisionserkennung anstelle dessen zu implementieren,<br />

da diese die Ermittlung des ersten Kontaktzeitpunkts bereits implizit<br />

mitbestimmt.<br />

82


4.2.3 Entwicklung eigener CNC-Interpreter<br />

Im folgenden soll das Entwickeln eigener spezifischer CNC- Interpreter näher<br />

erläutert werden. Dazu sei im folgenden das nun etwas modifizierte Klassendiagramm<br />

dargestellt.<br />

Joints<br />

CNCSource<br />

+getLine(line:int):void<br />

+getLineCount():int<br />

CNCSourceLine<br />

-model:Joints<br />

><br />

CNCInterpreter<br />

CNCInterpreterImpl<br />

-model:Joints<br />

+run():void<br />

+pause():void<br />

+stop():void<br />

+parse(source:CNCSource[]):CNCProgram<br />

CNCEmulator<br />

erstellt<br />

CNCProgram<br />

+step(stepTime:int):void<br />

-model:Joints<br />

Abb. 4-20 Klassendiagramm CNC-Interpreter<br />

><br />

CNCCommand<br />

+create(soureLine:CNCSourceLine):void<br />

+getTotalTime():int<br />

+execute(t0:int,t1:int):void<br />

CNCCommandImpl<br />

Im Vergleich zu Abschnitt 3.2 ergeben sich folgende Änderungen: Das Modell<br />

(Model) wird durch die Klasse Joints repräsentiert, welche der Menge der<br />

Gelenkverbindungen entspricht. Die CNC-Quellen sind zeilenweise strukturiert<br />

und werden während des Parsens als CNCSourceLine-Objekt an die abstrakte<br />

Methode create der CNCCommand-Klasse übergeben. Deren abstrakte<br />

Methode execute wurde entsprechend den Ausführungen in Abschnitt 3.2 um<br />

zwei Parameter (t0 und t1 erweitert).<br />

Für die Entwicklung eines eigenen CNC-Interpreters muss nun die abstrakte<br />

Klasse CNCInterpreter überschrieben werden. Abbildung 4-21 zeigt die<br />

Implementierung des DefaultCNCInterpreter, welcher standardmäßig als<br />

Interpreter ausgewählt ist.<br />

Dieser überschreibt lediglich die abstrakte Methode parse und erstellt aus den<br />

CNC-Quelltexten CNCProgram- Objekte, welche wiederum eine Liste von<br />

*<br />

*<br />

83


CNCCommand- Instanzen enthalten, die durch die Klasse DefaultCNC-<br />

Command implementiert sind.<br />

public class DefaultCNCInterpreter extends CNCInterpreter {<br />

...<br />

public CNCProgram[] parse(CNCSource[] sourceCode)<br />

throws CNCException {<br />

}<br />

...<br />

// Anzahl der CNCProgramme ist gleich der Anzahl der<br />

// übergebenen CNC-Quelltexte<br />

int cncCount = sourceCode.length;<br />

// Anlegen des Arrays für die einzelnen Programme<br />

CNCProgram[] programs = new CNCProgram[cncCount];<br />

// erstelle aus jedem CNC-Quelltext ein CNCProgramm<br />

for (int c = 0; c < cncCount; c++) {<br />

// erstelle Programm<br />

programs[c] = new CNCProgram();<br />

// verarbeite jede Zeile eines Programms<br />

for (int l = 0; l < sourceCode[c].getLineCount(); l++) {<br />

}<br />

// hole aktuelle Zeile<br />

CNCSourceLine line = sourceCode[c].getLine(l);<br />

// wenn Zeile (min.) ein Zeichen enthält...<br />

if (line.getText().length() > 0) {<br />

}<br />

}<br />

return programs;<br />

// ...,dann erstelle daraus ein CNCCommand<br />

CNCCommand command = new DefaultCNCCommand(<br />

componentJunctions);<br />

command.create(line);<br />

command.setSourceLocation(new<br />

CNCSourceLocation(c, line<br />

.getStartOffset(),<br />

line.getEndOffset(),line.getText()));<br />

// füge das CNC-Kommando dem Programm hinzu<br />

programs[c].addCNCCommand(command);<br />

Abb. 4-21 Quellcode des DefaultCNCInterpreter's<br />

Das eigentliche Auswerten der CNC-Zeilen übernimmt dann die<br />

CNCCommand- Implementierung. Der CNC-Interpreter ist lediglich für die<br />

Grobstrukturierung der CNC-Programme und Kommandos zuständig.<br />

Abbildung 4-22 zeigt schematisch die Implementierung der DefaultCNC-<br />

Command-Klasse. Diese überschreibt zunächst die Methode create. Hier<br />

werden die CNC-Zeilen geparst und alle gewonnen Informationen (betr<strong>of</strong>fene<br />

Baugruppe(n), zu verändernde Parameter der Gelenkverbindung(en) u.<br />

Laufzeit des Kommandos) werden in der Klasse gespeichert. Der CNC-<br />

84


Interpreter ruft diese Methode vor Beginn der Simulation auf, so dass bei<br />

Ausführung der Simulation bereits alle CNC- Quelltexte geparst sind.<br />

Die DefaultCNCCommand- Implementierung geht davon aus, dass die CNC-<br />

Programme in der Struktur:<br />

„Gelenkbezeichnung Neuer_Wert benötigte_Zeit_in_ms“<br />

,also bspw. in der Form „Arm1 +45 3000“ vorliegen.<br />

public class DefaultCNCCommand extends CNCCommand {<br />

}<br />

// Gelenkverbindung<br />

Joint joint;<br />

// neuer Absolutwert<br />

double value;<br />

// Gesamtlaufzeit<br />

int totalTime;<br />

// parst die CNC-Quelle<br />

public void create(CNCSourceLine line) throws CNCException {<br />

}<br />

// Zeilentext holen<br />

String lineText = line.getText();<br />

// Gelenkname, Neuer Wert und Zeit identifizieren<br />

String gelenkName = ...<br />

value = ...<br />

totalTime = ...<br />

// betr<strong>of</strong>fenes Gelenk holen<br />

joint= joints.getJointByName(gelenkName);<br />

// führt das Kommando aus<br />

public void execute(int t0, int t1) {<br />

}<br />

// Interpolation bestimmen<br />

double anteil = (t1 - t0) / totalTime;<br />

// delta = Sollwert – IstWert_zu_Kommandobeginn<br />

double delta = value - getState(joint);<br />

// neuen Wert setzen<br />

joint.setValue(delta * anteil + joint.getValue());<br />

// liefert die Gesamtlaufzeit des Kommandos<br />

public int getTotalTime() {<br />

return totalTime;<br />

}<br />

...<br />

Abb. 4-22 DefaultCNCCommand- Implementierung<br />

Die Methode execute berechnet folglich den Interpolationswert (anteil) und<br />

anschließend die Differenz zwischen Sollwert und Istwert. Der Istwert<br />

entspricht hier dem Wert unmittelbar vor der Ausführung des Kommandos und<br />

85


kann über die Methode getState für jedes Gelenk abgefragt werden. Der Aufruf<br />

joint.getValue() liefert hingegen den aktuellen Zustand der Gelenkverbindung.<br />

Diese CNCCommand- Implementierung ist eine sehr einfache und soll hier<br />

lediglich als Beispiel dienen. Denkbar wäre beispielsweise auch, dass ein<br />

CNC-Interpreter mehrere verschiedene CNCCommand- Implementierungen<br />

verwendet oder dass zwischen einer Absolut- oder Relativbewegung<br />

unterschieden wird etc. Weiterhin kann ein CNCCommand auch mehrere<br />

Gelenkverbindungen (Joint’s) parallel bewegen müssen, was kein Problem<br />

darstellt, da jedes CNCCommand Zugriff auf die gesamte Struktur der<br />

Maschine hat.<br />

Darüber hinaus soll an dieser Stelle nicht unerwähnt bleiben, dass die<br />

Entwicklung eines eigenen CNC-Interpreters auch eine Möglichkeit zur<br />

Datenerfassung während der Simulation darstellt. Da der Interpreter Zugriff auf<br />

alle Daten der Maschine hat, können diese ausgewertet und beispielsweise<br />

exportiert werden. Somit ergeben sich sicherlich zahlreiche Anwendungsmöglichkeiten,<br />

diese Schnittstelle zu nutzen.<br />

86


4.3 Kollisionskontrolle<br />

Die Implementierung der Kollisionskontrolle soll im aktuellen Abschnitt näher<br />

erläutert werden. In Kapitel 2 wurde analysiert, dass es sich hierbei meist um<br />

den Flaschenhals in der Simulation handelt und daher besonders auf eine<br />

effiziente Implementierung Wert gelegt werden sollte. In Kapitel 3 wurde<br />

bereits ein Großteil der erforderlichen Funktionalitäten behandelt. Die<br />

folgenden Abschnitte sollen nun noch einmal einige spezielle Problemstellungen<br />

behandeln.<br />

4.3.1 Berechnung der OBB- Parameter<br />

In Abschnitt 3.3.5 wurde analysiert, dass für die Berechnung der OBB-<br />

Parameter folgende Schritte erforderlich sind:<br />

Ermitteln der konvexen Hülle<br />

Triangulieren der konvexen Hülle<br />

Aufstellen der Kovarianzmatrix<br />

Berechnen der Eigenvektoren<br />

Bestimmung der OBB-Parameter<br />

Abb. 4-23 Bestimmung der OBB-Parameter<br />

Da bisher noch nicht spezifiziert wurde, wie die konvexe Hülle aus den<br />

Objekten ermittelt werden kann, soll dies näher untersucht werden:<br />

Für die Berechnung der konvexen Hülle existieren zahlreiche Verfahren. Eine<br />

Recherche ergab, dass diesbezüglich auch zahlreiche frei verfügbare<br />

Implementierungen existieren. Da die Wiederverwendung von Komponenten<br />

in der S<strong>of</strong>twaretechnik als erstrebenswertes Ziel anzusehen ist, wurden<br />

insgesamt acht dieser Bibliotheken auf ihre Eignung getestet. Hierbei stellte<br />

sich heraus, dass Robustheit in numerischen Verfahren eine entscheidende<br />

Rolle spielt. Grund hierfür ist, dass die vorliegenden Bauteilgeometrien<br />

<strong>of</strong>fensichtlich teilweise aus Dreiecken bestehen, deren Punkte kollinear sind<br />

87


oder deren gegenseitiger Abstand teilweise nur sehr gering ist und die meisten<br />

Implementierungen auf Grund dessen versagten.<br />

Als herausragend, was Geschwindigkeit und Robustheit angeht, stellte sich die<br />

Implementierung von [Lloyd] heraus, welche auf dem Verfahren nach [Barber,<br />

Dopkin u. Huhdanpaa] beruht. Hier wurden von den Autoren für Testzwecke<br />

zufällige Punktmengen im R³ generiert und die gleichen Punkte anschließend<br />

mit einer geringen Streuung versehen noch mehrmals hinzugefügt. Somit<br />

entstanden Punktmengen, in denen mehrere Punkte sehr dicht beieinander<br />

liegen. Anschließend wurde der Algorithmus auf diesen Punktmengen getestet<br />

und unter dieser Prämisse entwickelt.<br />

Ein weiterer Vorteil dieser Implementierung ist, dass sich die konvexe Hülle<br />

auch trianguliert ausgeben lässt. Auf Grund dieser entscheidenden Vorteile<br />

wurde die Implementierung von [Lloyd], die mit „QuickHull3D“ bezeichnet<br />

wird, folglich für die Generierung und Triangulierung der konvexen Hülle<br />

verwendet.<br />

4.3.2 OBB Aktualisierung<br />

Da die Erzeugung der OBBs relativ viel Rechenzeit beansprucht, werden diese<br />

im Bauteilkoordinatensystem erstellt und nach deren Erstellung in den<br />

zugehörigen virtuellen Baugruppen gespeichert. Sollen nun zwei OBB-<br />

Hierarchien auf Überschneidung getestet werden, so müssen diese in ein<br />

gemeinsames Koordinatensystem transformiert werden.<br />

Hierfür gibt es zwei Möglichkeiten: Entweder werden beide Objekte in das<br />

sogenannte Weltkoordinatensystem oder eines in das Koordinatensystem des<br />

jeweils anderen transformiert. Letzteres hat den Vorteil, dass nur ein OBB<br />

transformiert werden muss. Gleichzeitig müsste ein und dasselbe OBB bei Test<br />

mit unterschiedlichen anderen OBBs dafür aber jedesmal erneut transformiert<br />

werden. Folglich bietet es sich an, die OBBs in das Weltkoordinatensystem zu<br />

transformieren, da sich einerseits diese Transformation in Java3D schnell<br />

bestimmen lässt:<br />

Node.getLocalToVWorld(Transform3D transform)<br />

und sich andererseits die Transformationen somit wiederverwenden lassen:<br />

Da während einer vollständigen Kollisionskontrolle ein OBB unter Umständen<br />

mehrfach mit anderen auf Überlappungen getestet wird, sollte diese<br />

Transformation nicht bei jedem Test neu durchgeführt werden müssen. Die<br />

Idee ist daher, die transformierten Parameter mit im Original-OBB zu<br />

speichern. Es stellt sich nun jedoch die Frage, wann und wie diese aktualisiert<br />

werden sollten?<br />

Unter Verwendung der in Abschnitt 3.3.3 dargestellten Kohärenz, wäre ein<br />

erster Ansatz, in jedem Zeitschritt nur die OBBs von bewegten Objekten zu<br />

aktualisieren. Das Problem hierbei ist, dass alle OBBs, die in den Hierarchien<br />

88


der bewegten Objekte enthalten sind, unabhängig davon, ob sie an einem<br />

Kollisionstest beteiligt sind, in jedem Zeitschritt transformiert werden müssten.<br />

Dies sollte sich sehr nachteilig auf die Performance auswirken.<br />

Eine andere Idee ist, die transformierten Parameter inklusive einem Flag,<br />

welches den aktuellen Zeitschritt repräsentiert, im OBB zu speichern. Folglich<br />

müssten alle an Kollisionstests beteiligten OBBs in jedem Zeitschritt nur ein<br />

einziges mal aktualisiert werden. Dieses Flag sollte nun so gestaltet sein, dass<br />

zum einen ein Vergleichstest sehr schnell durchgeführt werden kann und<br />

andererseits der Wertebereich groß genug für die zahlreichen<br />

Simulationsschritte ist. Hier bietet sich die Verwendung eines Parameters vom<br />

Typ long an. Dieser Datentyp umfasst 64 bit, so dass der Wertebereich in<br />

jedem Fall hinreichend ist.<br />

4.3.3 OBB-Überlappungstest und Traversierung<br />

Sollen zwei OBB-Hierachien auf Überlappung getestet werden, so werden<br />

diese mittels Tiefensuche von oben nach unten durchlaufen. Die dabei<br />

durchgeführten Überlappungstests ergeben einen Rekursionsbaum (Abbildung<br />

4-24).<br />

Abb. 4-24 Rekursionsbaum für einen BV- Hierarchietest [Mezger01]<br />

Überlappen sich die Bounding Volumes zweier Knoten, werden die Kinder<br />

desjenigen Knotens mit dem größten Bounding Volume gegen den Knoten mit<br />

dem kleineren Bounding Volume getestet. Falls keine Überlappung detektiert<br />

wird, kann die Traversierung abgebrochen werden, da dann auch die Kinder<br />

nicht überlappen können.<br />

Die Idee, immer den Teilbaum mit dem größten Bounding Volume als erstes<br />

zu traversieren, wird auch von [Gottschalk00] verfolgt, da dadurch die Größe<br />

und folglich die Überlappungswahrscheinlichkeit der getesteten Knoten am<br />

schnellsten abnimmt. Das Volumen einer OBB wird bereits bei deren<br />

Erzeugung berechnet und in dieser gespeichert. Abbildung 4.25 zeigt den<br />

Algorithmus für den gegenseitigen Test zweier Bounding Volume Hierarchien<br />

BVA und BVB.<br />

89


oolean findCollisions(BVA, BVB) {<br />

}<br />

A B<br />

( T − T ) ⋅ n / n<br />

Abb. 4-25 Algorithmus für Test zweier BVHs<br />

Die Methode BVCollide testet zwei OBBs auf Überschneidungen nach der in<br />

Abschnitt 3.3.6 aufgeführten Gleichung. Im folgenden soll nun gezeigt werden,<br />

wie sich die Berechnung dieser Gleichung nach [Gottschalk00] optimieren<br />

lässt und wie Spezialfälle behandelt werden können.<br />

Optimierung: Struktur des zu testenden Vektors<br />

Angenommen der Mittelpunkt einer Box A befindet sich an der Stelle T A . Die<br />

A A A<br />

Einheitsvektoren R0 , R1<br />

, R2<br />

entsprechen den drei Achsen der Box und a0, a1,<br />

a2 den Halblängen entlang der entsprechenden Achsen. Selbiges sei äquivalent<br />

für eine Box B definiert.<br />

Die auf Separierung zu testende Achse sei eine Gerade durch den<br />

Koordinatenursprung, deren Richtung mit einem Vektor n bezeichnet wird, der<br />

nicht zwingend ein Einheitsvektor sein muss.<br />

Somit ergibt sich als Separierender- Achsen- Test folgender Ausdruck:<br />

A<br />

A<br />

A<br />

( a1<br />

R1<br />

⋅ n + a2<br />

R2<br />

⋅ n + a3<br />

R3<br />

⋅ n ) / n<br />

B<br />

B<br />

B<br />

( b1<br />

R1<br />

⋅ n + b2<br />

R2<br />

⋅ n + b3<br />

R3<br />

⋅ n ) / n<br />

(Gleichung 4-1)<br />

Da die zu testende Achse entweder der Normale auf einer Fläche der Boxen<br />

oder der Kombination ihrer Kanten entspricht, ergeben sich für n drei Fälle:<br />

n = R , n = R und n = R × R , mit i , j ∈{<br />

1,<br />

2,<br />

3}<br />

.<br />

A<br />

i<br />

if (!BVCollide(BVA,BVB) ) return false;<br />

if (isLeaf(BVA) and isLeaf(BVB))<br />

return PrimitiveCollide(BVA,BVB);<br />

if ((size(BVA)>size(BVB)) or isLeaf(BVB)){<br />

for all children BVC <strong>of</strong> BVA do<br />

findCollisions(BVC, BVB)<br />

}<br />

else {<br />

for all children BVC <strong>of</strong> BVB do<br />

findCollisions(BVA, BVC)<br />

}<br />

B<br />

i<br />

><br />

A<br />

i<br />

B<br />

j<br />

+<br />

90


[Gottschalk00] zeigt nun, dass sich durch Unterscheidung dieser drei Fälle, die<br />

Berechnung in einem ersten Schritt vereinfachen lässt. Es ergeben sich<br />

folgende vereinfachte Gleichungen für den Schnitttest:<br />

Fall 1:<br />

Bsp.: i=2,<br />

A B A<br />

B A<br />

B A<br />

B A<br />

( − T ) ⋅ R > a + b R ⋅ R + b R ⋅ R + b R ⋅ R )<br />

T 2<br />

Fall 2:<br />

Bsp.: i=2<br />

Fall 3:<br />

A<br />

n R2<br />

= :<br />

B<br />

n = R2<br />

2<br />

( 1 1 2 2 2 2 3 3 2<br />

A B B<br />

A B<br />

A B<br />

A B<br />

( T − T ) ⋅ R2<br />

> ( a1<br />

R1<br />

⋅ R2<br />

+ a 2 R2<br />

⋅ R2<br />

+ a3<br />

R3<br />

⋅ R2<br />

) + b2<br />

Bsp.:<br />

A B<br />

n R1<br />

R2<br />

× =<br />

A B ( R × R ) ><br />

A B<br />

( T − T ) ⋅ 1 2<br />

B A<br />

B A<br />

A B<br />

A<br />

( a 2 R2<br />

⋅ R3<br />

+ a3<br />

R2<br />

⋅ R2<br />

) + ( b1<br />

R1<br />

⋅ R3<br />

+ b´<br />

3 R1<br />

⋅ R1<br />

Weiterhin kann die Berechnung optimiert werden, indem das gemeinsame<br />

Koordinatensystem so gewählt wird, dass sich die Box A im Koordinatenursprung<br />

befindet und deren Orientierungen den Koordinatenachsen<br />

entsprechen.<br />

Optimierung: Wahl des Koordinatensystems<br />

Dazu muss die Box B in das Koordinatensystem der Box A transformiert<br />

werden. Interpretiert man R A als Rotationsmatrix, so ergibt sich deren Inverse<br />

A −1<br />

A T<br />

durch ( R ) = ( R ) . In Box B ersetzt man nun R B A T B B<br />

durch ( R ) R und T<br />

A T B<br />

durch ( R ) ( T<br />

A<br />

− T ) . Somit befindet sich Box B in dem durch Box A<br />

definierten Koordinatensystem. Die Berechnungen für die Beispiele<br />

vereinfachen sich wie folgt:<br />

Fall 1:<br />

T > a +<br />

+<br />

B<br />

2<br />

2<br />

B<br />

B<br />

B<br />

( b1<br />

R12<br />

+ b2<br />

R22<br />

b3<br />

R32<br />

)<br />

B<br />

)<br />

.<br />

91


Fall 2:<br />

Fall 3:<br />

T<br />

B<br />

⋅ R<br />

B<br />

2<br />

> ( a R + a R + a R ) + b<br />

1<br />

B<br />

21<br />

B B B B<br />

B<br />

B<br />

B<br />

B<br />

R 22T3<br />

− R23T2<br />

> ( a2<br />

R23<br />

+ a3<br />

R22<br />

) + ( b1<br />

R31<br />

+ b3<br />

R11<br />

)<br />

[Gottschalk00] zeigt, dass sich das in kauf nehmen des Mehraufwands durch<br />

Transformation der Box B in das Koordinatensystem der Box A, insgesamt<br />

betrachtet, positiv auf die Anzahl der durchzuführenden Operationen auswirkt.<br />

Im folgenden sollen einige Spezialfälle, die bei der Berechnung des<br />

Schnitttests auftreten können, betrachtet werden.<br />

OBB der Dicke Null<br />

Ein OBB hat in bestimmten Fällen die Dicke Null. Dies tritt auf, wenn<br />

lediglich ein einziges Dreieck oder generell eine Menge von koplanaren<br />

Polygonen umhüllt wird. [Gottschalk00] zeigt, dass auch für diesen Fall die<br />

Berechnung des Schnitttests vereinfacht werden kann. Da hier jedoch lediglich<br />

eine Addition, eine Multiplikation und eine Betragbildung eingespart werden,<br />

wurde dies (auch in der Implementierung nach [Gottschalk00]) nicht<br />

berücksichtigt.<br />

n = Nullvektor<br />

Sind zwei Kanten der beiden zu testenden Boxen parallel, so ergibt sich für<br />

einen der zu testenden Vektoren n durch Bildung des Kreuzprodukts dieser<br />

Kanten der Nullvektor. Diese Problematik soll nachfolgend unersucht werden.<br />

Gleichung 4-1 wurde in [Gottschalk00] vereinfacht, indem beide Seiten mit |n|<br />

multipliziert worden sind. Dies ist selbstverständlich nur zulässig für den Fall,<br />

dass |n| > 0 ist. Die Auswertung der Gleichung<br />

( T<br />

A<br />

B<br />

− T ) ⋅ n<br />

><br />

2<br />

B<br />

22<br />

A<br />

A<br />

A<br />

( a1<br />

R1<br />

⋅ n + a2<br />

R2<br />

⋅ n + a3<br />

R3<br />

B<br />

B<br />

B<br />

( b1<br />

R1<br />

⋅ n + b2<br />

R2<br />

⋅ n + b3<br />

R3<br />

für den Fall, dass |n| = 0 ist, liefert somit<br />

0 > 0 .<br />

3<br />

B<br />

23<br />

⋅ n )<br />

⋅ n )<br />

2<br />

+<br />

92


Die optimierten Gleichungen der oben beschriebenen drei Fälle liefen das<br />

gleiche Ergebnis. Die Ungleichung ist somit nicht erfüllt, das heißt der<br />

Nullvektor separiert die beiden Boxen nicht. Dies ist an sich wünschenswert<br />

und stellt im Grunde damit kein Problem dar.<br />

Nun ist es aber so, dass durch Rechenungenauigkeiten das Ergebnis verfälscht<br />

werden kann. [Gottschalk] zeigt, dass beispielsweise für den folgenden Fall:<br />

T<br />

B<br />

⎛− 0.<br />

147256⎞<br />

⎟<br />

= 1.<br />

76777<br />

⎜<br />

⎜<br />

⎜<br />

⎝<br />

B<br />

R<br />

1.<br />

80947<br />

⎟<br />

⎟<br />

⎠<br />

⎛ − 0.<br />

0641566<br />

⎜<br />

= ⎜1.<br />

54303⋅10<br />

⎜<br />

⎝<br />

− 0.<br />

99794<br />

−17<br />

unter Verwendung der Berechnung<br />

ein Vergleich<br />

⎛3.<br />

53553⎞<br />

⎜ ⎟<br />

a = ⎜1.<br />

76777⎟<br />

⎜ ⎟<br />

⎝ 0 ⎠<br />

− 5.<br />

54743⋅10<br />

1<br />

6.<br />

41346 ⋅10<br />

−16<br />

−20<br />

⎛ 2.<br />

33155 ⎞<br />

⎜ ⎟<br />

b = ⎜0.<br />

565685⎟<br />

⎜ ⎟<br />

⎝ 0.<br />

56452 ⎠<br />

− 0.<br />

99794<br />

− 2.<br />

22883⋅10<br />

0.<br />

0641566<br />

B B B B<br />

B<br />

B<br />

B<br />

B<br />

T1 R32<br />

− T3<br />

R12<br />

> a1<br />

R32<br />

+ a3<br />

R12<br />

+ b1<br />

R23<br />

+ b3<br />

R21<br />

1.<br />

00378137201⋅10<br />

−15<br />

> 5.<br />

28600321408⋅10<br />

entsteht, der somit als wahr ausgewertet werden würde (IEEE 64-bit double<br />

precision floating point). Das hieße, dass der Nullvektor die beiden Boxen<br />

separiert, obwohl sich diese <strong>of</strong>fensichtlich überlappen.<br />

Die rechte Seite der Ungleichung sollte in diesem Falle also größer sein, wenn<br />

sich die Boxen überlappen. [Gottschalk] zeigt, dass durch aufaddieren einer<br />

kleinen Zahl auf die Werte der Rotationsmatrix R B der rechten Seite der<br />

Ungleichung, der Effekt erreicht wird, dass bei nahezu parallelen Kanten der<br />

Test extrem konservativ wird und somit das Nullvektorproblem behoben<br />

werden kann. Grund hierfür ist, dass eine Aufaddierung einer sehr kleinen Zahl<br />

(Gottschalk wählt 0.000001) speziell für Werte nahe Null eine enorme<br />

Erhöhung darstellt und somit bei Ungleichungen, deren linke und rechte Seite<br />

Werte nahe Null besitzen, die rechte Seite entsprechend vergrößert wird. Auf<br />

alle anderen Ungleichungen ist der Einfluss dagegen eher gering.<br />

Da es sich bei den Elementen der Rotationsmatrix um Werte zwischen -1 und 1<br />

handelt, ist die Aufaddierung der Konstanten somit unabhängig von den<br />

Ausmaßen der Objekte, also folglich skalierungsinvariant.<br />

−16<br />

−16<br />

⎞<br />

⎟<br />

⎟<br />

⎟<br />

⎠<br />

93


Darüber hinaus gilt es beim Überlappungstest zu beachten, dass möglichst<br />

immer zuerst die Hauptachsen zu testen sind, da sich diese wie gezeigt<br />

einfacher bestimmen lassen. Abbildung 4-26 zeigt die Implementierung des<br />

Überlappungstests.<br />

public class OBBOverlap {<br />

}<br />

final double eps = 1e-6;<br />

double[][] Bf = new double[3][3];<br />

public boolean obb_overlap(double[][] B, double[] T, double[] a,<br />

double[] b) {<br />

Bf[0][0]= Math.abs(B[0][0])+eps;<br />

Bf[0][1]= Math.abs(B[0][1])+eps;<br />

Bf[0][2]= Math.abs(B[0][2])+eps;<br />

Bf[1][0]= Math.abs(B[1][0])+eps;<br />

Bf[1][1]= Math.abs(B[1][1])+eps;<br />

Bf[1][2]= Math.abs(B[1][2])+eps;<br />

Bf[2][0]= Math.abs(B[2][0])+eps;<br />

Bf[2][1]= Math.abs(B[2][1])+eps;<br />

Bf[2][2]= Math.abs(B[2][2])+eps;<br />

}<br />

// Fall 1:<br />

if (TestCase1(0,T,a,b)) return false;<br />

if (TestCase1(1,T,a,b)) return false;<br />

if (TestCase1(2,T,a,b)) return false;<br />

// Fall 2:<br />

if (TestCase2(0,T,a,b,B)) return false;<br />

if (TestCase2(1,T,a,b,B)) return false;<br />

if (TestCase2(2,T,a,b,B)) return false;<br />

// Fall 3:<br />

if (TestCase3(0,0,T,a,b,B)) return false;<br />

if (TestCase3(1,0,T,a,b,B)) return false;<br />

if (TestCase3(2,0,T,a,b,B)) return false;<br />

if (TestCase3(0,1,T,a,b,B)) return false;<br />

if (TestCase3(1,1,T,a,b,B)) return false;<br />

if (TestCase3(2,1,T,a,b,B)) return false;<br />

if (TestCase3(0,2,T,a,b,B)) return false;<br />

if (TestCase3(1,2,T,a,b,B)) return false;<br />

if (TestCase3(2,2,T,a,b,B)) return false;<br />

// sonst Überlappung!!<br />

return true;<br />

private boolean TestCase1(int x, double[] T, double[] a, double[] b)<br />

{<br />

return Math.abs(T[x]) > (a[x] + b[0] * Bf[0][x] + b[1] *<br />

Bf[1][x] + b[2]* Bf[2][x]);<br />

}<br />

private boolean TestCase2(int x, double[] T, double[] a, double[] b,<br />

double[][] B) {<br />

return Math.abs(T[0] * B[0][x] + T[1] * B[1][x] + T[2] *<br />

B[2][x]) > (b[x]+ a[0] * Bf[0][x] + a[1] * Bf[1][x] +<br />

a[2] * Bf[2][x]);<br />

}<br />

private boolean TestCase3(int i, int j, double[] T, double[] a,<br />

double[] b,double[][] B) {<br />

return Math.abs(T[(i + 2) % 3] * B[(i + 1) % 3][j]<br />

- T[(i + 1) % 3] * B[(i + 2) % 3][j]) > (a[(i + 1) %<br />

3] * Bf[(i + 2) % 3][j] + a[(i + 2) % 3] * Bf[(i + 1)<br />

% 3][j] + b[(j + 1) % 3] * Bf[i][(j + 2) % 3] + b[(j<br />

+ 2) % 3] * Bf[i][(j + 1) % 3]);<br />

}<br />

Abb. 4-26 Implementierung des OBB-Überlappungstests<br />

94


4.3.4 Primitivtest<br />

In Abschnitt 3.3.7 wurde der Algorithmus nach [Devillers02] vorgestellt.<br />

Dieser wurde von den Autoren in C++ implementiert. Die Quellen sind frei<br />

verfügbar und wurden daher in die Java-Programmiersprache übersetzt.<br />

Die Autoren weisen jedoch darauf hin, dass diese Implementierung die<br />

Ausnahme, dass alle Punkte eines Dreiecks auf einer Linie oder gar einem<br />

einzigen Punkt liegen, nicht korrekt behandelt. Da der implementierte Test für<br />

solche Ausnahmefälle ein positives Ergebnis liefert, d.h. eine Überlappung der<br />

Primitive angezeigt wird, muss diese Ausnahme gesondert behandelt werden.<br />

Dazu soll die Fläche der Dreiecke bestimmt werden. Ist diese Null, so liegen<br />

die Punkte auf einer Geraden oder sind identisch. Da diese Dreiecke der Fläche<br />

Null keine räumliche Präsenz haben, sollen sie von der Kollisionserkennung<br />

ausgeschlossen werden.<br />

4.3.5 Konfiguration<br />

In Abschnitt 3.3 wurde analysiert, dass für eine optimale Kollisionskontrolle so<br />

weit als möglich die Nutzung von a-priori-Wissen anzustreben ist. Dieses kann<br />

in der einfachsten Form genutzt werden, indem der Anwender in einem<br />

vorbereitenden Schritt alle Objektpaare oder einzelne Objekte von der<br />

Kollisionserkennung ausschließt, von denen er entweder weiß, dass diese nicht<br />

kollidieren können oder deren Kollisionen nicht von Interesse sind.<br />

Abbildung 4-27 zeigt den Konfigurationsdialog der Kollisionserkennung. Hier<br />

können Objektpaare ausgeschlossen werden, die nicht auf Kollisionen getestet<br />

werden sollen. Standardmäßig sind nach Abschnitt 3.3.3 alle Objektpaare<br />

ausgeschlossen, die in einer direkten Vater-Kind-Beziehung stehen.<br />

Abb. 4-27 Konfiguration der Kollisionserkennung<br />

Zusätzlich können hier die zur Markierung von an Kollisionen beteiligten<br />

Baugruppen verwendeten Farben festgelegt werden.<br />

95


4.3.6 Anzeige der Kollisionen<br />

Tritt zwischen zwei Baugruppen eine Kollision auf, so werden diese farblich<br />

markiert. Anschließend können die Details der Kollision angezeigt werden.<br />

Hierfür wurden im unteren Bereich der Anwendung ein Textfeld und ein 3D-<br />

Fenster angelegt (Abbildung 4-28).<br />

Abb. 4-28 Darstellung der kollidierenden Primitive<br />

Im Textfeld werden die Namen der kollidierenden Baugruppen angezeigt. Auf<br />

Kommando (show) können zusätzlich die Gittermodelle der kollidierenden<br />

Baugruppen inklusive der farblich markierten kollidierenden Primitive im<br />

unteren 3D-Fenster dargestellt werden.<br />

96


4.4 Schnittstellen<br />

In Kapitel 2 wurde analysiert, dass bei der Entwicklung der S<strong>of</strong>tware besonders<br />

auch integrative Konzepte berücksichtigt werden sollten, um somit einerseits<br />

die Integration der erstellten Anwendung in andere S<strong>of</strong>twareprodukte zu<br />

ermöglichen und gleichzeitig die Funktionalität spezieller Komponenten der<br />

Anwendung (CNC-Simulation, Kollisionskontrolle) für andere Anwendungsfälle<br />

verfügbar zu machen.<br />

Ein spezieller Anwendungsfall ergab sich für die S<strong>of</strong>tware DCAM. Diese<br />

berechnet die Schweißbahnen in Form von CNC-Programmen für vorgegebene<br />

Maschinen und Werkstücke. Die Maschinendaten liegen innerhalb des Systems<br />

jedoch lediglich in Form einer mathematischen Beschreibung vor. Die<br />

konkreten Bauteilgeometrien sind darin nicht enthalten. Somit ist das<br />

Programmsystem nicht in der Lage, eine Kollisionserkennung durchzuführen.<br />

Das IWS sah es somit als wünschenswert an, die CNC-Simulation und die<br />

Kollisionserkennung der vorliegenden Arbeit zu nutzen. Da dies für den<br />

Anwender möglichst transparent geschehen sollte, wurden alle Funktionalitäten<br />

der Anwendung als Schnittstellen <strong>of</strong>fengelegt, so dass diese aus anderen<br />

Programmsystemen heraus transparent verwendet werden können (Abbildung<br />

4-29).<br />

Hauptanwendung (DCAM) Hintergrundanwendung<br />

Benutzer<br />

Abb. 4-29 Transparente Verwendung der Schnittstellen (Bsp. DCAM)<br />

Die eigentliche Anwendung (DCAM) läuft damit beispielsweise im<br />

Vordergrund, während die hier erstellte Applikation unsichtbar im Hintergrund<br />

agiert.<br />

Schnittstellen<br />

97


Das folgende Klassendiagramm zeigt den Entwurf einer Remote-Control-<br />

Komponente. Diese besitzt als Methoden die wichtigsten Funktionalitäten der<br />

Anwendung, welche somit die nach außen <strong>of</strong>fenen Schnittstellen darstellen.<br />

Abb. 4-30 Klassendiagramm der Remote-Control -Schnittstelle<br />

Darüber hinaus ist ein Monitoring-Konzept integriert, mit dem der Programmierer<br />

der Hauptanwendung in der Lage ist, die Vorgänge in der Hintergrundanwendung<br />

zu überwachen und beispielsweise Informationen über den Stand<br />

der CNC-Ausführung (z.B. aktuell ausgeführte CNC- Zeile) oder bisher<br />

aufgetretene Kollisionen (Ort und Zeit) zu ermitteln.<br />

Diese Monitore sind als Interface-Klassen erstellt worden und können vom<br />

Programmierer der Hauptanwendung seinen Vorstellungen entsprechend<br />

implementiert werden. Die orange markierten Klassen entsprechen beispielhaft<br />

diesen Implementierungen.<br />

Die Klasse MainFrame entspricht der Hauptklasse der hier entwickelten<br />

Anwendung.<br />

98


4.5 Persistenzstrategie<br />

Damit die modellierten Szenen vom Anwender gespeichert und somit wiederverwendet<br />

werden können, wurde ein Datenformat entwickelt, dass in der Lage<br />

ist, alle erforderlichen Informationen einer Szene abzubilden. Aus Gründen der<br />

Transparenz und der Erweiterbarkeit des Gesamtsystems wurde hierfür eine<br />

Struktur im XML-Format gewählt (Abbildung 4-31).<br />

<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

Abb. 4-31 XML-Struktur des Datenformats<br />

Die dargestellte Struktur besteht aus fünf Elementen, welche im folgenden kurz<br />

erläutert werden sollen:<br />

Unter dem Knoten Scene wird der Szenegraph abgebildet. Alle Knoten des<br />

Szenegraphen werden auf gleichnamige Knoten in der XML-Struktur<br />

abgebildet. Eine detaillierte Beschreibung aller Knoten soll an dieser Stelle<br />

ausgelassen werden. Wichtig ist lediglich zu wissen, dass alle BranchGroup’s,<br />

die Baugruppen entsprechen (Abbildung 4-32), neben den üblichen<br />

Eigenschaften die Attribute name und id besitzen, welche den Namen der<br />

Baugruppe und eine dokumentweit eindeutige Nummer repräsentieren.<br />

Letzteres wird für die eindeutige Referenzierung in den folgenden Elementen<br />

benötigt.<br />

99


Baugruppe A <br />

TG<br />

S<br />

BG<br />

TG<br />

S<br />

<br />

<br />

...<br />

<br />

<br />

Abb. 4-32 Abbildung von Baugruppen auf die verwendete XML-Struktur<br />

Der Knoten ElementConnections speichert die Parameter der Gelenkverbindungen.<br />

Die an einer Verbindung beteiligten Baugruppen werden über<br />

die oben angesprochene id referenziert.<br />

Das Element Views enthält alle für eine Szene gespeicherten Sichten. Diese<br />

können im Menü unter View add current View angelegt werden.<br />

Unter CollisionObjectPairs sind die Konfigurationen der Kollisionserkennung<br />

gespeichert, also welche Paare auf Kollisionen getestet werden sollen und<br />

welche nicht. Dieser Knoten wird erst angelegt, wenn manuelle Änderungen<br />

vorgenommen werden. Ist dieser nicht vorhanden, so werden die<br />

Standardeinstellungen (Vater-Kind-Ausschluss) ermittelt und verwendet.<br />

Am Ende des Dokuments werden schließlich die Parameter aller verwendeten<br />

OBBs in einer entsprechenden Hierarchie gespeichert. Dies ist vorteilhaft, da<br />

das Laden der berechneten OBBs sehr viel schneller ist, als diese jedesmal neu<br />

zu erzeugen. Nachteil ist sicherlich der erhöhte Speicherbedarf. Dieser bleibt<br />

jedoch in einem akzeptablen Rahmen und wird daher als unproblematisch<br />

eingeschätzt. Die Zuordnung OBB- Hierachie und Baugruppe erfolgt ebenfalls<br />

über das oben angesprochene id-Attribut.<br />

Um die Dateien schnell und ohne große Speicheranforderungen laden zu<br />

können, wurde für das Parsen der XML-Strukturen ein SAX-Parser verwendet,<br />

welcher im Gegensatz zu komfortableren DOM-Parsern das Dokument<br />

sequentiell bearbeitet und für bestimmte Inhalte registrierte Ereignisse erzeugt.<br />

...<br />

<br />

100


4.6 VR- Darstellung<br />

Eine besonders wünschenswerte Funktionalität der vorliegenden Arbeit stellt<br />

die Möglichkeit zur VR-Darstellung dar. Hierfür wurden zwei Ansätze<br />

verfolgt. Zum einen wurde die Verwendung des bereits angesprochenen<br />

Chromium-Systems und zum anderen die des XML3D-Datenformats<br />

angestrebt. Die speziell erforderlichen Implementierungen sollen im folgenden<br />

vorgestellt werden.<br />

4.6.1 Chromium<br />

Um die vorliegende Anwendung mittels des Chromium-Systems visualisieren<br />

zu können, wurden in einer aktuell am IWS abgeschlossenen Studienarbeit<br />

[Bretschneider05] Implementierungsregeln definiert. Diese besagen unter<br />

anderem, dass das 3D-Fenster (javax.media.j3d.Canvas3D), in dem die Szene<br />

dargestellt wird, allein, also ohne weitere Oberflächenkomponenten (abgesehen<br />

von einem Menü) auf dem Anwendungsfenster (java.awt.Window) platziert<br />

werden muss. Da die Anwendung bisher jedoch eine recht komplexe<br />

Oberflächenstruktur hat (Abbildung 4-33) und diese für die Bedienung auch<br />

benötigt wird, bietet es sich an, eine für die VR-Darstellung modifizierte<br />

Version der eigentlichen Anwendung zu erstellen.<br />

Abb. 4-33 Oberfläche der Anwendung<br />

Diese wurde so gestaltet, dass sich das zentrale 3D-Fenster auf einem<br />

eigenständigen Frame (JFrame) befindet. Das untere 3D-Fenster für die<br />

Darstellung der Details der Kollisionen musste entfernt werden, da die<br />

verwendete Chromium-Konfiguration immer nur ein 3D-Fenster darstellen<br />

101


kann. Die übrigen Oberflächenkomponenten blieben unverändert. Abbildung<br />

4-34 zeigt die modifizierte Anwendung.<br />

Abb. 4-34 VR-Version (Chromium) der Anwendung<br />

Treten Kollisionen auf, so können die Gittermodelle der kollidierenden<br />

Baugruppen inklusive der farblich markierten Primitive, die bisher im unteren<br />

3D-Fenster angezeigt wurden, nun anstelle der Original-Szene dargestellt<br />

werden (Abbildung 4-35).<br />

Abb. 4-35 Anzeige de Details der Kollisionen<br />

Dabei kann abwechselnd zwischen der Originalszene und der detaillierten<br />

Kollisionsdarstellung umgeschalten werden. Abbildung 4-36 zeigt die noch<br />

verzerrte Darstellung einer auf drei Displays verteilten Szene.<br />

Abb. 4-36 Verteilung einer Szene auf drei Displays<br />

102


4.6.2 XML3D<br />

Derzeit wird am Lehrstuhl für <strong>Computer</strong>grafik ein Framework für die VR-<br />

Darstellung entwickelt (Abbildung 4-37). Dieses verwendet für den Datenaustausch<br />

ein eigens entwickeltes 3D-Format, welches mit XML3D bezeichnet<br />

wird.<br />

XML3D<br />

Abb. 4-37 Architektur des Gesamtsystems nach [Metze]<br />

Da die Verwendung dieses Frameworks eine weitere Möglichkeit für die<br />

Darstellung in einer VR-Anlage bietet, sollte die zu erstellende Anwendung<br />

über eine Exportfunktion in das XML3D-Format verfügen.<br />

Das Format ist dabei so ausgelegt, dass es neben statischen Szenen auch<br />

Animationen abbilden kann. Da sich letzteres jedoch momentan noch in der<br />

Entwicklung befindet, wurde lediglich der Export statischer Szenen<br />

implementiert. Dafür wurde der Szenengraph der modellierten Szene auf die<br />

XML3D-Struktur abgebildet.<br />

Dazu werden zunächst alle Knoten des Szenegraphen, die Instanzen der<br />

Klassen TransformGroup oder BranchGroup sind, hierarchisch auf Knoten<br />

vom Typ transform der XML3D-Struktur abgebildet. Enthalten diese Gruppen-<br />

Knoten in der Menge ihrer Kind-Knoten Shape3D-Instanzen, so wird eine Id<br />

generiert und unter dem Attribut shape dem XML3D-Knoten hinzugefügt. Die<br />

103


Zuordnung zwischen Id und Shape3D-Instanz wird in einer Liste zwischengespeichert.<br />

Anschließend werden alle Shape3D-Instanzen inklusive der enthaltenen<br />

Geometrie als Knoten vom Typ poly dem XML3D-Dokument angefügt. Die<br />

Materialeigenschaften der Shape3D-Objekte werden abschließend als Shader-<br />

Knoten vom Typ phong angefügt. Abbildung 4-38 zeigt eine in das XML3D-<br />

Format exportierte Szene.<br />

Abb. 4-38 Darstellung einer Szene in XML3D<br />

Da die für den Export in die VR-Anlage notwendigen Implementierungen<br />

damit zunächst abgeschlossen sind und auch alle übrigen geforderten<br />

Funktionalitäten behandelt worden sind, soll im folgenden in die Testphase<br />

übergegangen werden.<br />

104


5 Test, Anwendungsbeispiele<br />

Als S<strong>of</strong>tware-Test bezeichnet man in der Informatik ein mögliches Verfahren<br />

zur teilweisen Verifikation bzw. Validierung eines Programms. Dieser dient<br />

der Qualitätssicherung eines neu erstellten oder geänderten S<strong>of</strong>twareprogramms.<br />

Dabei geht es prinzipiell darum, das tatsächliche Verhalten mittels<br />

Testfällen zu untersuchen und die Ergebnisse mit den erwarteten Ergebnissen<br />

(Anforderungskatalog, Normen usw.) zu vergleichen und zu dokumentieren.<br />

Es handelt sich folglich um eine Aktivität der S<strong>of</strong>twareentwicklung, in der die<br />

erstellte Anwendung auf ihre Funktionalitäten hin getestet wird. Der Test kann<br />

verschiedene Ausprägungen haben: Im vorliegenden Fall soll der Test derart<br />

erfolgen, dass versucht werden soll, unterschiedlichste Szenarien und<br />

Anwendungsfälle zu modellieren und die nach Kapitel 2 geforderten Funktionalitäten<br />

an diesen zu testen.<br />

Neben den in Kapitel 2 angeführten Anwendungsbeispielen sollen zusätzlich<br />

Roboter und Komponenten der Firma Kuka in den Test einbezogen werden.<br />

5.1 Kuka-Roboter und -Komponenten<br />

Am IWS werden derzeit unter anderem Roboter des Herstellers Kuka<br />

verwendet. Daher wurden während der Entwicklung der S<strong>of</strong>tware zum Testen<br />

des Konstruktionswerkzeugs und der Kollisonserkennung unterschiedlichste<br />

Kuka-Roboter und -Kompo-nenten modelliert und somit zur weiteren<br />

Verwendung verfügbar gemacht. Die erforderlichen CAD-Daten entstammen<br />

der Homepage des Hersteller und können dort in den unterschiedlichsten<br />

Formaten abgerufen werden. Im vorliegenden Fall wurden diese im VRML-<br />

Format importiert.<br />

Abbildung 5-1 zeigt einige der erstellten Roboter und Komponenten. Es zeigte<br />

sich, dass sich die Baugruppen mit der hier erstellten Anwendung ohne<br />

Einschränkungen modellieren und deren kinematische Eigenschaften abbilden<br />

lassen.<br />

Zusätzlich konnten die einzelnen Baugruppen mit Hilfe des in Abschnitt 4.1.2<br />

angesprochenen Werkzeugs zur Wiederverwendung von Komponenten in<br />

beliebiger Art und Weise kombiniert werden, wodurch sich die Modellierung<br />

von komplexen Szenen deutlich vereinfachte.<br />

105


Kr3 Kr125<br />

Kr60 Kl1500<br />

Abb. 5-1 Kuka-Roboter und -Komponenten<br />

Darüber hinaus wurde die Kollisionserkennung an den Objekten getestet und<br />

ohne erkennbaren Fehler und in akzeptabler Performance durchgeführt. Tests<br />

ergaben, dass besonders die Nutzung der räumlichen und zeitlichen Kohärenz<br />

die Kollisionserkennung beschleunigen. Dies gilt ganz besonders für den Fall,<br />

dass Kollisionen zwischen zwei Baugruppen auftraten und diese anschließend<br />

gemeinsam gleichartig bewegt wurden. Diese Kollision musste daher im<br />

folgenden Zeitschritt nicht neu berechnet, sondern lediglich angezeigt werden.<br />

106


5.2 XXL-Anlage<br />

In Abschnitt 2.1.2 wurde als Anwendungsbeispiel für das Laserstrahlschweißen<br />

die XXL-Anlage vorgestellt. Um die Möglichkeiten und Funktionalitäten der<br />

vorliegenden Arbeit zu testen, wurde diese prototypisch mit der erstellten<br />

S<strong>of</strong>tware modelliert (Abbildung 5-2).<br />

Abb. 5-2 XXL-Anlage<br />

Die Bauteilgeometrien liegen im 3DS-Format vor und wurden über einen<br />

entsprechenden FileLoader in das Programmsystem importiert. Anschließend<br />

ist die Anlage nach dem Modell der „CNCInspector“-S<strong>of</strong>tware konstruiert<br />

worden. Abbildung 5-3 zeigt beispielhaft die Umsetzung der Laserschweiß-<br />

Köpfe.<br />

Dabei entstand, bis auf die CNC-Steuerung, ein voll funktionsfähiges Abbild<br />

der realen Maschine 1 . Die CNC-Steuerung in Form eines CNC-Interpreters<br />

konnte leider bis zum Abschluss der vorliegenden Arbeit nicht mehr<br />

implementiert werden, da derzeit noch das Verhalten der Sinumerik-<br />

Steuerungsanlagen der realen Maschine analysiert wird. Unter Verwendung<br />

des Standard-Interpreters können aber bereits zu Testzwecken Programme<br />

abgearbeitet werden.<br />

1 Der exakte Aufbau der realen Anlage darf in der vorliegenden Arbeit nicht veröffentlicht<br />

werden. Aus diesem Grunde ist das hier gezeigte Modell modifiziert worden und entspricht<br />

somit nur teilweise der realen Anlage.<br />

107


Sollte in naher Zukunft die CNC-Steuerung analysiert sein, so kann ein eigener<br />

Interpeter implementiert und in die Anwendung integriert werden. Hier zeigt<br />

sich ein Vorteil der Erweiterbarkeit der erstellten S<strong>of</strong>tware.<br />

Neben der Simulation durch CNC-Programme kann die virtuelle Anlage selbstverständlich<br />

auch manuell gesteuert werden.. Für jedes kinematische Gelenk<br />

existiert ein Regler, mit dem die Parameter der Verbindung geändert werden<br />

können. Somit lassen sich verschieden Konfigurationen der Anlage erzeugen<br />

und unter Verwendung der Kollisionskontrolle typische Anwendungsfälle, z.B.<br />

in Form von z.B. Erreichbarkeitsstudien etc., durchführen.<br />

Abb. 5-3 Laserschweißköpfe<br />

Zusätzlich lassen sich jederzeit Werkstücke in die virtuelle Anlage importieren<br />

und sich somit die Möglichkeiten der Bearbeitung durch die XXL-Anlage<br />

analysieren. Sollten Mängel in der Anlagenkonstruktion entdeckt werden, lässt<br />

sich das kinematische Modell der virtuellen Anlage auch jederzeit bearbeiten.<br />

Es können Baugruppen hinzugefügt, entfernt oder deren Gelenkverbindungen<br />

neu konfiguriert werden.<br />

Die Kollisionskontrolle lieferte hier zunächst Kollisionen zwischen Bauteilen,<br />

die aufgrund der geometrischen Nachempfindung für die Darstellung in der<br />

virtuellen Anlage zustande kamen. So traten beispielsweise Kollisionen<br />

zwischen den zylindrischen Objekten, die den Faltenbalgen der realen Anlage<br />

entsprechen, und den Maschinenteilen für die y-Achse auf. Diese Probleme<br />

wurden gelöst, indem durch manuelle Konfiguration Kollisionen zwischen den<br />

betr<strong>of</strong>fenen Baugruppen ausgeschlossen wurden. Hierdurch können keine<br />

Kollisionen übersehen werden, da die zulässige Translation der Faltenberge<br />

entlang der z-Richtung über Constraints reguliert ist. Abbildung 4-5 zeigt die<br />

geometrische Form der Faltenbalge im Modell.<br />

108


Abb. 5-4 Umsetzung der Faltenbalge als zylindrische Objekte<br />

Darüber hinaus zeigte sich auch hier wieder, dass besonders bei Szenen mit<br />

einer großen Anzahl von Baugruppen die Nutzung von Kohärenz und aprior-<br />

Wissen entscheidend zur Beschleunigung der Kollisionserkennung beitragen.<br />

109


5.3 Laserstrahl-Auftragschweißen<br />

Als weiteres Anwendungsbeispiel wurde in Kapitel 2 das Laserstrahl-Auftragschweißen<br />

angeführt. Da sich ein Anwendungsfall ergab, bei dem das<br />

modulare Pulverdüsensystem mit einem Roboter der Firma Reis kombiniert<br />

werden sollte, wurde dieses im Test aus Daten im STL-Format modelliert.<br />

Abbildung 5-4 zeigt den erstellten Roboter mit angefügtem Laser.<br />

Abb. 5-5 Reis-Roboter mit Laserkopf<br />

Damit die Simulation die CNC-Programme der realen Maschine ausführen<br />

kann wurde anschließend von einem Studenten aus dem Maschinenwesen ein<br />

CNC-Interpreter nach der in Abschnitt 4.2 beschriebenen Vorgehensweise<br />

implementiert und in die Anwendung über die vorgesehenen Schnittstellen<br />

integriert. Somit ist die S<strong>of</strong>tware nun in der Lage, die Programme der realen<br />

Anlage zu simulieren.<br />

Abschießend wurden verschiedene Werkstücke importiert und die durch die<br />

S<strong>of</strong>tware DCAM berechneten Programme an diesen getestet. Ein Beispiel zeigt<br />

Abbildung 5-5.<br />

Da ein direktes Ausführen der Simulation aus der S<strong>of</strong>tware DCAM heraus<br />

erwünscht war, wurde die Anwendung, unter Verwendung der in Abschnitt 4.4<br />

beschriebenen Schnittstellen, in das DCAM-System integriert. Hier zeigen sich<br />

die Vorteile der integrativen Konzepte der Anwendung.<br />

110


Abb. 5-6 Reis-Roboter mit Werkstück<br />

Da die Anlagenbetreiber davon ausgehen, dass keine Selbstkollisionen des<br />

Roboters aufgrund der Auslegung der Roboter-Steuerung auftreten können,<br />

bietet es sich an, die Kollisionserkennung entsprechend manuell zu<br />

konfigurieren. Folglich müssten lediglich Kollisionen zwischen dem<br />

Werkstück und den Roboterkomponenten untersucht werden.<br />

111


6 Zusammenfassung<br />

Ziel der vorliegenden Arbeit war die Erstellung einer virtuellen<br />

Laserbearbeitungsanlage. Diese recht allgemein gestellte Aufgabe wurde in<br />

Abschnitt 1.3 durch klar definierte Zielstellungen eingegrenzt:<br />

1) Werkzeug zur Konstruktion einer generischen Maschine<br />

2) Spiegelung der Kinematik einer Bearbeitung in einer Simulation<br />

3) Kollisionskontrolle beim Bewegungsablauf und Identifizierung der<br />

Kollisionspunkte<br />

4) Ermöglichung der intuitiven Modifikation von Maschinenelementen<br />

und Bahndaten<br />

5) Möglichkeit des Exports in eine VR-Anlage,<br />

Das Ergebnis der Arbeit sollte somit ein S<strong>of</strong>twareprodukt sein, welches über<br />

die genannten Funktionalitäten verfügt. Daher wurde anschließend ein<br />

Projektplan aufgestellt, welcher aus den in der S<strong>of</strong>twaretechnik üblichen<br />

Phasen: Analyse, Design, Implementierung und Test besteht. Diese bildeten<br />

gleichzeitig die Gliederung der vorliegenden Ausarbeitung.<br />

In Kapitel 2 wurden zunächst die Ist-Situation und typische Anwendungsgebiete<br />

des IWS dargestellt. Anschließend wurden aus den Problem- und<br />

gesetzten Zielstellungen alle Anforderungen an die zu entwickelnde S<strong>of</strong>tware<br />

zusammengetragen. Hierbei stellte sich bereits heraus, dass unter Verwendung<br />

eines einfachen internen Modells die Mehrheit der zu erwartenden<br />

kinematischen Modelle abgebildet werden kann. Unter Abschätzung des<br />

Kosten-/Nutzenfaktors wurde dieses Modell als Basis für die weitere<br />

Entwicklung verwendet.<br />

Die ermittelten Anforderungen und die vorbereitend getr<strong>of</strong>fenen Designentscheidungen<br />

wurden anschließend in Kapitel 3 konkretisiert. Es wurde<br />

gezeigt, wie Baugruppen in eine kinematische Struktur integriert und auf dieser<br />

unterschiedliche Konfigurationen der virtuellen Maschine erzeugt werden<br />

können.<br />

Darüber hinaus ist ein Konzept für die CNC-Steuerung der virtuellen Anlage<br />

erarbeitet worden. Hier bestand die Schwierigkeit darin, dass deren Verhalten<br />

zur Entwicklungszeit nicht bekannt ist und somit ein dynamisches System<br />

112


geschaffen werden musste, mit dem noch zur Laufzeit ein Steuerungsverhalten<br />

integriert werden kann. Dazu wurde die Java Reflection API verwendet, welche<br />

es ermöglicht, dynamisch Klassen zu laden und diese anschließend s<strong>of</strong>ort zu<br />

verwenden. Die zu ladenden Klassen sind Teil einer abstrakten Maschine und<br />

erbringen speziell festgelegte Funktionalitäten. Die Implementierung dieser<br />

Klassen erfolgt durch den Anwender selbst.<br />

Als Hauptbestandteil des Kapitels wurde ein Konzept für die Kollisionserkennung<br />

erarbeitet. Dazu wurde zunächst die Szene strukturiert und in, auf<br />

Kollisionen zu testende, Objekte zerlegt. Diese Objekte entsprechen jeweils<br />

den Baugruppen, welche sich abhängig von ihrer kinematischen Struktur<br />

relativ zueinander bewegen Die anschließend entwickelte Vorgehensweise<br />

entspricht einem zweiphasigen Verfahren, bei dem in einer ersten Phase unter<br />

Nutzung von a priori-Wissen sowie zeitlicher und räumlicher Kohärenz<br />

untersucht wird, welche Objekte während eines Zeitschritts überhaupt auf<br />

Kollisionen getestet werden müssen. Anschließend werden die zu testenden<br />

Objekte unter Nutzung von OBB-Hierarchien und Primitivtests auf Kollisionen<br />

untersucht. Die Erzeugung der OBBs erfolgte dabei durch Untersuchen der<br />

statistischen Verteilung der Punkte und Flächen der Primitive des zu<br />

umhüllenden Objekts.<br />

Anschließend wurde gezeigt, dass aufgrund der Diskretisierung des<br />

kontinuierlichen Prozesses während der Simulation, Probleme bei der<br />

Kollisionserkennung auftreten können. Hierfür wurde eine Lösung in Form<br />

eines kontinuierlichen Kollisionserkennungsverfahrens vorgestellt. Da diese<br />

Problematik bisher jedoch als nicht akut eingeschätzt wird und die Einhaltung<br />

der Projektlaufzeit gewährleistet sein muss, ist eine Implementierung in das<br />

Programmsystem bisher nicht erfolgt. Sollte dies zukünftig erwünscht sein, so<br />

wurde auch gezeigt, wie unter Verwendung der bereits vorhandenen Strukturen<br />

(OBBs) eine Implementierung möglich ist.<br />

In Kapitel 4 wurden anschließend spezielle Problemstellungen erläutert und die<br />

implementierte Anwendung vorgestellt. So wurde beispielsweise gezeigt, wie<br />

die Konstruktion von Baugruppen erfolgt und dass diese einmal modellierten<br />

Komponenten mit dem vorhandenen Programmsystem leicht wiederverwendet<br />

werden können. Somit lassen sich selbst komplexe Szenen in unterschiedlichen<br />

Konfigurationen mit geringem Aufwand modellieren.<br />

Darüber hinaus wurde gezeigt, wie sich die CNC-Steuerung parametrieren lässt<br />

und wie eigene CNC-Interpreter entwickelt und integriert werden können.<br />

Anschließend wurden erneut spezielle Problemstellungen und Strategien der<br />

Kollisionserkennung, die Gestaltung der Schnittstellen und die implementierten<br />

Funktionalitäten für die VR-Darstellung erläutert.<br />

Schlussendlich ist die erstellte Anwendung in Kapitel 5 an praktisch relevanten<br />

Szenarien getestet worden. Es zeigte sich, dass die heteregonen Anlagentypen<br />

in Form von Robotern, Laserschweißanlagen oder Lineareinheiten mit der<br />

erstellten Anwendung modellierbar sind und sich deren kinematische Vorgänge<br />

simulieren lassen.<br />

113


6.1 Fazit und Ausblick<br />

Rückblickend betrachtet sind die gesetzten Zielstellungen erfüllt worden. Die<br />

erstellte Anwendung ist in der Lage die kinematischen Eigenschaften<br />

unterschiedlichster Anlagensysteme abzubilden, Simulationen durchzuführen<br />

und Kollisionen zu erkennen. Speziell die Möglichkeiten zur VR-Darstellung<br />

der modellierten Anlagen stellen einen Vorteil gegenüber herkömmlichen<br />

Produkten anderer Hersteller dar.<br />

Darüber hinaus zeichnet sich die S<strong>of</strong>tware aufgrund der Implementierung in<br />

Java/Java3D durch Plattformunabhängigkeit und der wahlweisen Nutzung von<br />

DirectX- oder OpenGL- Treibern für die dreidimensionale Darstellung aus. Die<br />

definierten Schnittstellen können unter Verwendung freier S<strong>of</strong>tware (Java) und<br />

Entwicklungsumgebungen (z.B. Eclipse) komfortabel genutzt werden.<br />

Allerdings mussten aufgrund der begrenzten Laufzeit und des Umfangs des<br />

Projektes Kompromisse im implementierten Funktionsumfang eingegangen<br />

werden. Da dies bereits zu Beginn abzusehen war, wurde besonders auf die<br />

Erweiterbarkeit der S<strong>of</strong>tware und die transparente Gestaltung der Schnittstellen<br />

großen Wert gelegt.<br />

Der aktuelle Stand ist folglich als Prototyp zu bezeichnen. Um die Anwendung<br />

an Kunden des IWS ausliefern zu können, sind daher beispielsweise noch<br />

ergonomische Untersuchungen in Form von Usability-Tests erforderlich. Diese<br />

sollen am IWS in weiterführenden Arbeiten durchgeführt werden.<br />

Darüber hinaus sind zahlreiche Erweiterungsmöglichkeiten denkbar. Zum<br />

einen sei hier die kontinuierliche Kollisionserkennung zu nennen. Weiterhin ist<br />

in Zukunft sicherlich wünschenswert, die eigentliche Lasermaterialbearbeitung<br />

simulieren zu können. Denkbar wäre somit beispielsweise, die vom Laserstrahl<br />

abgefahrenen Bahnen auf dem Werkstück aufzutragen. Hierfür können<br />

ebenfalls die vorhandenen Strukturen (OBBs) für die Berechnung des<br />

Schnittpunkts zwischen Laserstrahl und Werkstück verwendet werden. Auch<br />

hierzu laufen am IWS bereits weiterführende Arbeiten.<br />

114


Quellen<br />

[Balzert]<br />

H.Balzert: Lehrbuch der S<strong>of</strong>tware-Technik. Akademischer Verlag, 2000.<br />

[Barber, Dopkin u. Huhdanpaa]<br />

C. B. Barber, D. P. Dobkin, and H. Huhdanpaa. The Quickhull algorithm for<br />

convex hull. Technical Report GCG53, Geometry Center, Univ. <strong>of</strong> Minnesota,<br />

July 1993.<br />

[Bretschneider05]<br />

K.Bretschneider. Threoretische Grundlagen zur Entwicklung einer virtuellen<br />

Technologie. Studienarbeit. Staatliche Studienakademie Dresden. März 2005.<br />

[Devillers02]<br />

O.Devillers and P.Guige.Faster Triangle-Triangle Intersection Tests.Institut<br />

National de Recherche en Informatique en Automatique. Juni 2002<br />

[Erleben]<br />

K.Erleben. Module Based Design for Rigid Body Simulators. Technical Report<br />

DIKU-TR-02/06, Department <strong>of</strong> <strong>Computer</strong> <strong>Science</strong>, University <strong>of</strong><br />

Copenhagen. July 2002.<br />

[Gottschalk, Lin, Manocha96]<br />

S.Gottschalk, M.C.Lin, and D.Manocha. OBBTree: A Hierarchical Structure<br />

for Rapid Interference Detection. In SIGGRAPH 96 Conference Proceedings,<br />

Annual Conference Series. ACM SIGGRAPH, Addison Wesley, August 1996.<br />

[Gottschalk96]<br />

S.Gottschalk. Separating axis theorem. Technical Report TR96-024,<br />

Department <strong>of</strong> <strong>Computer</strong> <strong>Science</strong>, UNC Chapel Hill, 1996<br />

115


[Gottschalk00]<br />

S.Gottschalk. Collision queries using oriented bounding boxes. PhD Thesis<br />

2000.<br />

[Held97]<br />

Martin Held. ERIT – A collection <strong>of</strong> efficient and reliable intersection tests.<br />

Technical Report, Univesity at Stony Brook, 1997.<br />

[Klosowski98]<br />

J.T.Klosowski. Efficient Collision Detection for Interactive 3D Graphics and<br />

Virtual Environments. PhD thesis, State University <strong>of</strong> New York, Stony<br />

Brook,1998.<br />

[Lloyd]<br />

John E. Lloyd.Research Associate, <strong>Computer</strong> <strong>Science</strong> Dept.University <strong>of</strong><br />

British Columbia.<br />

Homepage: http://www.cs.ubc.ca/~lloyd/<br />

[Metze]<br />

J.Metze. Entwicklung eines Visualisierungssystems für Virtual - Reality<br />

Simulationen. Großer Beleg, Institut für <strong>Computer</strong>grafik, TU-Dresden. März<br />

2005.<br />

[Mezger01]<br />

J.Mezger. Effiziente Kollisionsdetektion in der Simulation von Textilien.<br />

<strong>Diplomarbeit</strong>. Graphisch-Interaktive Systeme, Universität Tübingen. Dezember<br />

2001.<br />

[Möller97]<br />

Tomas Möller. A fast triangle-triangle intersection test. Journal <strong>of</strong> graphics<br />

tools. 1997.<br />

116


[Redon00]<br />

S.Redon, A.Kheddar und S.Coquillart. An algebraic Solution to the Problem <strong>of</strong><br />

Collision Detection for Rigid Polyhedral Objects. In Proceedings <strong>of</strong><br />

International Conference on Robotics and Automation, April 2000.<br />

[Redon01]<br />

S.Redon, A.Kheddar und S.Coquillart. CONTACT: arbitrary in-between<br />

motions for continuous collision detection. In Proceedings <strong>of</strong> IEEE<br />

ROMAN’2001, Sep. 2001.<br />

[Redon02]<br />

S. Redon, A.Kheddar and S.Coquillart. Fast Continuous Collision Detection<br />

between rigid bodies. Proc. Of Eurographics (<strong>Computer</strong> Graphics Forum).<br />

2002.<br />

[Redon04]<br />

S. Redon, J.Kim and D.Manocha. Fast Continuous Collision Detection for<br />

Articulated Models. ACM Symposium on Solid Modeling and Applications.<br />

2004.<br />

[Selig03]<br />

J.M.Selig. Lie Groups and Lie Algebras in Robotics. South Bank University,<br />

London.2003<br />

[Snyder92]<br />

J.Snyder. Interval analysis for <strong>Computer</strong> Graphics. <strong>Computer</strong> Graphics,26(2),<br />

pages 121-130, July 1992.<br />

[Sommerville]<br />

I.Sommerville: S<strong>of</strong>tware Engineering, 6th edition, Addison-Wesley 2000<br />

[Völlmar04]<br />

Dr.S.Völlmar, Dr.D.Lepski, S.Scharek, Dr.H.Eichler, R.Ludewig. Optimierung<br />

einer hybriden Fertigung durch Einsatz von Methoden der virtuellen Realität.<br />

Kompetenzzentrum Neue Materialien, Tagung, Bayreuth. 2./3.11.2004<br />

117


[Webh<strong>of</strong>er04]<br />

M.Webh<strong>of</strong>er.Dissertation: Abbildung von Finite-Elemente-Modellen als kinematische<br />

Strukturen. Lehrstuhl für Fördertechnik Materialfluss Logistik.TU-<br />

München. 2004.<br />

118

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!