Benutzer-Werkzeuge

Webseiten-Werkzeuge


modellingcomponents:elements:angles:eulercardanangles

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modellingcomponents:elements:angles:eulercardanangles [2014/12/14 09:43] olivermodellingcomponents:elements:angles:eulercardanangles [2021/11/22 15:42] (aktuell) – [Euler/Cardan Angles] oliver
Zeile 1: Zeile 1:
 ===== Euler/Cardan Angles ===== ===== Euler/Cardan Angles =====
 +Euler angles define the sequence of three rotation angles, where the first and the last are around the same but rotated axis. A triple of rotation angles is called Cardan angles, if each rotation is around a different axis, where all three axes are orthogonal.
 ==== Configuration ==== ==== Configuration ====
-^ Attribute ^ Default ^ Description ^ Required+^ Attribute ^ Default ^ Description ^ Required ^
 ^ name |            | name of element |  Yes  | ^ name |            | name of element |  Yes  |
 ^ parentCoordinateSystem | | (or deprecated name basisCoordinateSystem) |  Yes  | ^ parentCoordinateSystem | | (or deprecated name basisCoordinateSystem) |  Yes  |
 ^ childCoordinateSystem | | (or deprecated name movingCoordinateSystem) |   Yes   | ^ childCoordinateSystem | | (or deprecated name movingCoordinateSystem) |   Yes   |
-^ orientation (axis order, rotationOrder) | xyz | This attribute can be set to a token, which defines the order in which the rotations are executed. To rotate a coordinate system from orientation 1 to orientation 2 with the Euler/Cardan convention there are twelve possible sets of euler/cardan rotation orders. The token determines which axis of the "parentCoordinateSystem" is taken as primary (flexion) axis, and which the secondary (abduction) axis. |   No   |+^ orientation | xyz | This attribute defines the so called axis order or rotationOrder. It can be set to a token, which defines the orderin which the rotations are executed. To rotate a coordinate system from orientation 1 to orientation 2 with the Euler/Cardan conventionthere are twelve possible sets of euler/cardan rotation orders. The token determineswhich axis of the "parentCoordinateSystem" is taken as primary (flexion) axis, and which the secondary (abduction) axis. |   No   |
 ^ threshold | | Genauigkeit in dessen Schranken Rotations-Matrizen orthonormiert werden. Eigentlich nur relevant bei der Verwendung der "Mantissa"-Implementierung. |  No  |  ^ threshold | | Genauigkeit in dessen Schranken Rotations-Matrizen orthonormiert werden. Eigentlich nur relevant bei der Verwendung der "Mantissa"-Implementierung. |  No  | 
 ^ method | auto | **auto:** solution of the euler/cardan angles with the second rotation angle between 0 and pi (euler) or -pi/2 and pi/2 (cardanic).\\ **first10frames:** BodyBuilder nimmt die ersten 10 Frames und wählt dann die Lösung mit dem kleineren 2. Drehwinkel.\\ **fix1** bzw. **fix2:** Es wird fix immer nur eine der beiden möglichen Lösungen rausgeschrieben.\\ **framebased:** frame für frame wird entschieden welche Lösungen verwendet wird, sodass der 2. Drehwinkel der kleinere bleibt.\\ **trialbased:** Beim Wechsel der Halbkugel wird die Lösung gewechselt damit die Winkel stetig bleiben. Vielleicht brauche ich dann noch ein weiteres Attribut: condition. Das erste durch condition definierte Intervall legt fest welche Lösung verwendet werden soll. Der Rest wird dann konsistent gehalten. Problem: Die Winkel können nicht mehr Schritt für Schritt, sondern erst mit postprocess() bestimmt werden ... Wenn method="trialbased" und condition fehlt, dann könnte ich die BodyBuilder Methoden verwenden. |  No  | ^ method | auto | **auto:** solution of the euler/cardan angles with the second rotation angle between 0 and pi (euler) or -pi/2 and pi/2 (cardanic).\\ **first10frames:** BodyBuilder nimmt die ersten 10 Frames und wählt dann die Lösung mit dem kleineren 2. Drehwinkel.\\ **fix1** bzw. **fix2:** Es wird fix immer nur eine der beiden möglichen Lösungen rausgeschrieben.\\ **framebased:** frame für frame wird entschieden welche Lösungen verwendet wird, sodass der 2. Drehwinkel der kleinere bleibt.\\ **trialbased:** Beim Wechsel der Halbkugel wird die Lösung gewechselt damit die Winkel stetig bleiben. Vielleicht brauche ich dann noch ein weiteres Attribut: condition. Das erste durch condition definierte Intervall legt fest welche Lösung verwendet werden soll. Der Rest wird dann konsistent gehalten. Problem: Die Winkel können nicht mehr Schritt für Schritt, sondern erst mit postprocess() bestimmt werden ... Wenn method="trialbased" und condition fehlt, dann könnte ich die BodyBuilder Methoden verwenden. |  No  |
