projekt.thermobjekt@roman.Vogl

September 10, 2006

Vektorberechnung für die Softwareentwicklung

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

Berechnung der Position der Ringaufhängung im Raum

berechnung1

berechnung2

Berechnung der einzelenen Fingergelenke im Raum

berechnung3

berechnung4

das ist die grundlagen um aus den Sensordaten die Geometrie der Hand zu errechnen und dadurch die Position der Fingerspitze.

August 4, 2006

Interface Design

Filed under: Interface Design, Uncategorized — roman @ 3:40 pm

Ausleger_Perspektive

Ausleger_obenAusleger_SeiteAusleger_Hand

Die Konstruktion besteht aus einer Basis, die auf dem Handrücken des Betrachtter aufliegt. Mit Hilfe der Greifer, die geöffnet und geschlossen werden können, wird die Basis mit der Hand fixiert. Die einzelnen Elementen sind drehbar miteinander Verbunden. Wenn an dem Zugseil Kraft ausgeübt wird, krümmen sich die Elemente zusammen, und legen sich gleichmäßig auf die Oberfläche der Handfläche auf und über über die auf den Elementen montierten Polster lechten Druck darauf aus. Die Hand ist nun mit der Basis verbunden (siehe Bild). Wenn das Zugseil entlastet wird, öffnet die Rückzugfeder den Greifer.
Greifer2
Auf der Basis sind für jeden Finger ein Auslege montiert. Das Element 1 (siehe Bild) wird an den dafür vorgesehenen Aufnahme montiert. Es besitzt zwei Freiheitsgrade, unzwar Rotation in der z und y Achse. Die Rotation über die z Achse wird über einen kleinen Potentiometer abgenommen. Element 2 besteht aus einen Seilzug - Schlittensystem, mitdem es möglich ist den Winkel zwischen den zwei Schenkeln zu messen. Element 3 ist an dem Finger montiert. Durch diesen Aufbau ist es möglich alle Winkeln jedes Gelenkes der einzeilnen Finger zu messen, und deren absolte Position zu bestimmen.
Ausleger

July 23, 2006

Übersichtsplan für die Sensorik

Filed under: Microcontroller/Sensorik, Uncategorized — roman @ 5:52 pm

Berücksichtigt die notwendige Senorik, Microcontrollersysteme und Ausgabemodule sowie Motorenansteuerung. Der Plan ist für den Bau des Prototypens konzipiert, der vorerst nur einmal eine Fingereinheit - der Zeigefinger hat. Wobei der Aufbau modular konstruiert wird. Das heißt es sind die einzelnen Fingereinheiten als Module gestaltet, die in weiterer Folge (wenn der Prototyp funktioniert) einfach in das System zusätzlich integriert werden können, nach einen bestimmte Steck- und Schraub-System. Die im Plan angegebenen Bestellnummern beziehen sich auf Conrad Elektronik. Die verwendeten Microcontroller werden PIC18F452 und PIC18FL452 von Microchip sein.
Uebersichtsplan

July 13, 2006

Die Roboterhand

Filed under: Interface Design, Uncategorized — roman @ 11:08 am

Eine weiter Überlegung über mein ThermObjekt ging in Richtung Roboterhand. Damit meine ich, das die Hand nicht nur mit Senoren ausgestattet ist die die Bewegung abnehmen, und über den einen Rückgabekanal (Wäremempfindung) Information übertragen, sonder auch mit steuerbaren beweglichen Einheiten wie z.b Motoren bestückt ist. Es könnte der Handschuh den Betrachter bewegen, bzw. er könnte eigene Formen abtasten, ohne einen Betrachter. Er könnte beginnen, wenn kein Betrachter da ist, sich um das Thermobjekt zu kümmern. Er könnte es streicheln, putzen, und seine “Haltungsschäden” korrigieren. Er könnte aber auch das Objekt vernichten, ausradieren, und ein Neues formen, wie Kinder mit Knetmasse. Es könnte vorbeigehende Betrachter animieren, ihn deren Hand zu “leihen”. Die Überlegung geht auch in die Richtung, ein System zu entwickeln, bei den Sensor und steuerbares Element eine Einheit ergeben, und entsprechend der Verwendungszweckes benutzt werden kann, wie z.b Motor der durch einfaches Umschalten zu einen Generator wird. Aber in dieser Hinsicht, muss erst überlegt werden, wie die Bewegungen der einzelnen Finger abgenommen werden kann, ohne viel an Bewegungsfreiheit zu verlieren.

