Kollisionsdetektion

Aufgabe dieser Einheit ist es, mögliche Kollisionen zweier Beine durch eine Bewegung zu erkennen, bevor diese ausgeführt wird. Alle nötigen Daten dafür wie etwa die maximale Auslenkung der Servos oder die Abmessungen der Beine werden dem Definition – File entnommen. Diese Aufgabe übernimmt die Parsing - Unit, die alle erforderlichen Daten an die jeweiligen Klassen weiterdelegiert.

 

Funktionsweise:

Aufgrund der eingelesenen Daten aus dem Definition - File werden für jedes Glied eines Beines geometrische Flächen erzeugt. Dieser Vorgang wird für jedes Bein durchgeführt und alle Flächen werden als Members einer Klasse gespeichert. Wird nun ein angestrebter Set von Winkeln einer Funktion "IsIntersecting(...)" mitgegeben, wird mit Hilfe des "Seperating Axis Theorem" geprüft, ob sich die entsprechenden Flächen überschneiden würden. Rückgabewert dieser Funktion ist ein boolscher Wert, der dem Ergebnis entspricht.

 

SAT - Seperating Axis Theorem:

  • Bilden der Normalvektoren von allen Kanten von zwei nebeneinanderliegenden zwei-dimensionalen konvexen Figuren.
  • Projektion der beiden Figuren auf diese Normalvektoren.
  • Jeder Normalvekter, auf dem sich die Projektionen nicht schneiden, ist eine separierende Achse.
  • Wird nach der Abarbeitung aller Kanten der beiden Figuren keine separierende Achse gefunden, liegt eine Kollision vor.

 

Dieses Theorem wird für alle Teilflächen zweier benachbarter Beine aus der Ansicht von oben und von der Seite angewendet. Ermittelt die Funktion keine Kollision, kann die gewünschte Bewegung ausgeführt werden.

 

Unterschied zwischen konkav und konvex

 

 

Ansicht von oben und von der Seite

 

 

SAT

Kollision zweier konvexer Figuren

 

Simulation der Kollisionserkennung mit WinGDI und den originalen geometrischen Definitionen

 

Kollision erkannt!

 

Kollision in der Top-Ansicht, jedoch nicht in der Frontalansicht -> keine Kollision!