PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen : Rotationsmatrix zwischen zwei 3D-systems ?



HBhannover
30.03.2011, 10:30
Hallo Leute ,

Ich hab einer Roboter mit 3D-Scanner dabei . Am Anfang der Fahrt bleibt er im Koordinaten (x0,y0,z0) und im Zeitpunkt t1 bleibt er bei (x1,y1,z1) mit Punkt-wolke-1 und im Zeitpunkt t2 (hier ist aktuelle Position) bleibt er bei (x2,y2,z2) mit Punkt-wolke-2 . Der roboter hat eine sogenannte Odometrie, mit der der Roboter immer weisst, wo er jetzt steht.

das heisst: x1,y1,z1,x2,y2,z2 durch Odometrie immer schon klar. alle werden in der Beziehung mit (x0,y0,z0) gerechnet. und die Winkeln von beide (x1,y1,z1)(x2,y2,z2)in der Beziehung mit (x0,y0,z0) auch klar.

So .... http://www.c-plusplus.de/forum/images/smiles/eek.gif Ich muss jetzt Punkt-wolke-1 im Koordinatensystem (x2,y2,z2) darstellen ! dass heisst: ich muss suche einen Matrix ,damit kann ich alle Punkte in Punkt-wolke-1 bei dem Koordinatensystem (x2,y2,z2) bringen .Vorsicht: die Winkel-verschiebung schon gewusst!!!

hat jemand hier eine wertvolle Idee für mich ??? :(

GeoBot
30.03.2011, 11:49
Hallo

Ich nehme an du möchtest beide Punktwolken (zwei Datensätze) in einen Datensatz zusammenführen?

Da benötigst du neben dem jeweiligen Ursprung Xx, Yy, Zz noch die Orientierung des Scanners bei den beiden Messungen.

Kannst du die Orientierung bestimmen?

Grüße GeoBot

Günter49
30.03.2011, 12:36
Eine ganz gute Erklärung mit Transformationsmatrizen findest Du hier:
http://www.slidefinder.net/t/transformations_brian_romsek_senior_student/24122149
(mit Downloadmöglichkeit der PowerPoint-Datei)


Der roboter hat eine sogenannte Odometrie, mit der der Roboter immer weisst, wo er jetzt steht.

Diese Annahme ist ein bisschen optimistisch, da Odometrie leicht zu Fehlern (z.B. durch Schlupf) führt, so dass nach einem etwas längeren Weg die Odometriedaten nicht mehr mit dem wirklichen Kurs übereinstimmen.

Gruß, Günter

HBhannover
30.03.2011, 13:02
Hi GeoBot




Ich nehme an du möchtest beide Punktwolken (zwei Datensätze) in einen Datensatz zusammenführen?


ja klar ! und die Orientierung wird in jeder Position (wo der Roboter steht) durch Odometrie bestimmen (in der Beziehung mit globale Position (x0,y0,z0). und zwar : in der Position (x2,y2,z2) hat der Roboter die Winkelverschiebungen (Delta-phi ,Delta-psi,Delta-rho) im Vergleich mit Position (x0,y0,z0) )

Jetzt muss ich die Punktwolke von der Position(x1,y1,z1) in der aktueller Position(x2,y2,z2) darstellen .

HBhannover
30.03.2011, 13:14
Danke Günter49 ! du hast recht :
*** Mit Odometrie bekommen wir die Verzerrung von 3d-laserscann-daten, weil der Roboter fährt wenn der Scanner aufnimmt , also eine Verschiebung . Oder Schlupf wie du gesagt
*** Und im Laufe der Fahrt , wenn der Weg schon zu weit von (x0,y0,z0) dann die Verschiebung immer grösser , das ist schlecht !

Aber ..na ja ! das ist billig ^^ und ich bin jetzt schon "auf dem Weg" kann nicht mehr zurück gehen ^^

Danke dir für die Schleife , jetzt lese ich , und hoffe , dass ich einen optimalen Matrix für die Transformation Punktwolke1 nach Punktwolke2 finden kann. :)

HBhannover
30.03.2011, 14:32
Hi Grünter49 ,

Ich hab diese Schleife gelesen . aber ab seite 14 kann ich nicht mehr verstehen:

- In Schleife 14 bekommen wir eine allgemeine Transformation zwischen 2 Koordinaten (ist das richtig ?) dann woher bekommen wir faktor s und auch wie werden R12 ,R13,R23 bei Seite 13 im matrix R gerechnet ? kennst du das ???

Günter49
30.03.2011, 16:48
@HBhannover

Ich bin kein Spezialist für 3D-Transformationen und für Matrizenrechnung schon gar nicht, deshalb alles Folgende ohne Gewähr:

Ich gehe von folgenden Annahmen aus:
- Du verwendest ein rechtsdrehendes Koordinatensystem
(x-Achse in Fahrtrichtung des Roboters, y-Achse nach links, z-Achse nach oben)
- Dein Roboter bewegt sich auf einer Ebene (= die z-Werte ändern sich von einer Position zur nächsten nicht.
- Deinem Roboter sind folgende Bewegungungen möglich
a) Translation T = der Roboter verändert seine Position in der xy-Ebene;
b) Rotation R = Drehung um die z-Achse;
c) Skalierung s = es findet keine Skalierung = Änderung des Größenmaßstabs statt,
also: s =1

Damit musst Du meiner Meinung nach nur bis Seite 12 etwas verstehen, denn die Bursa-Wolf -Transformation behandelt spezielle Fälle der Umrechnung von Geodäsie-Daten, also von einer Landkarten-Projektion in eine andere. Es sei denn, Dein Roboter verwendet GPS.

