Koordinatentransformation (Rotation und Translation)

Neue Frage »

Opti5 Auf diesen Beitrag antworten »
Koordinatentransformation (Rotation und Translation)
Hallo zusammen,

da ich jetzt schon seit einigen Tage recherchiere und keine Lösung für meinen Praxisfall finde versuche ich es jetzt einfach mal hier. Vielleicht werden einige hier von der Einfachheit der Aufgabe lachend vom Stuhl fallen aber egal smile

Ich positioniere einen Roboterarm mit einer Kamera auf der Position X, Y, Z. Die Ausrichtung der Kamera besitzt den Einheitsvektor I, J, K. Nach der Kontrolle der Kameraausrichtung zeigt sich aber, dass die Kamera nicht exakt auf I, J, K steht sondern eben auf I´, J´, K´. Damit kommen wir zur ersten Frage:
Wie kann ich jetzt die Kameraausrichtung verbessern? Also welche Werte muss ich meinem Roboter geben, damit er am Ende richtig ausgerichtet ist?

Mein Ansatz dazu war, dass ich einfach J´ - J und K´- K berechnet habe und bei I eben gesagt habe die Summe muss 1 ergeben. Also mit Rechenbeispiel:



Kann ich das so machen? In meiner Logik macht das ganze Sinn aber ist das auch richtig?

Im nächsten Schritt besitzt die Kamera aufgrund des Objektivs noch ein Offset bzw. also eine Translation in X,Y,Z. Dadurch, dass sich aber das gesamte Koordinatensystem aufgrund der neuen Kameraausrichtung geändert hat muss ich den Offsetvektor mit rotieren. Die Rotationsmatrizen zum Drehen des Vektors sind mir bekannt. Aber hierfür benötige ich die Drehwinkel um die Koordinatenachsen. Wie bekomme ich jetzt die Drehwinkel aus dem neuen Einheitsvektor? Mein Lösungsansatz wäre das Skalarprodukt mit den Koordinatenachsen.

Hier mal die Beispielrechnung für den Rotationswinkel um die Y-Achse:



Nachdem ich die Rotationswinkel bestimmt habe setze ich diese in meine Rotationsmatrizen ein und berechne meinen neuen Offsetvektor. Diesen Offsetvektor verrechne ich mit der vorgegebenen Position und fertig.

Bei dem ganzen handelt es sich um ein privates Projekt und ich habe am Ende leider keinen Lehrer/Prof der mir sagen kann, ob das richtig oder falsch ist. Wäre cool wenn jemand mit Ahnung hat sich das mal anschauen könnte smile vielen Dank smile
hawe Auf diesen Beitrag antworten »

Um mal was zum Thema zu sagen.
Ich steige bereits bei

>"Die Ausrichtung der Kamera besitzt den Einheitsvektor I, J, K."<

aus. Der Roboterarm bewegt sich in seinem KO-System ok und wenn er die Kamera mit nimmt dann ist die Kameraposition eine Verschiebung (Translation) und was genau beschreibt das, was Du Einheitsvektor nennst. Wie kommt zu dem Einheitsvektor' ?

Man könnte Dein Projekt ggf. simulieren z.B.
https://www.geogebra.org/m/xnsfd2mb
Ulrich Ruhnau Auf diesen Beitrag antworten »

@Opti5

Schau doch mal nach unter viewing transformation matrix !
Solche - Matrizen haben unter Open GL eine besondere Bedeutung. Man kann sowohl Translationen als auch Drehungen durch die Multiplikation mit einer Matrix ausdrücken. Da solltest Du dich mal einlesen.
Opti5 Auf diesen Beitrag antworten »

Erstmal danke für eure Antworten smile

