Calculate rotation matrix based on quaternions.

If B is a FoR obtained rotating a FoR A by an angle \(\phi\) about an axis \(\mathbf{n}\) (recall \(\mathbf{n}\) will be invariant during the rotation), and \(\mathbf{q}\) is the related quaternion, \(\mathbf{q}(\phi,\mathbf{n})\), the function will return the matrix \(C^{AB}\) such that:

  • \(C^{AB}\) rotates FoR A onto FoR B.

  • \(C^{AB}\) transforms the coordinates of a vector defined in B component to A components i.e. \(\mathbf{v}^A = C^{AB}(\mathbf{q})\mathbf{v}^B\).

\[\begin{split}C^{AB}(\mathbf{q}) = \begin{pmatrix} q_0^2 + q_1^2 - q_2^2 -q_3^2 & 2(q_1 q_2 - q_0 q_3) & 2(q_1 q_3 + q_0 q_2) \\ 2(q_1 q_2 + q_0 q_3) & q_0^2 - q_1^2 + q_2^2 - q_3^2 & 2(q_2 q_3 - q_0 q_1) \\ 2(q_1 q_3 - q_0 q_2) & 2(q_2 q_3 + q_0 q_1) & q_0^2 -q_1^2 -q_2^2 +q_3^2 \end{pmatrix}\end{split}\]


The inverse rotation is defined as the transpose of the matrix \(C^{BA} = C^{{AB}^T}\).

In typical SHARPy applications, the quaternion relation between the A and G frames is expressed as \(C^{GA}(\mathbf{q})\), and in the context of this function it corresponds to:

>>> C_ga = quat2rotation(q1)
>>> C_ag = quat2rotation.T(q1)
param q

Quaternion \(\mathbf{q}(\phi, \mathbf{n})\).

type q



\(C^{AB}\) rotation matrix from FoR B to FoR A.




Stevens, L. Aircraft Control and Simulation. 1985. pg 41