Du willst die Daten von Position1 (x1,y1,z1) auf die Position2 (x2,y2,z3) transformieren.

Wenn Du die Winkelabweichung der x-Richtung von einer Position1 zur Position2 aus den Odometriedaten kennst, drehst Du mit einer Rotationsmatrix für die Drehung um die z-Achse (siehe Seite 8 ) die x-Achse der Pos1 bis sie mit der x-Achse von Pos2 übereinstimmt.
(Winkel kappa = Drehwinkel)

Zu den nun gedrehten Werten addierst Du nun die Translationswerte Tx,Ty,Tz
Tx = x2-x1, Ty = y2-y1, Tz =0, da der Roboter in einer Ebene fährt.

In C# sieht das dann beispielsweise so aus:

x2 = x1 * Math.Cos(kappa) + y1 * Math.Sin(kappa) + tx2);
y2 = x1 * (-Math.Sin(kappa)) + y1 * Math.Cos(kappa) + ty2);
z2 = z1;

Viel Erfolg,
Günter

GeoBot
31.03.2011, 12:33
Da war ich gestern nicht ganz auf der Spur.

Um die Verschiebung und die Rotation zusammenzufassen bedient man sich der homogenen Transformation. Die bietet auch elegant die Möglichkeit auch mehrere Operationen zusammenzufassen.

Ich nehme mal diese Folien.

http://www.informatik.hs-mannheim.de/~ihme/robotik_2004ws/05_Transformationen.pdf (http://www.informatik.hs-mannheim.de/%7Eihme/robotik_2004ws/05_Transformationen.pdf)

Fangen wir mit Folie 32 zweiter Punkt an. Dort findet sich die Gleichung welche die Koordinatenwerte zwischen zwei unterschiedlichen Koordinatensystemen transformiert.

T(A,B) eine 4X4 Matrix, besteht aus der Rotationsmatrix R und dem Verschiebungsvektor T und einer 4 ten Zeile mit 0,0,0,1

Die Bedeutung der letzten Zeile von T(A,B) findet sich auf Folie 29.

Um vom Koordinatensystem K1 (x1,y1,z1) zum Koordinatensystem K2 (x2,y2,z2)
zu kommen, must du zuerst ins Koordinatensystem K0 (x0,y0,z0) und von da aus ins Koordinatensystem K2.

Das heißt du brauchst eine Matrix T(K1->K0) und eine weitere T(K0->K2). Diese lassen
sich mit den vorhandenen Daten und den Folien 20-22 erstellen.

Wenn du direkt von K1 nach K2 möchtest, multiplizerst du die beiden Matritzen und erhältst die die Matrix T(K1->K2) = T(K0->K2) * T(K1->K0) für die Gleichung auf
Folie 32.

Auf Folie 33 ist unten gezeigt wie die multiplizierte Matrix zusammengesetzt ist.

Hoffentlich hilft das weiter.

Wenn du mehrere Scanns nacheinander machst und diese zusammenführen möchtest, würde ich die Daten nur nach K0 transformieren und dort alle weiteren Berechnungen machen. Anschließend nur die benötigeten Daten ins aktuelle Koordinatensystem Kx
transformieren. Sonst rechnet man sich zum Schluss zu Tode.

HBhannover
01.04.2011, 12:34
@ Grünter49 UND GeoBot :

Danke euch !!!

Ich hab noch mal ganz genau lesen über Bursa-Wolf -Transformation und die Schleife von GeoBot ! dann erkenne ich mich : also bei Bursa-Wolf -Transformation mit s=1 dann haben wir die gleiche Verfahren mit der Verfahren bei der Schleife von GeoBot !!!

Was heisst it das ? --> Das heisst wir haben schon die richtige Verfahren (oder richtigen Weg) zur Lösung ! und ich hab gemacht ! aber leider treffe ich mich noch ein Problem, und Zwar :

nachdem die Punktwolke von Position1 nach Position2 transportiert wurde , steht die Punkwolke1 klar in der Beziehung mit Koordinatensystem K2 (x2,y2,z2) aber fast senkrecht gegenüber Punktwolke2 .

dann ich überlege so : vielleicht bei Transformationmatrix habe ich die Drehwinkeln nicht richtig gerechnet !!! aber wie soll ich jetzt korriegieren ??? um die Drehwinkeln für 3 Achsen so genau wie die Winkeln wird gegeben durch Odometrie ???

@Grünter49 : meiner Roboter läuft auf dem boden aber nicht flach ! also deshalb muss ich um 3 Achsen drehen , nicht nur um z-achse

soweit danke ich euch :)

Günter49
01.04.2011, 13:19
Hast Du mal den negativen Drehwinkel probiert: Wenn Koordinatensystem 1 gegen K2 um 30° gedreht ist, musst Du für die Transformation um -30° drehen, damit die Achsen die gleiche Ausrichtung haben.

Gruß, Günter

GeoBot
02.04.2011, 09:04
Was mir da gerne passiert ist dass ich vergesse die Winkel in die richtige Einheit umzurechnen. Grad oder Gon in Rad?

HBhannover
13.04.2011, 09:59
Hi Leute !!!

Endlich habe ich meine Arbeit fertig gemacht ! Danke euch viel-mal für die hilfreiche Diskussion !
(Falls Jemand braucht etwas für Rotationsmatrix in 3D ,kann auch bei mir einige Unterlagen bekommen )