Die Potetiometer-Lösung
Einerseit könnte diese Bewegungen wie die Raumpositionsbestimmungs-System funktionieren, so das über Feder gespannte aufgerollte Seile Drehpotentiometer bewegen. Dieses System ist vom Aufbau der Sensoren am einfachsten. Die Werte sind absolut zu lesen, so das sich Messfehler nicht addieren, außerdem sind das keine Zustandstwerte und keine Momentaufnahmen, was natürlich sehr vorteilhaft ist. Eine weitere Idee, die in diese Kategorie passt sind natürlich Linearpotentiometer.

Die Pneumatik-Zylinder Lösung
Eine andere Überlegung ging in Richtung Pneumatikzylinder, bei dem durch die Bewegung entstehenden Durchfluss gemessen wird. Diese Variante muss getestet werden, weil sie viele Probeleme beinhalten kann. Es müssen Zylinder verwendet werden, die sehr leichtgängig sind, und kaum Widerstand haben, außerdem sind Durchflussmesser eher teuer. Die Messwerte sind nur Momentaufnahmen - es werden nur Impulse gemessen, und sie ist relativ vorherrig gemessenen Wert wodurch sich Messfehler und Messungenauigkeiten addieren würden. Weiters ist zu beachten dass Luft ein Medium ist, das sich verdichten lässt wodurch weitere Fehler und Ungenauigkeiten entstehen können. Der Vorteil besteht darin, dass die Möglichkeit besteht, die Zylinder auch mit Druckluft anzusprechen, und zu bewegen. Wobei beim bewegen der Zylinder wird die Bestimmung der Position der einzelnen Punkte sehr schwer und Ungenau, weil kein Rückkanal mehr da ist, der den Ist-Wert angibt. Ideal ist dann eine Mischung aus den beiden Überlegungen. Ein Zylinder zum Bewegen der einzelnen Fingergelenken, und ein Paralell zu jeden Zylinder laufenden Linearpotentiometer.

Die Pneumatik-Elastfinger Lösung
Ein Elastfinger kann man sich wie einen elastischen Schlauch vorstellen, der eine vorder und eine Rückseite besitzt. Die Rückseite ist faltenbalgähnlich aufgebaut und somit leicht dehnbar, während die Vorderseite glatt und wenig elastisch ist, so dass sie kaum gedehnt werden kann. Wenn der Elastfinger nun mit Druckluft angesprochen wird, tritt aufgrund der verschiedenen Dehnung eine Biegung der Finger in Richtung der glatten Seite auf. Dieses Prinzip könnte anstatt den Zylinder eingesetzt werden. Einerseits als bewegendes Element anderseits wiederrum durch messung des Durchflusses als Sensoreinheit. Wobei diese Variante wahrscheindlich die Ungenaueste ist.

Eine weitere Möglichkeit wäre die verwendung von Dehnmesstreifen…. es sind in diesen Bezug noch einige Dinge durchzudenken und zu recherchieren… auch die Verwendung von Motoren zum bewegen der Fingerelemente….

July 7, 2006

Peltierelemente funktionsweise

Filed under: Microcontroller/Sensorik, Uncategorized — roman @ 7:05 am

Benannt nach von Jean Peltier 1834 (französischer Uhrenmacher) entdeckten Effekt, dass bei Stromdurchgang an der Kontaktstelle zweier verschiedener Metalle eine Temperaturabsenkung gegenüber der Umgebungsluft festzustellen ist.
Ein Peltierelement besteht aus mehreren kleinen Quader je aus p- und n- dotieretm Halbleitermaterial, die abwechseln oben und unten durch Metallbrücken miteinander verbunden sind. So ergeben die unterschiedlichen Quader miteinander eine Serienschaltung. Der zugeführte elektrische Strom durchfließt alle Quader nacheinander. Abhänging von der Stromstärke kühlen sich die Verbindungsstellen an einer Seite ab, während sich die auf der anderen Seite erwärmen. Dabei wird die Wärmeenergie von der kalten auf die warme Seite gepumpt. Durch Stromumpolung läßt sich die Richtung des Wärmeflusses umkehren. Die Temperaturdifferenz zweischen den beiden Seiten kann, je nach Element und Strom, bei einstufigen Elementen bis ca. 65 Kelvin betragen.
Umgekehrt ist es auch möglich, durch Herstellung einer Temperaturdifferenz zwischen den beiden Seiten eines Elementes elektrischen Strom zu erzeugen.

July 4, 2006

Aufhängung im Raum bzw. alternative zum Beschleunigungssensor

Filed under: Interface Design, Uncategorized — roman @ 4:35 pm