@HW:
Kann gut sein, dass ich vielleicht die falschen Fachbegriffe verwendet habe. Ich versuche es nochmal zu erklären. Ich Stell die Kamera auf irgendeine Position in einem 3D-Koordinatensystem also vielleicht x=100, y=100, z=100. Diese Position ist aber erstmal egal. Wichtig ist, dass ich dem Roboter in dieser Position auch eine Richtung mitgeben. Also er stellt sich nicht nur auf diese Position (X, Y, Z) sondern auch in eine Richtung, welche mittels eines Einheitsvektors vorgegeben wird. Dieser Einheitsvektor (I, J, K) ist die Blickachse der Kamera.

Jetzt schaut die Kamera auf ein Prüfbild und stellt fest. Ich stehe nicht richtig und die Blickachse der Kamera beträgt aktuell (I', J', K'). Also habe ich zwischen Prüfbild und Roboter einen Fehler. Jetzt muss ich also die Richtung (also den Einheitsvektor) die ich beim Roboter einstelle verbessern. Roboter und Prüdbild reden ja nicht miteinander.

Das mit der Translation ist dann erstmal der zweite Schritt aber wäre ja schon froh, wenn der erste mal stimmen würde smile

Das mit der Simulation schau ich mir an aber sieht komplexer aus als ich mir die ganze Sache gerade vorstelle. Für mich habe ich gerade nur einen Punkt im Raum und zwei Achsen.

@Ulrich
Ich glaube das könnte mir im zweiten Schritt helfen. Allerdings weiß ich ja immer noch nicht wie ich rotieren muss.
hawe Auf diesen Beitrag antworten »

OK,

dann wäre meine nächste Frage auf welches KO bezieht sich dieser, sagen wir v, v=(I,J,K) Vektor und warum für die Korrektur die Summe eine Rolle spielt - mir wäre es wichtig den Vektor korekt auszurichten - ihn auf eine Länge von 1 zu normieren ist ein nachzuschaltender Schritt.

Ist es evtl. so, dass die Fehlstellung auf einem Zielpunkt v' (Koordinaten (I',J',K')) abgelesen wird und Du keinen Vektor hast, sondern eine Zielpunktdifferenz (Koordinatendifferenz)?

Das Simulations-Beispiel hab nur angefügt damit Du sehen kannst , daß man ggf. Deine Problematik mit der App darstellen könnte.
Ulrich weist vermutlich auf das Konzept der homogenen Koordinaten hin. Würd ich erstmal hinten anstellen. Kann Dir aber auch ein praktische Beispiel mit dieser App geben....
Opti5 Auf diesen Beitrag antworten »

Also alles findet im selben Koordinatensystem statt. Die Bezeichnung I, J, K bezieht sich immer auf einen Richtungsvektor und keine Position (X, Y, Z). Die verwendete Software transformiert den eingegeben Richtungsvektor immer auf die Länge 1 also einen Einheitsvektor.

Es gibt jetzt keine direkten Zielkoordinaten, da die Kamera mehr oder weniger ins unendliche schaut. Ich könnte jetzt nur sagen, dass ich zum Beispiel sage, dass ich bei x=100 eine Z/Y-Ebene aufspanne und die Position auf dieser Ebene berechne. Die Kamera schaut ja hauptsächlich in X-Richtung.

Aber jetzt hab ich mir gestern Abend überlegt, dass ich vielleicht zu kompliziert denke? Ich habe ja zwei Richtungsvektoren. Richtungsvektor r(Vorgabe) welcher der Vorgabe entspricht und den ich bei meinem Roboter r(Vorgabe) = r(Roboter) eingebe. Dann hab ich den Richtungsvektor r(Kamera) den mir die Kamera zurück gibt und leider nicht mit r(Vorgabe) übereinstimmt. Jetzt muss ich also r(Roboter) verbessern, damit r(Kamera) = r(Vorgabe) entspricht. Also kann ich einfach aus beidem ein Delta bilden und das auf r(Roboter) draufrechnen?

r(Roboter) = r(Vorgabe) + ( r(Vorgabe) - r(Kamera) )

Die Länge von r(Roboter) entspricht dann aber nicht mehr 1. Kann das richtig sein?
 
 
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »