projekt.thermobjekt@roman.Vogl

June 30, 2006

Sensoreneinheit zur Positionsbestimmung im Raum

Filed under: Interface Design, Microcontroller/Sensorik, Uncategorized — roman @ 12:31 pm

Um die position der gesamten Hand im Raum bestimmen zu können, benötige ich ein Sensoreinheit , die sechs freiheitsgrade bestimmen kann. Dieses Sensoreinheit muss mit drei Neigungssensoren und drei Beschleunigungssensoren ausgestattet sein. Es gibt von der Firma Spark fun electronics eine Sensoreinheit, die genau diesen Anforderungen gerecht wird. Die IMU 6-DOF unit besteht aus einen drei achsen accelerometer von Freescale (typ. MMA7260Q) und drei iMEM`s Neigungssensoren, und einen PIC16F88 zum auslesen der Sensordaten. Die Messdaten können über integrierten Bluetooth mit einer Baudrate von 57600bps an den Rechner übertragen werden. In dieser Hinsicht wäre es gut die komplette kommunikation von computer und Handschuh über Bluetooth laufen zu lassen. Mit einer größe von 51×51x23mm ist diese Einheit auch sehr klein, und für meine zwecke gut geeignet.

spark fun electronics IMU 6-DOF

June 6, 2006

bestimmen der freiheitsgrade

Filed under: Interface Design, Uncategorized — roman @ 10:56 pm

um das interface zu gestalten, ist es wichtig vorerst einmal festzulegen welche bewegungen eine menschliche hand ausführen kann. dafür betrachte ich jedes gelenk der hand einzeln, und bestimme deren freiheitsgrad. Bei Gelenken beschreibt Freiheitsgrad die Anzahl und Art der möglichen Bewegungen, die das Gelenk ausführen kann. Dabei stehen einen starrer Körper insgesamt sechs möglichen Freiheitsgrade zur Verfügung, drei für die Translation und drei für die Rotation.
Freiheitsgrade im Raum:
Verschiebung
- x-Achse
- y-Achse
- z-Achse
Drehung um
- x-Achse
- y-Achse
- z-Achse

Innerhalb eines Gelenks lassen sich jedoch nur maximal fünf Freiheitsgrade technisch umsetzen.

Aufbau der Hand:
Die Hand besteht aus der Handwurzel (Carpus) mit den beim Menschen 8 Handwurzelknochen (Kahnbein, Mondbein, Kopfbein, Großes Vieleckbein, Kleines Vieleckbein, Dreieckbein, Erbsenbein, Hakenbein), der Mittelhand (Metacarpus) mit den bis zu 5 Mittelhandknochen und den beim Menschen 5 Fingern (Digiti manus - Daumen (Pollex), Zeigefinger (Index), Mittelfinger (Medius), Ringfinger (Anularius), Kleiner Finger (Digitus minimus)) mit 14 Fingerknochen (zwei für den Daumen und je drei für die anderen vier Finger). die hand besteht einerseits aus Scharniergelenk (Ginglymus), die nur eine Bewegungsachse besitzen (nur beugen und strecken), und Sattelgelenk (Articulatio sellaris) - Daumen-Grundgelenk; besitzen zwei Bewegungsachsen.

freiheitsgrade der hand
im bild wird gezeigt, wo welche freiheitsgrade sind. bei diesen koordinatensystem haben die gelenke mit einen freiheitsgrad, die möglichkeit sich um die y-Achse zu drehen, und die gelenke mit zwei freiheitsgraden, die möglichkeit sich um die y- und z Achse zu drehen.
Für das Design des Interfaces ist nun zu berücksichtigen, das es in summe 10×1 + 6×2 = 22 zu bestimmende freiheitsgrade gibt. Das heißt, das das microcontroller-system die möglichkeit bietet 22 senoren abzulesen.
Wobei die gesamte hand an sich noch sechs freiheitsgrade besitzt, die über beschleunigungssensoren bestimmt werden soll.

June 5, 2006

kollisionserkennung (weiterentwicklung)

Filed under: 3D-Objekt/OpenGL, Softwaredesign, Uncategorized — roman @ 8:32 pm

aktueller screenshot vom programm für den versuchsaufbau.

programm_screenshot_1-juni_a

im bild: die Kugel symbolisiert die Fingerspitze, die COMVEX_HULL_PRIMITIVE symbolisiert das thermObject. Die rote Linie ist die berechnete kürzeste Distanz zwischen den beiden Objek-Oberflächen. zu beachten ist, das die kollisionserkennung nicht an die vereinfachte Quadrat darstellung des convex-hull-primitiv gebunden ist. die berechnung erfolgt an der komplexen Oberfläche des Objektes. [collision A-B |x|y|z] gib den distanz-vektor relativ zum Ausgangspunkt an-> also die aktuelle entfernung der nähersten punkte auf den hüllen der zu berechnenden Objekte. Der Ausgangspunkt ist der mögliche Kollisionspunkt auf Objekt A -> der Kugel.

programm_screenshot_1-juni_b

im bild: collision zwischen der Kugel und dem Objekt. zur veranschaulichung schaltet die wireframe-darstellung in rot um. der distanz-vektor ist bei 0,0,0.

[ _fps | timeStep] gibt die Performance aus, als bilder pro secunden die abhängig von der grafik-karten-leistung gerade ausgegeben werden.

das ist nun die grundlegende programmstruktur die ich für meinen versuchsaufbau benötige. Als nächster schritt soll die Position der Kugel über Sensoren gesteuert werden, und bei auftretender Kollision soll ein Peletrierelemente aktiviert werden.