[Math] How to modify a transformation that is based on yaw-pitch-roll or phi-theta-psi

linear algebrarotations

I’m building a model in a 3D simulation program (MSC Adams) and part of that model is a triangular platform which can translate and rotate in the virtual world, as shown in the 2 images below:

Rest position

Platform moved

There are some markers on this platform that, when it is at its home orientation, are aligned with the global axis system (which is the orientation of markers A, B and C in the first image). These markers move and orient with the platform so that they represent the platform’s orientation with respect to the global axis system.

Now, I have a special marker (TOP_ORIGIN) that is coded so that it is always at the centroid of the corners of the triangle that form the platform (average of the coordinates A, B and C). What I’m trying to do is to also constrain the orientation of the marker as follows:

  • The X-Y plane is the same as the platform’s plane with the Z axis putting “up” away from the model.
  • The angle between the X axis and the vector XA is set to an angle, theta, which I calculate elsewhere.

The software gives me two ways of getting and setting the orientation of objects: yaw-pitch-roll (rotation about Z then rotation about the new Y, then rotation about the new X) and phi-theta-psi (rotation about Z then rotation about the new X, then rotation about the new Z).

How can I apply these transformations to get the marker to the orientation I want?

Best Answer

The rotation matrix corresponding to the XYZ-triad you are seeking can be obtained easily enough with a Gram-Schmidt orthonormalization:

1) In vector notation, let $\hat{\boldsymbol{n}}_1$ be the unit vector in the direction from $A$ to $B$ and $\boldsymbol{n}$ be the vector from $A$ to $C$.

2) Remove the component of $\hat{\boldsymbol{n}}_1$ from $\boldsymbol{n}$: $$ \boldsymbol{n} - \left(\boldsymbol{n} \cdot \hat{\boldsymbol{n}}_1 \right)\hat{\boldsymbol{n}}_1 $$ The unit vector in this direction is your second unit vector $\hat{\boldsymbol{n}}_2$.

3) Your third unit vector is simply $\hat{\boldsymbol{n}}_3 = \hat{\boldsymbol{n}}_1 \times \hat{\boldsymbol{n}}_2$.

The $3\times 3$ matrix formed by these unit vectors as columns is the rotation matrix you seek. $R = \left[ \hat{\boldsymbol{n}}_1~\hat{\boldsymbol{n}}_2~\hat{\boldsymbol{n}}_3\right]$. If this rotation matrix is to be obtained by a rotation about Z, Y, and X axes in order, by angles $\alpha$, $\beta$ and $\gamma$ respectively, then you have to equate:

$$ R = \left[ \begin{array}{ccc} cos \beta cos \gamma & -cos\beta sin\gamma & sin\beta \\ cos\gamma sin\alpha sin\beta + cos\alpha sin\gamma & cos\alpha cos\gamma - sin\alpha sin\beta sin\gamma & -cos\beta sin\alpha \\ -cos\alpha cos\gamma sin\beta + sin\alpha sin\gamma & cos\gamma sin\alpha + cos\alpha sin\beta \sin\gamma & cos\alpha cos\beta \end{array} \right] $$

In order to obtain $\alpha$, $\beta$ and $\gamma$.