Zeile 14: Zeile 14:
 ==== Notes ==== ==== Notes ====
  
-The calculated cardan angles are given as a triple.\\ +The calculated cardan angles are given as a triple. Corresponding to the rotation-order the first value in the tripple is always the rotation angle about the axis the first rotation is around, the second value is the rotation angle about the second rotation is around and the last value is the rotation angle the third rotation es around.
-Corresponding to the rotation order the first value in the tripple is always the rotation angle about the axis the first rotation is around, the second value is the rotation angle about the second rotation is around and the last value is the rotation angle the third rotation es around.+
  
-The rotation from the "parentCoordinateSystem" to the "childCoordinateSystem" is expressed in angles about the axes of the moving "childCoordinateSystem". If you want to calculate angles around the fix axes of the "parentCoordinateSystem" you can simple revert  parent and child coordinate system and the sign of the resulting angles.+The rotation from the "parentCoordinateSystem" to the "childCoordinateSystem" is expressed in angles about the axes of the moving "childCoordinateSystem". If you want to calculate angles around the fix axes of the "parentCoordinateSystem" you can simple revert parent and child coordinate system and the sign of the resulting angles.
  
 Instead, Vicon-BodyBuilder calculates the angles around the fix axes of the parent coordinate system. Instead, Vicon-BodyBuilder calculates the angles around the fix axes of the parent coordinate system.
  
-The equations show that each rotation can be defined by two different values of the Cardan or Euler angles set. For example if Cardan angles are used, the rotation defined by the angles a1, a2 and a3 is the same as the rotation defined by the angles PI + a1, PI - a2 and PI + a3. The choice of the solution depends on the attribute method. Have a look at the following example:+The equations show that each rotation can be defined by two different value-triples of the Cardan or Euler angles parameterisation. For exampleif Cardan angles are used, the rotation defined by the angles a1, a2 and a3 is the same as the rotation defined by the angles PI + a1, PI - a2 and PI + a3. The choice of the solution depends on the attribute "method". Have a look at the following example:
  
 <code xml> <code xml>
   <!-- The first axis (x) shows to the front, the second (y) directs to left, the third (z) up -->   <!-- The first axis (x) shows to the front, the second (y) directs to left, the third (z) up -->
   <CoordinateSystem name="A"   <CoordinateSystem name="A"
-    Position="vec(0,0,0)" +                    Position="vec(0,0,0)" 
-    FirstAxis="vec(1,0,0)" +                    FirstAxis="vec(1,0,0)" 
-    DefiningVector="vec(0,0,1) +                    DefiningVector="vec(0,0,1) 
-    orientation="xyz"/>+                    orientation="xyz"/>
          
   <!-- The first axis (x) shows to the back, the second (y) directs to left, the third (z) down -->   <!-- The first axis (x) shows to the back, the second (y) directs to left, the third (z) down -->
   <CoordinateSystem name="B"   <CoordinateSystem name="B"
-    Position="vec(0,0,0) +                    Position="vec(0,0,0) 
-    FirstAxis="vec(-1,0,0)" +                    FirstAxis="vec(-1,0,0)" 
-    DefiningVector="vec(0,0,-1)" +                    DefiningVector="vec(0,0,-1)" 
-    orientation="xyz"/>+                    orientation="xyz"/>
          
   <EulerCardanAngles name="AB"   <EulerCardanAngles name="AB"
-    parentCoordinateSystem="A" +                     parentCoordinateSystem="A" 
-    childCoordinateSystem="B" +                     childCoordinateSystem="B" 
-    decompositionOrder="yxz"/>+                     decompositionOrder="yxz"/>
 </code> </code>
-In principle there exists two solution to rotation coordinate system A into B:+In principle there exists two possibilities to rotate coordinate system A into B:
  
-With no further attributes set in the EulerCardanAngles element this results in the solutiuon [-180 0 -180]. But also the solution [180 0 0] is correct. You can get it by set of further attributes. +With no further attributes set in the EulerCardanAngles elementthis results in the solutiuon [-180 0 -180]. But also the solution [180 0 0] is correct. You can get it by setting additional attributes. 
  
 ==== Created trajectories and parameters ==== ==== Created trajectories and parameters ====
Zeile 54: Zeile 53:
 ^ MeanStd | double  | |  No  | ^ MeanStd | double  | |  No  |
  
-==== Examples ==== 
- 
-<code xml> 
-    <EulerCardanAngles name="A" 
-    parentCoordinateSystem="B" 
-    childCoordinateSystem="C"/> 
-</code> 
  
-ToDo: Schön wäre es wenn ich in der Nähe des GimbalLock eine entsprechende Phase erzeugen könnte. Dafür dann am besten ein zusätzliches Attribut einführen das definiert wann ich in der Nähe des Gimbal Locks bin, also z.B einen Winkelabstand in Grad z.B. 1 Grad ...  
  
modellingcomponents/elements/angles/eulercardanangles.1418546601.txt.gz · Zuletzt geändert: 2014/12/14 09:43 von oliver

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki