Mathe Koordinaten-Transformation

robert

Well-known member
ID: 18683
L
28 April 2006
551
101
Hallo,

folgendes Problem. Ein Sensor (S) liefert Raumkoordinaten (X,Y,Z). In der Ruheposition immer die gleichen Koordinaten unabhängig vom Standort (34,11,604). In der Ausgangsposition (rotes S) werden jetzt verschiedene Punkte aufgenommen, um u.a. eine Ebene (E1 - E3) aufzuspannen und dann Abstände zw. Punkt und Ebene zu berechnen etc.

Jetzt kann es vorkommen, dass die Position vom Sensor geändert wird (in x und y-Richtung) (schwarzes S) . Um jetzt nicht jedes Mal bei Positionsänderung die Ebene neu festlegen zu müssen, wollte ich die Koordinaten einfach umrechnen mit Hilfe eines Referenzpunktes (R).



Also einmal E1 bis E3 ermitteln sowie R, Sensor verschieben, R erneut ermitteln (->R') und dann alle weiteren Koordinaten umrechnen. Ich müsste also bspw. nach dem Verschieben und der Umrechnung für E1 bis E3 die gleichen Koordinaten erhalten wie vor dem Verschieben.

Folgendermaßen bin ich vorgegangen:
X - zu transformierende Koordinate (zum Test E1 bis E3)
X = {Xx,Xy,Xz}

Für die Referenzpunkte hab ich die Ortsvektoren r und r' erstellt um dann die verschiebung des Punktes zu erhalten.


Sodass ich dann einfach alle Punkte entsprechend verschiebe:

Xx = Xx + Rx - R'x
Xy = Xy + Ry - R'y
Xz = Xyz+ Rz - R'z

Aber das funktioniert nicht, d.h. wenn ich nach Verschiebung des Sensors die Koordinaten für E1 aufnehme ist das Ergebnis der Verschiebung nicht die Koordinate die vor dem Verschieben des Sensors E1 war.

Offentsichltich mache ich was falsch, aber ich hab noch nicht rausgefunden was...
 
Nabend!

Z' ist dein Verschiebevektor, oder?

Der Einfachheit halber sind jetzt alle fetten Großbuchstaben Vektoren, in die Komponenten werde ich nicht zerlegen, da faktisch ja sowieso überall das gleich steht.

Die Gleichungen
Xx = Xx + Rx - R'x
Xy = Xy + Ry - R'y
Xz = Xz+ Rz - R'z
gelten nur für R=R' da hast du dich irgendwo vertippt.

Wir haben R als Referenzpunkt, dann definiere ich mal den (gemessenen) Vektor von S nach R als R, das ist also r in deiner Zeichnung.

Der Vektor E ist der (gemessene) Vektor von S nach E. Indizes für E kannst du dann beliebig anhängen.

Der Vektor mit dem du - wenn ich dich richtig verstehe - weiter arbeiten möchtest ist der Vektor von R nach E, den nenne ich mal Er

Jetzt gilt Er = E - R (1)

Jetzt verschieben wir S um Z', damit ergibt sich ein neuer Vektor R' mit:
R' = R - Z' (2)

Außerdem ein neuer gemessener E' mit:
E' = E - Z' (3)

Deinen Verschiebevektor Z' kannst du jetzt einfach durch (2) zu
Z' = R-R'
bestimmen

Er' ist jetzt der neue "Arbeitsvektor", der ergibt sich aus (1) zu:
Er' = E' - R'
hier setzen wir (2) und (3) ein:
Er' = E - Z' - (R - Z')
Er' = E - Z' - R + Z'
Er' = E - R = Er

und damit das was du wolltest.

Habe ich dir damit geholfen? Sorry, aber ich konnte deinen Denkfehler nicht sehen, weil ich die drei Gleichungen nicht verstehen konnte. Wenn ich was falsch verstanden habe oder du nicht durchblickst, melde dich nochmal.

HTH,
sklemm
 
Danke erstmal für deine Hilfe ich werd mir morgen deinen Vorschlag genauer anschauen und mich ggf. nochmal melden.

Der Vektor mit dem du - wenn ich dich richtig verstehe - weiter arbeiten möchtest ist der Vektor von R nach E, den nenne ich mal Er

Genaugenommen will ich für jeden beliebigen gemessen Punkt die Koordinaten so umgerechnet, als hätte man den Sensor gar nicht verschoben. An den drei Punkten E1 bis E3 wollte ich dann konkret überprüfen, ob das Transformieren geglückt ist.
 
Genaugenommen will ich für jeden beliebigen gemessen Punkt die Koordinaten so umgerechnet, als hätte man den Sensor gar nicht verschoben. An den drei Punkten E1 bis E3 wollte ich dann konkret überprüfen, ob das Transformieren geglückt ist.

Ja, das funktioniert mit dem Weg, den ich versucht habe zu beschreiben, das ist dann der Spezialfall für R=S und damit R = 0 also (0,0,0).

Und damit E = E' + Z'.

Eine Überlegung ist es vielleicht wert R in den Koordinatenursprung zu legen, dann wird alles schön handlich und ganz einfach. Insgeheim machst du das ja schon indem du dem Punkt E eine Koordinate im Raum gibst.
 
Ich hab mal konkrete Werte:

E1: 662; -250; 72
E2: 632; 219; 72
E3: 405; -312; 72

R: 422; 873; 72

jetz wird S verschoben

R': 273; 1069; 72

Verschiebungsvektor wäre demnach:

Z' = R-R' = 149; -196; 0

Jetzt nehme ich wieder die Koordinaten von E1 auf:

E1': 642; -20; 72

Ich müsste jetzt wieder auf E1 = 662; -250; 72 kommen

Aber mit E1 = E1' + Z' = 791;-216;72 kommt das nicht hin...
 
Hi,

also die Rechnerei sieht für mich gut aus.

Bist Du sicher, dass der Sensor so arbeitet, wie wir uns das hier vorstellen?
 
Bist Du sicher, dass der Sensor so arbeitet, wie wir uns das hier vorstellen?

Wenn ich den Sensor verschiebe ist die Ruheposition immer wie eingangs beschrieben konstant. Die Angaben des Koordinatensystems sind in mm, relativ vom Sensor aus (X-Komponente von E3 mit 405 kleiner als E1 mit 662, da der Punkt näher am Sensor liegt etc.)

Dadurch wird das offensichtlich nicht so funktionieren...
 
Zuletzt bearbeitet:
Also ich blicke gar nicht mehr durch...
Hat der Sensor einen Namen? Gibt's dazu ein Datenblatt? Wie funktioniert das Teil denn eigentlich? Ultraschall, Licht, Radar? Wie ist denn dein Koordinatensystem definiert, wenn du nur von einem Punkt aus misst? Was ist jetzt die Ruheposition? Was genau bleibt denn jetzt konstant wenn du den Sensor verschiebst?
Fragen über Fragen... :-D
Von einem Punkt aus den kompletten umgebenden Raum vermessen ist ja jetzt auch kein Kinderspiel, das muss ja ein recht komplexer Apparat sein.
 
Es ist ein Messsarm (siehe Google-Bildersuche) und funktioniert mit Winkelsensoren um die Werte zu ermitteln. An dem Arm ist eine Messspitze, die man auf den Messpunkt bewegt und dann die Koordinaten abgreift. Datenblatt gibts da nicht wirklich dazu.

Mit "Ruheposition" meine ich die Ausgangslage (Arm zusammengeklappt). Das Teil wird wohl intern ein Koordinatensystem verwenden. Die Werte die man erhält sind immer relativ dazu (Z-Komponente der Messspitze im Ruhezustand 604, auf einem Tisch dann 72 aus meinem letzten Post).

Der Testaufbau, für die Werte die ich erst gepostet hab, entspricht in etwa der Skizze im ersten Post (nur E1 und E2 bzw. E1 und E3
 
Zuletzt bearbeitet:
OK, habe mir gerade nochmal deine Messwerte angesehen, wenn man sich R und R' anschaut, hast du S um 24,6cm verschoben, wenn man sich E1 und E1' anschaut, hast du S um 27,1cm verschoben. Das ist ein ziemlich krasser Messfehler von ~10%. Dazu würde dann noch kommen, dass dein Koordinatensystem verdreht zu dem des Messarms liegt.
Also irgendetwas stimmt hier gar nicht.

Versuche doch mal einen Punkt so zu setzen, das E= (100,0,72) ist. Jetzt verschiebe S mal um (-100,0,0) Jetzt sollte ein E'=(200,0,72) gemessen werden. Kommt das raus?
 
Versuche doch mal einen Punkt so zu setzen, das E= (100,0,72) ist. Jetzt verschiebe S mal um (-100,0,0) Jetzt sollte ein E'=(200,0,72) gemessen werden. Kommt das raus?

So genau und mit diesen Koordinaten bekomm ich das nicht hin (weil die Achsen hier der begrenzende Faktor sind). X=100 und Y=0 würde nur bei einem anderen Z funktionieren, dann wäre der Punkt aber in der Luft und es wird schwer den dann nach dem verschieben wieder zu treffen.

Ich hab jetzt mal den Referenzpunkt nähe an die Ebenenpunkte E1 bis E3 rangeholt (vorher lag er etwa 80 bis 90cm weit weg). Damit klammt die Umrechnung (zwar nicht 100% exakt, aber das schiebe ich jetzt mal darauf, dass ich die Punkte nicht 100%exakt angesteuert hab). Bewege ich den Referenzpunkt wieder weiter weg von dieser Ebene, dann klaffen die Verschiebugngsvektoren wieder auseinander und die Umrechnung scheitert.
 
Sag mal kann es sein, dass der Messarm einfach Mist misst? Ich denke nicht, dass wir mit deinem Messaufbau einen Fehler in der Mathematik entdeckt haben, d.h. entweder du misst deine Messpunkte nicht richtig ein, oder der Arm macht irgendwas falsch.
Es müssen ja auch nicht diese Werte sein Hauptsache du hast erstmal eine definierte Strecke, die parallel zu einer Achse des Koordinatensystems verläuft und wenn es nur 2 cm sind. Wenn du das ein mal für die X- und einmal für die Y-Achse hin bekommst wissen wir schon mal, dass die Koordinatensysteme die gleichen sind.
Du kannst ja auch mal einen Punkt E3 auf die gerade zwischen E1 und E2 legen, wenn du den jetzt misst, liefert der Arm dann vernünftige Ergebnisse?