Aufhaengung für 3d-Handschuh
Die Konstruktion besteht aus drei Ringen, die über Seilen im Raum gehängt werden. Diese Seile sind gespannte Stahlseile, die über vorgespannte Feder aufgerollt werden. Ihre Aubgabe besteht einerseits darin die Konstruktion im Raum zu halten, andererseits die Bewegung in x, y, und z -Achse zu regestrieren. Das geschieht auf dem Prinzip der Triangulation - dabei werden die Entfernungen von drei verschiedenen Punkten im Raum zu einen bestimmten Punkt gemessen, und dadurch die position bestimmt. Diese Technik wird meistens mit elektromagnetischen Wellen angewandt, wo die Zeit gemessen wird. In diesen Fall kann ich die Entfernungsmessung direkt über die gespannten Stahlseile abnehmen, indem ich winkeländerungen über drehpotentiometer von den drehachse der Rollenaufwicklungen der einzlenen Seile abnehme, und dadurch die Längenänderung rückrechne. Damit wäre einmal die Position der Ringe im Raum bestimmt. Der Ring besteht wie schon erwähnt aus drei Ringen. Der äußerste Ring ist mit dem mittleren Ring über eine Drehachse in der x-Richtung verbunden, und der mittlere Ring ist mit dem inneren Ring mit einer Drehachse in der y-Achse verbunden. Damit kann ich diese Drehbewegungen ebenfalls über einfache Potentiometer bestimmen. Der innerste Ring besteht eigentlich aus zwei Ringen. Diese beiden Ringe können sich ineinander in der z - Achse drehen, wie z.B normale Kugellager. Damit kann ich mit dieser Konstruktion die Position in x,y,und z Richtung bestimmen, und darüber hinaus durch die anordnung der Ringe, die Drehbewegungen in x,y und z Achse. Das sind alle 6 Freiheitsgrade die benötigt werden um einen Punkt und deren Ausrichtung im Raum zu bestimmen. Diese Konstruktion könnte als Positionsbestimmung verwendet werden, oder wenn ich mit Beschleunigungssensoren arbeite, als einfache Aufhängung, um aus der geplanten “Handschuh” eine Rauminstallation zu machen. Verbunden ist die Hand mit der Konstruktion mit einer Schelle, die unterhalb des Handgelenks liegt. Sie besteht aus zwei Halbschalen, und wird beim schließen leicht an die Hand angepresst.
Aufhaengung für 3d-Handschuh2

Aufhaengung für 3d-Handschuh3

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.

May 17, 2006

physik engine zur kollisionserkennung in 3d

Filed under: 3D-Objekt/OpenGL, Softwaredesign, Uncategorized — roman @ 11:19 am

ich entschied mich für die newton physic engine / version 1.52 / gibt es für mac linux u. pc
(freie bibliothek) newton physic engine ist aufgebaut auf OpenGL und enthält eine kollision detection (ideal für mein projekt). -> www.newtondynamics.com

-probleme beim einbinden am mac mit Xcode 2.1:
- newton 1.52 graucht gcc 4.x (bei mac ab XCode 2.x)
-fehlermeldung: error:’size_t’ has not been declared Newton.h:93
error:’size_t’ has not been declared Newton.h:92

typedef void (*NewtonSerialize) (void* serializeHandle, const void* buffer, size_t size);
typedef void (*NewtonDeserialize) (void* serializeHandle, void* buffer, size_t size);

size_t ist eine standart deklarierte variable die für speicherplatzreservierung verwendet wird. sie ist im stddef.h deklariert. Da ich ohne prefixheader arbeite in der diese includiert ist, muss sie in newton.h mit #include eingebunden werden.

-fehlermeldung: ZeroLink: unknown symbol ‘_hightMap_debugCount’
thermobject_C++_v2-1c has exited due to signal 6 (SIGABRT).

hightMap_debugCount ist im common/HeightFieldCollision.cpp declariert : extern dInt32 hightMap_debugCount; das problem hier ist, dass XCode das sogenannte ZeroLink verwendet. ZeroLink (näheres in XCode-Help) dient zum schnellen entwickeln von Programmen. Es legt bei Mehrdateien-Programme objekt-files an *.o, die miteinander wärend der Laufzeit verlinkt werden. Dadurch wird in einen Projekt immer nur die Code-Datei compiliert, die geändert wurde.Es mussen nicht immer die gesamten Datein des ganzen Projektes compilieren werden. ZeroLink unterstützt aber nicht die verwendung von privaten externen symbolen. privat externe symbole sind nur sichtbar in modulen, die das selbe Mach-O file besitzen. darum muss man in

Projekt->Edit Projekt Setting -> Build -> Other Linker Flags -> -no-run-initializers-before-main

eingeben. Dann wird nach statischen initilaisierunge in allen objekt-file’s gesucht, und verlinkt bevor die main-funktion aufgerufen wird.

Next Page »