LabVIEWForum.de
3D Cartesian Coordinate Rotation - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: 3D Cartesian Coordinate Rotation (/Thread-3D-Cartesian-Coordinate-Rotation)



3D Cartesian Coordinate Rotation - jak888 - 03.12.2010 20:55

Hallo,

ich entwickle zur Zeit einen 3D-Sensor. Der Sensor besteht aus einem 3-Achs Drehratensensor und einem 3-Achse-Beschleunigungssensor.
Ich habe das ganze so aufgezogen, dass es 2 Koordinatensysteme gibt: Eins das relativ zum Sensor liegt und eines, welches den realen Raum darstellt. Zu Beginn des Programms wird anhand der Erdbeschleunigung die Nulllage des Sensors ausgerechnet. Dies funktioniert ganz gut, die Achsen werden (soweit man das beurteilen kann) richtig berechnet.
Den Sensor habe ich als Objekt definiert, welches aus 3 Arrays besteht, die die jeweiligen Koordinaten bezüglich des Realsystems beinhalten. (siehe Bild)
[attachment=31036]
Nun soll mit jedem Schleifendurchlauf die Sensorlage korrigiert werden. Hierzu verwende ich das "3D-Cartesian-Coordinate-Rotation (Euler)(Array)" VI.
Folgendes Bild zeigt die entsprechende Methode:
[attachment=31037]

Ich übergebe je ein Array[3] mit den jeweiligen Koordinaten einer Achse meines Sensorkoordinatensystems.

Nun ist es allerdings so, dass das VI keine wirklich sinnvollen Ergebnisse liefert. Das Koordinatensystem welches zu Beginn des Programms errechnet wird passt soweit. Sobald das VI aber einmal durchgelaufen ist, werden die Koordinaten der X-Achse umgedreht, so dass die X-Achse jetzt in z richtung zeigt. die anderen beiden Achsen werden nicht verändert.

Hat jemand schon einmal mit diesem VI gearbeitet und kann mir sagen, was ich falsch mache? Bin für jede Hilfe dankbar.

Edit: Ich sollte vielleicht noch erwähnen, dass die Winkel richtig übergeben werden.


3D Cartesian Coordinate Rotation - jak888 - 04.12.2010 10:54

OK: Kaum macht mans richtig gehts. Ich hatte (siehe bild) die ausgänge alle auf X' gelegt...
jetzt scheints einigermaßen zu gehn.


3D Cartesian Coordinate Rotation - Y-P - 04.12.2010 12:04

Danke für die Rückmeldung. Top2

Gruß Markus


3D Cartesian Coordinate Rotation - jak888 - 05.12.2010 20:13

Aaaaargh....

Mir ist gerade aufgefallen, dass das VI keine Drehung um die y-Achse unterstützt... Kann mir mal jemand erklären, was das soll? der Sinn davon erschließt sich mir nämlich gerade nicht wirklich...

Jetzt werd ich das wohl von Hand machen müssen, was bedeutet, dass ich die Drehmatrizen erstellen muss. Kann mir bitte jemand erklären, wie ich Matrizen erstellen kann?

Wenn ich beispielsweise die Matrix:

|123|
|456|
|789|

erstellen will, wie sieht dann der entsprechende Code in LabVIEW aus? Ich werd aus der LabVIEW Hilfe auch nicht schlauer...


3D Cartesian Coordinate Rotation - jak888 - 05.12.2010 22:32

[attachment=31058]

habs inzwischen selbst rausgefunden.
Vorher hatte ich das problem, dass die Matrizen laut fehlermeldung nicht initialisiert waren. Jetzt gehts.


3D Cartesian Coordinate Rotation - unicorn - 06.12.2010 09:22

' schrieb:..
Mir ist gerade aufgefallen, dass das VI keine Drehung um die y-Achse unterstützt... Kann mir mal jemand erklären, was das soll? der Sinn davon erschließt sich mir nämlich gerade nicht wirklich.
..

Drehung um die x-Achse auch nicht...
Sieh dir die Hilfe noch mal an. Es nutzt Euler Drehungtheorie. Drehung erfolgt in drei Schritten z, x' und z'-Achse (vielleicht noch mal die Kekskrümel und Staubflocken vom Monitor wischenWink). Die Eulerwinkel sind nicht, dass was man als Ottonormalverbraucher erwartet. Mehr kann ich Dir aber nicht zu Eulers Theorie der Drehungen sagen.

Um aus dem Fehlercode einen Error-Cluster zu machen solltest du vielleicht das Error Cluster From Error Code VI benutzen oder zumindest noch den Fehlerzustand auf TRUE setzen.


3D Cartesian Coordinate Rotation - jak888 - 06.12.2010 11:11

' schrieb:Um aus dem Fehlercode einen Error-Cluster zu machen solltest du vielleicht das Error Cluster From Error Code VI benutzen oder zumindest noch den Fehlerzustand auf TRUE setzen.

Danke für den Hinweis. Das ist mir schon aufgefallen und ich habs entsprechend geändert.

Mir ist schon aufgefallen, dass die Drehung in 3 Schritten erfolgt. Wie kann ich die Drehung anhand der 3 Drehraten, die mir der Sensor liefert realisieren? Also Winkel um x, y und z.
Kann ich für kleine Winkel die Bewegung als Folge von 3 Drehungen sehen und dann 3 Mal mit den entsprechenden Drehmatrizen drehen? Einmal für x, einmal für y und einmal für z?


3D Cartesian Coordinate Rotation - unicorn - 06.12.2010 13:27

Drehungen im Dreidimensionalen sind nicht kommutativ. Die Reihenfolge spielt also eine Rolle.

Bei Deinen Fragen kann ich Dir aus dem Kopf nicht mehr weiterhelfen. Ich denke, hier solltest Du Fachbücher zu rate ziehen.


3D Cartesian Coordinate Rotation - jak888 - 06.12.2010 16:03

Mmmh... OK... Die Arbeit geht ja nächstes Semester weiter. Dann schau ich da noch einmal exakter rein. Ich hatte jetzt vom Gefühl her gedacht, dass die Drehungen im 3Dimensionalen zumindest für kleine Winkel kommutativ sind.

Ich werd wohl nächstes Semester entweder eine Herleitung machen müssen, wie ich die Drehung in Drehung mit Eulerwinkeln umrechne oder eine andere Möglichkeit finden.

Fällt dir spontan ein Buch ein, welches das Thema abdeckt? Außer bei Lothar (Papula) würde mir gerade nicht einfallen, wo ich suchen sollte.


3D Cartesian Coordinate Rotation - unicorn - 06.12.2010 16:44

Nein, Literatur habe ich keine dazu. Eventuell findet man dazu auch was mittels Google. Zumindest Eulers Drehungstheorie sollte kein Problem sein. Ansonsten würde ich nach einem Buch über Sensorik suchen.