.Modelica.Mechanics.MultiBody.Frames.axesRotationsAngles

Information

Syntax

angles = Frames.axesRotationsAngles(R, sequence, guessAngle1);

Description

A call to this function of the form

  Frames.Orientation R;
  parameter Integer sequence[3] = {1,2,3};
  Modelica.SIunits.Angle angles[3];
equation
  angle = axesRotationAngles(R, sequence);

computes the rotation angles "angles[1:3]" to rotate frame 1 into frame 2 along axes sequence[1:3], given the orientation object R from frame 1 to frame 2. Therefore, the result of this function fulfills the following equation:

R = axesRotation(sequence, angles)

The rotation angles are returned in the range

-p <= angles[i] <= p

There are two solutions for "angles[1]" in this range. Via the third argument guessAngle1 (default = 0) the returned solution is selected such that |angles[1] - guessAngle1| is minimal. The orientation object R may be in a singular configuration, i.e., there is an infinite number of angle values leading to the same R. The returned solution is selected by setting angles[1] = guessAngle1. Then angles[2] and angles[3] can be uniquely determined in the above range.

Note, that input argument sequence has the restriction that only values 1,2,3 can be used and that sequence[1] ≠ sequence[2] and sequence[2] ≠ sequence[3]. Often used values are:

sequence = {1,2,3}  // Cardan angle sequence
         = {3,1,3}  // Euler angle sequence
         = {3,2,1}  // Tait-Bryan angle sequence

See also

TransformationMatrices.axesRotationsAngles.

Interface

function axesRotationsAngles
  extends Modelica.Icons.Function;
  input Orientation R "Orientation object to rotate frame 1 into frame 2";
  input Integer sequence[3](min = {1, 1, 1}, max = {3, 3, 3}) = {1, 2, 3} "Sequence of rotations from frame 1 to frame 2 along axis sequence[i]";
  input SI.Angle guessAngle1 = 0 "Select angles[1] such that |angles[1] - guessAngle1| is a minimum";
  output SI.Angle angles[3] "Rotation angles around the axes defined in 'sequence' such that R=Frames.axesRotation(sequence,angles); -pi < angles[i] <= pi";
end axesRotationsAngles;

Generated at 2020-06-05T07:38:22Z by OpenModelica 1.16.0~dev-420-gc007a39