Random Attitudes#

ahrs.common.quaternion.random_attitudes(n: int = 1, representation: str = 'quaternion') ndarray#

Generate random attitudes

To generate a random quaternion a mapping in SO(3) is first created and then transformed as explained originally by [Shoemake] and summarized in [Kuffner].

First, three uniform random values are sampled from the interval [0, 1]:

\[u_1, u_2, u_3 \sim U(0, 1)\]

Then, two random angles are generated from these values:

\[\begin{split}\begin{array}{rl} s_1 &= \sqrt{1-u_1} \\ s_2 &= \sqrt{u_1} \\ t_1 &= 2\pi u_2 \\ t_2 &= 2\pi u_3 \end{array}\end{split}\]

Finally, the quaternion is built as:

\[\begin{split}\mathbf{q} = \begin{bmatrix} s_2\cos t_2 \\ s_1\sin t_1 \\ s_1\cos t_1 \\ s_2\sin t_2 \end{bmatrix}\end{split}\]
Parameters:
  • n (int, default: 1) – Number of random attitudes to generate. Default is 1.

  • representation (str, default: 'quaternion') – Attitude representation. Options are 'quaternion' or 'rotmat'.

Returns:

Q – Array of n random quaternions.

Return type:

numpy.ndarray