Functions for transformation matrices
Package Frames.TransformationMatrices contains type definitions and functions to transform rotational frame quantities using transformation matrices.
In the table below an example is given for every function definition. The used variables have the following declaration:
Orientation T, T1, T2, T_rel, T_inv; Real[3] v1, v2, w1, w2, n_x, n_y, n_z, e, e_x, res_ori, phi; Real[6] res_equal; Real L, angle;
Function/type | Description |
---|---|
Orientation T; | New type defining an orientation object that describes the rotation of frame 1 into frame 2. |
der_Orientation der_T; | New type defining the first time derivative of Frames.Orientation. |
res_ori = orientationConstraint(T); | Return the constraints between the variables of an orientation object (shall be zero). |
w1 = angularVelocity1(T, der_T); | Return angular velocity resolved in frame 1 from
orientation object T and its derivative der_T. |
w2 = angularVelocity2(T, der_T); | Return angular velocity resolved in frame 2 from
orientation object T and its derivative der_T. |
v1 = resolve1(T,v2); | Transform vector v2 from frame 2 to frame 1. |
v2 = resolve2(T,v1); | Transform vector v1 from frame 1 to frame 2. |
[v1,w1] = multipleResolve1(T, [v2,w2]); | Transform several vectors from frame 2 to frame 1. |
[v2,w2] = multipleResolve2(T, [v1,w1]); | Transform several vectors from frame 1 to frame 2. |
D1 = resolveDyade1(T,D2); | Transform second order tensor D2 from frame 2 to frame 1. |
D2 = resolveDyade2(T,D1); | Transform second order tensor D1 from frame 1 to frame 2. |
T= nullRotation() | Return orientation object T that does not rotate a frame. |
T_inv = inverseRotation(T); | Return inverse orientation object. |
T_rel = relativeRotation(T1,T2); | Return relative orientation object from two absolute orientation objects. |
T2 = absoluteRotation(T1,T_rel); | Return absolute orientation object from another
absolute and a relative orientation object. |
T = planarRotation(e, angle); | Return orientation object of a planar rotation. |
angle = planarRotationAngle(e, v1, v2); | Return angle of a planar rotation, given the rotation axis and the representations of a vector in frame 1 and frame 2. |
T = axisRotation(i, angle); | Return orientation object T for rotation around axis i of frame 1. |
T = axesRotations(sequence, angles); | Return rotation object to rotate in sequence around 3 axes. Example: T = axesRotations({1,2,3},{90,45,-90}); |
angles = axesRotationsAngles(T, sequence); | Return the 3 angles to rotate in sequence around 3 axes to construct the given orientation object. |
phi = smallRotation(T); | Return rotation angles phi valid for a small rotation. |
T = from_nxy(n_x, n_y); | Return orientation object from n_x and n_y vectors. |
T = from_nxz(n_x, n_z); | Return orientation object from n_x and n_z vectors. |
R = from_T(T); | Return orientation object R from transformation matrix T. |
R = from_T_inv(T_inv); | Return orientation object R from inverse transformation matrix T_inv. |
T = from_Q(Q); | Return orientation object T from quaternion orientation object Q. |
T = to_T(R); | Return transformation matrix T from orientation object R. |
T_inv = to_T_inv(R); | Return inverse transformation matrix T_inv from orientation object R. |
Q = to_Q(T); | Return quaternion orientation object Q from orientation object T. |
exy = to_exy(T); | Return [e_x, e_y] matrix of an orientation object T, with e_x and e_y vectors of frame 2, resolved in frame 1. |
Extends from Modelica.Icons.Package (Icon for standard packages).
Name | Description |
---|---|
Orientation | Orientation type defining rotation from a frame 1 into a frame 2 with a transformation matrix |
der_Orientation | New type defining the first time derivative of Orientation |
orientationConstraint | Return residues of orientation constraints (shall be zero) |
angularVelocity1 | Return angular velocity resolved in frame 1 from orientation object and its derivative |
angularVelocity2 | Return angular velocity resolved in frame 2 from orientation object and its derivative |
resolve1 | Transform vector from frame 2 to frame 1 |
resolve2 | Transform vector from frame 1 to frame 2 |
multipleResolve1 | Transform several vectors from frame 2 to frame 1 |
multipleResolve2 | Transform several vectors from frame 1 to frame 2 |
resolveDyade1 | Transform second order tensor from frame 2 to frame 1 |
resolveDyade2 | Transform second order tensor from frame 1 to frame 2 |
nullRotation | Return orientation object that does not rotate a frame |
inverseRotation | Return inverse orientation object |
relativeRotation | Return relative orientation object |
absoluteRotation | Return absolute orientation object from another absolute and a relative orientation object |
planarRotation | Return orientation object of a planar rotation |
planarRotationAngle | Return angle of a planar rotation, given the rotation axis and the representations of a vector in frame 1 and frame 2 |
axisRotation | Return rotation object to rotate around one frame axis |
axesRotations | Return rotation object to rotate in sequence around 3 axes |
axesRotationsAngles | Return the 3 angles to rotate in sequence around 3 axes to construct the given orientation object |
smallRotation | Return rotation angles valid for a small rotation and optionally residues that should be zero |
from_nxy | Return orientation object from n_x and n_y vectors |
from_nxz | Return orientation object from n_x and n_z vectors |
from_T | Return orientation object R from transformation matrix T |
from_T_inv | Return orientation object R from inverse transformation matrix T_inv |
from_Q | Return orientation object T from quaternion orientation object Q |
to_T | Return transformation matrix T from orientation object R |
to_T_inv | Return inverse transformation matrix T_inv from orientation object R |
to_Q | Return quaternion orientation object Q from orientation object T |
to_vector | Map rotation object into vector |
to_exy | Map rotation object into e_x and e_y vectors of frame 2, resolved in frame 1 |
Orientation type defining rotation from a frame 1 into a frame 2 with a transformation matrix
This type describes the rotation from a frame 1 into a frame 2. An instance R of type Orientation has the following interpretation:
T = [ex, ey, ez]; e.g., T = [1,0,0; 0,1,0; 0,0,1]
where ex,ey,ez are unit vectors in the direction of the x-axis, y-axis, and z-axis of frame 1, resolved in frame 2, respectively. Therefore, if v1 is vector v resolved in frame 1 and v2 is vector v resolved in frame 2, the following relationship holds:
v2 = T * v1
The inverse orientation T_inv = TT describes the rotation from frame 2 into frame 1.
Since the orientation is described by 9 variables, there are 6 constraints between these variables. These constraints are defined in function TransformationMatrices.orientationConstraint.
Note, that in the MultiBody library the rotation object is never directly accessed but only with the access functions provided in package TransformationMatrices. As a consequence, other implementations of Rotation can be defined by adapting this package correspondingly.
Extends from Internal.TransformationMatrix.
New type defining the first time derivative of Orientation
Name | Description |
---|---|
unit |
Return residues of orientation constraints (shall be zero)
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Name | Description |
---|---|
residue[6] | Residues of constraints between elements of orientation object (shall be zero) |
Return angular velocity resolved in frame 1 from orientation object and its derivative
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
der_T | Derivative of T [1/s] |
Name | Description |
---|---|
w[3] | Angular velocity of frame 2 with respect to frame 1 resolved in frame 1 [rad/s] |
Return angular velocity resolved in frame 2 from orientation object and its derivative
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
der_T | Derivative of T [1/s] |
Name | Description |
---|---|
w[3] | Angular velocity of frame 2 with respect to frame 1 resolved in frame 2 [rad/s] |
Transform vector from frame 2 to frame 1
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
v2[3] | Vector in frame 2 |
Name | Description |
---|---|
v1[3] | Vector in frame 1 |
Transform vector from frame 1 to frame 2
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
v1[3] | Vector in frame 1 |
Name | Description |
---|---|
v2[3] | Vector in frame 2 |
Transform several vectors from frame 2 to frame 1
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
v2[3, :] | Vectors in frame 2 |
Name | Description |
---|---|
v1[3, size(v2, 2)] | Vectors in frame 1 |
Transform several vectors from frame 1 to frame 2
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
v1[3, :] | Vectors in frame 1 |
Name | Description |
---|---|
v2[3, size(v1, 2)] | Vectors in frame 2 |
Transform second order tensor from frame 2 to frame 1
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
D2[3, 3] | Second order tensor resolved in frame 2 |
Name | Description |
---|---|
D1[3, 3] | Second order tensor resolved in frame 1 |
Transform second order tensor from frame 1 to frame 2
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
D1[3, 3] | Second order tensor resolved in frame 1 |
Name | Description |
---|---|
D2[3, 3] | Second order tensor resolved in frame 2 |
Return orientation object that does not rotate a frame
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object such that frame 1 and frame 2 are identical |
Return inverse orientation object
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Name | Description |
---|---|
T_inv | Orientation object to rotate frame 2 into frame 1 |
Return relative orientation object
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T1 | Orientation object to rotate frame 0 into frame 1 |
T2 | Orientation object to rotate frame 0 into frame 2 |
Name | Description |
---|---|
T_rel | Orientation object to rotate frame 1 into frame 2 |
Return absolute orientation object from another absolute and a relative orientation object
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T1 | Orientation object to rotate frame 0 into frame 1 |
T_rel | Orientation object to rotate frame 1 into frame 2 |
Name | Description |
---|---|
T2 | Orientation object to rotate frame 0 into frame 2 |
Return orientation object of a planar rotation
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
e[3] | Normalized axis of rotation (must have length=1) [1] |
angle | Rotation angle to rotate frame 1 into frame 2 along axis e [rad] |
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Return angle of a planar rotation, given the rotation axis and the representations of a vector in frame 1 and frame 2
A call to this function of the form
Real[3] e, v1, v2; Modelica.SIunits.Angle angle; equation angle = planarRotationAngle(e, v1, v2);
computes the rotation angle "angle" of a planar rotation along unit vector e, rotating frame 1 into frame 2, given the coordinate representations of a vector "v" in frame 1 (v1) and in frame 2 (v2). Therefore, the result of this function fulfills the following equation:
v2 = resolve2(planarRotation(e,angle), v1)
The rotation angle is returned in the range
-p <= angle <= p
This function makes the following assumptions on the input arguments
The function does not check the above assumptions. If these assumptions are violated, a wrong result will be returned and/or a division by zero will occur.
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
e[3] | Normalized axis of rotation to rotate frame 1 around e into frame 2 (must have length=1) [1] |
v1[3] | A vector v resolved in frame 1 (shall not be parallel to e) |
v2[3] | Vector v resolved in frame 2, i.e., v2 = resolve2(planarRotation(e,angle),v1) |
Name | Description |
---|---|
angle | Rotation angle to rotate frame 1 into frame 2 along axis e in the range: -pi <= angle <= pi [rad] |
Return rotation object to rotate around one frame axis
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
axis | Rotate around 'axis' of frame 1 |
angle | Rotation angle to rotate frame 1 into frame 2 along 'axis' of frame 1 [rad] |
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Return rotation object to rotate in sequence around 3 axes
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
sequence[3] | Sequence of rotations from frame 1 to frame 2 along axis sequence[i] |
angles[3] | Rotation angles around the axes defined in 'sequence' [rad] |
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Return the 3 angles to rotate in sequence around 3 axes to construct the given orientation object
A call to this function of the form
TransformationMatrices.Orientation T; parameter Integer sequence[3] = {1,2,3}; Modelica.SIunits.Angle angles[3]; equation angle = axesRotationAngles(T, sequence);
computes the rotation angles "angles[1:3]" to rotate frame 1 into frame 2 along axes sequence[1:3], given the orientation object T from frame 1 to frame 2. Therefore, the result of this function fulfills the following equation:
T = 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 T may be in a singular configuration, i.e., there is an infinite number of angle values leading to the same T. 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
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
sequence[3] | Sequence of rotations from frame 1 to frame 2 along axis sequence[i] |
guessAngle1 | Select angles[1] such that |angles[1] - guessAngle1| is a minimum [rad] |
Name | Description |
---|---|
angles[3] | Rotation angles around the axes defined in 'sequence' such that T=TransformationMatrices.axesRotation(sequence,angles); -pi < angles[i] <= pi [rad] |
Return rotation angles valid for a small rotation and optionally residues that should be zero
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
withResidues | = false/true, if 'angles'/'angles and residues' are returned in phi |
Name | Description |
---|---|
phi[if withResidues then 6 else 3] | The rotation angles around x-, y-, and z-axis of frame 1 to rotate frame 1 into frame 2 for a small rotation + optionally 3 residues that should be zero [rad] |
Return orientation object from n_x and n_y vectors
It is assumed that the two input vectors n_x and n_y are resolved in frame 1 and are directed along the x and y axis of frame 2 (i.e., n_x and n_y are orthogonal to each other) The function returns the orientation object T to rotate from frame 1 to frame 2.
The function is robust in the sense that it returns always an orientation object T, even if n_y is not orthogonal to n_x. This is performed in the following way:
If n_x and n_y are not orthogonal to each other, first a unit vector e_y is determined that is orthogonal to n_x and is lying in the plane spanned by n_x and n_y. If n_x and n_y are parallel or nearly parallel to each other, a vector e_y is selected arbitrarily such that e_x and e_y are orthogonal to each other.
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
n_x[3] | Vector in direction of x-axis of frame 2, resolved in frame 1 [1] |
n_y[3] | Vector in direction of y-axis of frame 2, resolved in frame 1 [1] |
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Return orientation object from n_x and n_z vectors
It is assumed that the two input vectors n_x and n_z are resolved in frame 1 and are directed along the x and z axis of frame 2 (i.e., n_x and n_z are orthogonal to each other) The function returns the orientation object T to rotate from frame 1 to frame 2.
The function is robust in the sense that it returns always an orientation object T, even if n_z is not orthogonal to n_x. This is performed in the following way:
If n_x and n_z are not orthogonal to each other, first a unit vector e_z is determined that is orthogonal to n_x and is lying in the plane spanned by n_x and n_z. If n_x and n_z are parallel or nearly parallel to each other, a vector e_z is selected arbitrarily such that n_x and e_z are orthogonal to each other.
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
n_x[3] | Vector in direction of x-axis of frame 2, resolved in frame 1 [1] |
n_z[3] | Vector in direction of z-axis of frame 2, resolved in frame 1 [1] |
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Return orientation object R from transformation matrix T
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T[3, 3] | Transformation matrix to transform vector from frame 1 to frame 2 (v2=T*v1) |
Name | Description |
---|---|
R | Orientation object to rotate frame 1 into frame 2 |
Return orientation object R from inverse transformation matrix T_inv
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T_inv[3, 3] | Inverse transformation matrix to transform vector from frame 2 to frame 1 (v1=T_inv*v2) |
Name | Description |
---|---|
R | Orientation object to rotate frame 1 into frame 2 |
Return orientation object T from quaternion orientation object Q
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
Q | Quaternions orientation object to rotate frame 1 into frame 2 |
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Return transformation matrix T from orientation object R
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
R | Orientation object to rotate frame 1 into frame 2 |
Name | Description |
---|---|
T[3, 3] | Transformation matrix to transform vector from frame 1 to frame 2 (v2=T*v1) |
Return inverse transformation matrix T_inv from orientation object R
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
R | Orientation object to rotate frame 1 into frame 2 |
Name | Description |
---|---|
T_inv[3, 3] | Inverse transformation matrix to transform vector from frame 2 into frame 1 (v1=T_inv*v2) |
Return quaternion orientation object Q from orientation object T
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Q_guess | Guess value for output Q (there are 2 solutions; the one closer to Q_guess is used |
Name | Description |
---|---|
Q | Quaternions orientation object to rotate frame 1 into frame 2 |
Map rotation object into vector
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Name | Description |
---|---|
vec[9] | Elements of T in one vector |
Map rotation object into e_x and e_y vectors of frame 2, resolved in frame 1
Extends from Modelica.Icons.Function (Icon for functions).
Name | Description |
---|---|
T | Orientation object to rotate frame 1 into frame 2 |
Name | Description |
---|---|
exy[3, 2] | = [e_x, e_y] where e_x and e_y are axes unit vectors of frame 2, resolved in frame 1 |