<?xml version="1.0" encoding="UTF-8"?>

<record version="3" id="1107">
 <title>relative attitude and error quaternions</title>
 <name>RelativeAttitudeAndErrorQuaternions</name>
 <created>2026-08-24 02:26:13</created>
 <modified>2026-08-27 13:03:56</modified>
 <type>Definition</type>
 <creator id="1" name="bloftin"/>
 <modifier id="1" name="bloftin"/>
 <author id="1" name="bloftin"/>
 <classification>
	<category scheme="pacs" code="02.40.Yy"/>
	<category scheme="pacs" code="02.10.Hh"/>
	<category scheme="pacs" code="45.40.-f"/>
 </classification>
 <defines>
	<concept>error quaternions</concept>
	<concept>relative attitude</concept>
 </defines>
 <synonyms>
	<synonym concept="relative attitude and error quaternions" alias=" relative attitude quaternion"/>
	<synonym concept="relative attitude and error quaternions" alias="error quaternion"/>
 </synonyms>
 <keywords>
	<term>quaternion</term>
	<term>relative attitude</term>
	<term>error quaternion</term>
	<term>attitude error</term>
	<term>multiplicative error</term>
	<term>small angle error</term>
	<term>spacecraft attitude</term>
	<term>error state estimation</term>
	<term>attitude control</term>
 </keywords>
 <preamble>% this is the default PhysicsLibrary preamble.  as your knowledge
% of TeX increases, you will probably want to edit this, but
% it should be fine as is for beginners.

% almost certainly you want these
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{amsfonts}

% used for TeXing text within eps files
%\usepackage{psfrag}
% need this for including graphics (\includegraphics).
% If you use \includegraphics{figure} with no file extension, PhysicsLibrary
% will prefer figure.png before falling back to figure.eps.
\usepackage{graphicx}
\DeclareGraphicsExtensions{.png,.jpg,.jpeg,.pdf,.eps}
% for neatly defining theorems and propositions
%\usepackage{amsthm}
% making logically defined graphics
%\usepackage{xypic}

% there are many more packages, add them here as you need them

% define commands here</preamble>
 <content>\section*{Relative Attitude and Error Quaternions}

An attitude quaternion describes the orientation of one frame relative to
another.  In estimation and control, however, the quantity of immediate
interest is often not the attitude itself but the difference between two
attitudes.

Examples include:

\begin{itemize}

\item the difference between a commanded spacecraft attitude and the measured
attitude;

\item the difference between the true attitude and a filter estimate;

\item the relative orientation between two vehicles;

\item the correction that must be injected into a nominal quaternion state;

\item the small attitude error used in a Kalman filter or feedback controller.

\end{itemize}

Attitude error is not obtained by subtracting quaternion components.  Because
three dimensional orientation is a noncommutative rotation group, the exact
relative attitude is formed by quaternion multiplication with an inverse.

PhysicsLibrary uses passive frame quaternions.  Let

\begin{equation}
q
=
{}^{B}q_I
\end{equation}

denote the current or actual attitude, mapping reference frame $I$ coordinates
into actual body frame $B$ coordinates.

Let

\begin{equation}
q_d
=
{}^{D}q_I
\end{equation}

denote the desired attitude, mapping the same reference frame coordinates into
desired frame $D$ coordinates.

Two multiplicative error definitions are useful:

\begin{equation}
\delta q_L
=
q_d q^*
\end{equation}

and

\begin{equation}
\delta q_R
=
q^*q_d.
\end{equation}

They are called the left and right errors because they reconstruct the desired
attitude as

\begin{equation}
q_d
=
\delta q_L q
\end{equation}

or

\begin{equation}
q_d
=
q\delta q_R.
\end{equation}

Both represent the same physical relative orientation, but their vector parts
are resolved on different sides of the attitude transformation.

\section{Convention declaration}

PhysicsLibrary uses Hamilton multiplication,

\[
\mathbf i\mathbf j=\mathbf k,
\qquad
\mathbf j\mathbf k=\mathbf i,
\qquad
\mathbf k\mathbf i=\mathbf j,
\]

with reversed products changing sign.

Quaternion components are displayed scalar first:

\begin{equation}
q
=
q_w+q_x\mathbf i+q_y\mathbf j+q_z\mathbf k
\quad\longleftrightarrow\quad
\begin{bmatrix}
q_w\\q_x\\q_y\\q_z
\end{bmatrix}.
\end{equation}

The canonical passive coordinate map is

\begin{equation}
{}^{B}v
=
{}^{B}q_I
\,{}^{I}v
\,({}^{B}q_I)^*.
\end{equation}

For a positive frame rotation through angle $\theta$ about unit axis
$\widehat{\mathbf u}$,

\begin{equation}
q
=
\cos\frac{\theta}{2}
-
\widehat{\mathbf u}
\sin\frac{\theta}{2}.
\end{equation}

This negative vector sign is essential when converting an error quaternion to
a physical small frame rotation vector.

\section{Why subtraction is not an attitude error}

A quaternion is not an ordinary vector in orientation space.

The component difference

\[
q_d-q
\]

is a four dimensional Euclidean difference between two parameter vectors.  It
is not itself a unit quaternion and does not directly represent the finite
rotation that carries one attitude into the other.

The exact relative transformation must instead satisfy a composition
equation.

For a left error,

\[
q_d
=
\delta q_L q.
\]

Right multiply by $q^*$:

\[
q_dq^*
=
\delta q_Lqq^*
=
\delta q_L.
\]

Therefore

\begin{equation}
\delta q_L=q_dq^*.
\end{equation}

For a right error,

\[
q_d
=
q\delta q_R.
\]

Left multiply by $q^*$:

\[
q^*q_d
=
q^*q\delta q_R
=
\delta q_R.
\]

Therefore

\begin{equation}
\delta q_R=q^*q_d.
\end{equation}

\section{Geometric interpretation of the left error}

Because

\[
q={}^Bq_I
\]

and

\[
q_d={}^Dq_I,
\]

the conjugate of the current attitude is

\[
q^*
=
{}^Iq_B.
\]

Therefore the left error has the explicit frame chain

\[
\begin{aligned}
\delta q_L
&amp;=
{}^Dq_I\,{}^Iq_B\\
&amp;=
{}^Dq_B.
\end{aligned}
\]

Hence

\begin{equation}
\delta q_L
=
{}^Dq_B.
\end{equation}

The left error is the direct passive coordinate transformation from the
current actual frame into the desired frame.

It is therefore especially natural when the correction is applied on the
body or output side:

\[
q_d
=
\delta q_L q.
\]

\section{Geometric interpretation of the right error}

The right error is

\[
\delta q_R=q^*q_d.
\]

It reconstructs the desired attitude by right multiplication:

\[
q_d=q\delta q_R.
\]

The right error is the same relative rotation transported to the reference or
input side of the current attitude transformation.

The two errors are related exactly by conjugation.

Starting from

\[
\delta q_R=q^*q_d,
\]

multiply on the left by $q$ and on the right by $q^*$:

\[
q\delta q_Rq^*
=
qq^*q_dq^*
=
q_dq^*.
\]

Thus

\begin{equation}
\delta q_L
=
q\delta q_Rq^*.
\end{equation}

Equivalently,

\begin{equation}
\delta q_R
=
q^*\delta q_Lq.
\end{equation}

This relation explains why left and right errors have the same scalar part and
the same rotation magnitude but generally different vector components.

\section{Relative attitude diagram}

The following diagram summarizes the passive frame maps and the two
multiplicative errors.

% PhysicsLibrary image file expected:
% Q12_relative_attitude_error.png
%
% Legacy L2H note:
% Keep this as a simple inline include.  Do not wrap it in a figure
% environment and do not use caption, label, or ref macros here.

\begin{center}
\includegraphics[width=0.94\textwidth]{Q12_relative_attitude_error_quaternion.png
}
\end{center}

\noindent\textbf{Figure.}
The actual passive attitude is $q={}^Bq_I$ and the desired passive attitude is
$q_d={}^Dq_I$.  The left error is the direct actual to desired frame map
$\delta q_L=q_dq^*$ and is applied on the left.  The right error
$\delta q_R=q^*q_d$ is the conjugate transported version applied on the right.
For a small positive frame error, the quaternion vector part has the opposite
sign from the physical rotation vector.

\section{Direction cosine matrix form}

Let

\[
C=C(q)
\]

and

\[
C_d=C(q_d)
\]

be the passive DCMs.

Because

\[
C(pq)=C(p)C(q)
\]

and

\[
C(q^*)=C(q)^T,
\]

the left error matrix is

\begin{equation}
E_L
=
C(\delta q_L)
=
C_dC^T.
\end{equation}

The right error matrix is

\begin{equation}
E_R
=
C(\delta q_R)
=
C^TC_d.
\end{equation}

The exact conjugation relation becomes

\begin{equation}
E_L
=
CE_RC^T.
\end{equation}

Thus the quaternion and DCM error definitions are completely consistent.

\section{Exact axis angle form of a passive error quaternion}

Choose a unit error quaternion

\[
\delta q
=
\delta q_w+\delta\mathbf q_v.
\]

Under the PhysicsLibrary passive convention,

\begin{equation}
\delta q
=
\cos\frac{\delta\theta}{2}
-
\widehat{\mathbf u}_e
\sin\frac{\delta\theta}{2}.
\end{equation}

For a principal representative with

\[
\delta q_w\geq0,
\]

the principal error angle is

\begin{equation}
\delta\theta
=
2\operatorname{atan2}
\left(
\lVert\delta\mathbf q_v\rVert,
\delta q_w
\right).
\end{equation}

If the vector part is nonzero, the corresponding positive frame error axis is

\begin{equation}
\widehat{\mathbf u}_e
=
-
\frac{
\delta\mathbf q_v
}{
\lVert\delta\mathbf q_v\rVert
}.
\end{equation}

The minus sign is the passive counterpart of the usual active axis extraction
formula.

\section{Principal sign choice}

The unit quaternions

\[
\delta q
\]

and

\[
-\delta q
\]

represent the same physical relative attitude.

For local estimation and control, it is usually convenient to choose the
representative with nonnegative scalar component:

\begin{equation}
\delta q_w\geq0.
\end{equation}

This selects a principal error angle in the interval

\begin{equation}
0\leq\delta\theta\leq\pi.
\end{equation}

If an initially computed error has

\[
\delta q_w&lt;0,
\]

replace it by

\[
-\delta q
\]

before forming a local small error vector.

At exactly $180^\circ$,

\[
\delta q_w=0,
\]

and the sign choice is intrinsically ambiguous.  The two quaternion signs are
equally valid at that point.

\section{Small attitude error approximation}

For a small positive frame error vector

\[
\delta\boldsymbol\theta
=
\widehat{\mathbf u}_e
\,\delta\theta,
\]

use

\[
\cos\frac{\delta\theta}{2}
\approx1
\]

and

\[
\sin\frac{\delta\theta}{2}
\approx
\frac{\delta\theta}{2}.
\]

Then the passive error quaternion becomes

\begin{equation}
\delta q
\approx
1
-
\frac12
\delta\boldsymbol\theta.
\end{equation}

In scalar first array notation,

\begin{equation}
\delta\mathbf q
\approx
\begin{bmatrix}
1\\
-\frac12\delta\boldsymbol\theta
\end{bmatrix}.
\end{equation}

Therefore the physical small frame error vector is recovered from the
quaternion vector part by

\begin{equation}
\delta\boldsymbol\theta
\approx
-2\delta\mathbf q_v.
\end{equation}

This is one of the most important sign changes from an active quaternion error
model.

\section{Left and right small error vectors}

Let

\[
\delta\boldsymbol\theta_L
\]

denote the small frame error vector associated with $\delta q_L$, and let

\[
\delta\boldsymbol\theta_R
\]

denote the small frame error vector associated with $\delta q_R$.

The exact quaternion relation is

\[
\delta q_L
=
q\delta q_Rq^*.
\]

To first order,

\[
\delta q_R
\approx
1
-
\frac12\delta\boldsymbol\theta_R.
\]

Therefore

\[
\begin{aligned}
\delta q_L
&amp;\approx
q
\left(
1-\frac12\delta\boldsymbol\theta_R
\right)
q^*\\
&amp;=
1
-
\frac12
q\delta\boldsymbol\theta_Rq^*.
\end{aligned}
\]

The quaternion sandwich transforms pure vector coordinates according to the
current passive attitude:

\[
q\delta\boldsymbol\theta_Rq^*
=
C(q)\delta\boldsymbol\theta_R.
\]

Hence

\begin{equation}
\delta\boldsymbol\theta_L
=
C(q)
\delta\boldsymbol\theta_R.
\end{equation}

Equivalently,

\begin{equation}
\delta\boldsymbol\theta_R
=
C(q)^T
\delta\boldsymbol\theta_L.
\end{equation}

Thus the left and right small errors represent the same geometric
misalignment in different coordinate resolutions.

\section{Check: desired yaw differs by \(15^\circ\)}

Suppose the current passive attitude is a positive $10^\circ$ frame yaw about
$+\widehat{\mathbf z}$:

\[
q
=
\cos5^\circ
-
\mathbf k\sin5^\circ.
\]

Suppose the desired attitude is a positive $25^\circ$ frame yaw:

\[
q_d
=
\cos12.5^\circ
-
\mathbf k\sin12.5^\circ.
\]

Because both rotations use the same axis, they commute.  The left error is

\[
\begin{aligned}
\delta q_L
&amp;=
q_dq^*\\
&amp;=
\left(
\cos12.5^\circ
-
\mathbf k\sin12.5^\circ
\right)
\left(
\cos5^\circ
+
\mathbf k\sin5^\circ
\right).
\end{aligned}
\]

Therefore

\begin{equation}
\delta q_L
=
\cos7.5^\circ
-
\mathbf k\sin7.5^\circ.
\end{equation}

This is the passive quaternion for a positive $15^\circ$ frame error about
$+\widehat{\mathbf z}$.

The exact physical error is therefore

\begin{equation}
\delta\theta=15^\circ,
\qquad
\widehat{\mathbf u}_e=+\widehat{\mathbf z}.
\end{equation}

\section{Check: left and right errors need not be equal}

Take the current attitude as a positive $90^\circ$ frame rotation about $+x$:

\begin{equation}
q
=
\frac{1-\mathbf i}{\sqrt2}.
\end{equation}

Take the desired attitude as a positive $90^\circ$ frame rotation about $+y$:

\begin{equation}
q_d
=
\frac{1-\mathbf j}{\sqrt2}.
\end{equation}

The current conjugate is

\[
q^*
=
\frac{1+\mathbf i}{\sqrt2}.
\]

The left error is

\[
\begin{aligned}
\delta q_L
&amp;=
q_dq^*\\
&amp;=
\frac12
(1-\mathbf j)
(1+\mathbf i)\\
&amp;=
\frac12
(1+\mathbf i-\mathbf j+\mathbf k).
\end{aligned}
\]

Thus

\begin{equation}
\delta q_L
=
\frac12
(1+\mathbf i-\mathbf j+\mathbf k).
\end{equation}

The right error is

\[
\begin{aligned}
\delta q_R
&amp;=
q^*q_d\\
&amp;=
\frac12
(1+\mathbf i)
(1-\mathbf j)\\
&amp;=
\frac12
(1+\mathbf i-\mathbf j-\mathbf k).
\end{aligned}
\]

Thus

\begin{equation}
\delta q_R
=
\frac12
(1+\mathbf i-\mathbf j-\mathbf k).
\end{equation}

The two errors have the same scalar part and the same vector magnitude but
different vector directions.

Finite attitude error is therefore convention sensitive even when the error
angle itself is unchanged.

\section{Same physical attitude with opposite quaternion signs}

Suppose the stored current and desired quaternions satisfy

\[
q_d=-q.
\]

They represent exactly the same physical attitude.

The left error is

\[
\delta q_L
=
q_dq^*
=
-qq^*
=
-1.
\]

Thus

\begin{equation}
\delta q_L=-1.
\end{equation}

The quaternion $-1$ represents the identity orientation just as $+1$ does.

For a local error representation, change the sign to the principal
representative

\begin{equation}
\delta q_L=+1.
\end{equation}

The physical attitude error is zero, not $360^\circ$.

\section{Desired versus actual attitude in control}

For control, let

\[
q
\]

be the measured or estimated actual passive attitude and let

\[
q_d
\]

be the commanded passive attitude.

A body side correction can be formed with

\[
\delta q_L=q_dq^*.
\]

For a small error,

\[
\delta q_L
\approx
1-\frac12\delta\boldsymbol\theta_L.
\]

Therefore a controller that requires a physical positive frame correction
vector should use

\begin{equation}
\delta\boldsymbol\theta_L
\approx
-2\,\operatorname{sgn}(\delta q_{L,w})
\,\delta\mathbf q_{L,v},
\end{equation}

away from the $180^\circ$ sign ambiguity.

The sign factor selects the locally shortest quaternion representative.

A control law should not use the raw quaternion vector part without first
accounting for the active or passive convention.

\section{True versus estimated attitude in estimation}

Let the true passive attitude be

\[
q_t
\]

and a nominal estimate be

\[
\widehat q.
\]

A left multiplicative error is defined by

\begin{equation}
q_t
=
\delta q_L\widehat q.
\end{equation}

Therefore

\begin{equation}
\delta q_L
=
q_t\widehat q^*.
\end{equation}

A right multiplicative error is defined by

\begin{equation}
q_t
=
\widehat q\delta q_R,
\end{equation}

so

\begin{equation}
\delta q_R
=
\widehat q^*q_t.
\end{equation}

For a passive small error state,

\begin{equation}
\delta q
\approx
\begin{bmatrix}
1\\
-\frac12\delta\boldsymbol\theta
\end{bmatrix}.
\end{equation}

The filter covariance, Jacobians, reset equation, and correction injection must
all use the same left or right definition.

\section{Error injection}

Suppose an estimator has computed a correction quaternion $\delta\widehat q$.

For a left error model, update the nominal attitude by

\begin{equation}
\widehat q^+
=
\delta\widehat q
\,\widehat q^-.
\end{equation}

For a right error model,

\begin{equation}
\widehat q^+
=
\widehat q^-
\,\delta\widehat q.
\end{equation}

Mixing a right error covariance model with a left injection, or vice versa,
changes the coordinate interpretation of the correction and is generally
inconsistent.

\section{Relative attitude between two physical bodies}

The same algebra applies when neither attitude is merely a desired command.

Let two physical frames $B_1$ and $B_2$ have passive attitudes

\[
{}^{B_1}q_I
\]

and

\[
{}^{B_2}q_I.
\]

The direct coordinate map from $B_1$ into $B_2$ is

\begin{equation}
{}^{B_2}q_{B_1}
=
{}^{B_2}q_I
({}^{B_1}q_I)^*.
\end{equation}

This is exactly the same form as the left error quaternion.

Therefore relative attitude and attitude error are mathematically the same
operation.  The difference is the engineering interpretation assigned to the
two endpoint frames.

\section{Why Euler angle subtraction is generally not exact}

Suppose the actual and desired attitudes are displayed as yaw, pitch, and roll
triples.

The component difference

\[
\begin{bmatrix}
\phi_d-\phi\\
\theta_d-\theta\\
\psi_d-\psi
\end{bmatrix}
\]

is generally not the exact finite attitude error vector.

Euler angles are nonlinear coordinates associated with an ordered sequence of
rotations.  Finite rotations do not commute, so subtracting the three
coordinates does not reproduce the group product

\[
q_dq^*
\]

or

\[
q^*q_d.
\]

For sufficiently small errors and away from an Euler singularity, angle
differences may provide a local approximation.  The exact error should
nevertheless be formed first with quaternions or DCMs.

\section{Error near \(180^\circ\)}

For a principal passive error quaternion,

\[
\delta q_w
=
\cos\frac{\delta\theta}{2}.
\]

Therefore

\[
\delta q_w\approx0
\]

corresponds to

\[
\delta\theta\approx180^\circ.
\]

Near this angle, the two equivalent representatives $\delta q$ and
$-\delta q$ have nearly equal scalar magnitude and opposite vector parts.

Consequently a rule that always forces a positive scalar component can switch
sign under very small perturbations near $180^\circ$.

The physical orientation remains continuous.  The discontinuity belongs to
the chosen quaternion representative.

This issue is especially important in controllers, optimizers, and time
histories that assume quaternion component continuity.

\section{Exact error angle without choosing an axis sign}

If only the magnitude of the principal attitude error is needed, choose the
quaternion sign so that

\[
\delta q_w\geq0.
\]

Then

\begin{equation}
\delta\theta
=
2\arccos(\delta q_w).
\end{equation}

An equivalent numerically robust form is

\begin{equation}
\delta\theta
=
2\operatorname{atan2}
\left(
\lVert\delta\mathbf q_v\rVert,
\delta q_w
\right).
\end{equation}

The second form behaves well for both small and large angles.

\section{Small error norm}

The first order passive error quaternion is

\[
\delta q
\approx
\begin{bmatrix}
1\\
-\frac12\delta\boldsymbol\theta
\end{bmatrix}.
\]

Its squared Euclidean norm is

\[
\begin{aligned}
\lVert\delta q\rVert^2
&amp;\approx
1
+
\frac14
\lVert\delta\boldsymbol\theta\rVert^2.
\end{aligned}
\]

Thus

\begin{equation}
\lVert\delta q\rVert^2-1
=
O
\left(
\lVert\delta\boldsymbol\theta\rVert^2
\right).
\end{equation}

The unit norm error introduced by the first order small error approximation is
second order in the attitude error magnitude.

\section{Implementation checks}

A relative attitude implementation should pass the following checks.

\begin{enumerate}

\item \textbf{Identity.}

If

\[
q_d=q,
\]

then both errors must equal $+1$ up to quaternion sign.

\item \textbf{Opposite stored sign.}

If

\[
q_d=-q,
\]

the physical error must still be zero.

\item \textbf{Same axis rotations.}

For current yaw $10^\circ$ and desired yaw $25^\circ$, the passive error must
represent a positive $15^\circ$ frame yaw and therefore have a negative
$\mathbf k$ vector component.

\item \textbf{Left and right reconstruction.}

Verify

\[
q_d=\delta q_Lq
\]

and

\[
q_d=q\delta q_R.
\]

\item \textbf{Conjugation relation.}

Verify

\[
\delta q_L=q\delta q_Rq^*.
\]

\item \textbf{DCM consistency.}

Verify

\[
C(\delta q_L)=C_dC^T
\]

and

\[
C(\delta q_R)=C^TC_d.
\]

\item \textbf{Small error sign.}

For a small positive frame rotation vector
$\delta\boldsymbol\theta$, verify

\[
\delta\mathbf q_v
\approx
-\frac12
\delta\boldsymbol\theta.
\]

\end{enumerate}

\section{Common pitfalls}

\begin{enumerate}

\item \textbf{Subtracting quaternion components.}

The exact relative attitude is multiplicative, not additive.

\item \textbf{Using the old active small error sign.}

For the PhysicsLibrary passive frame quaternion,

\[
\delta q
\approx
1-\frac12\delta\boldsymbol\theta.
\]

\item \textbf{Calling an error simply ``the quaternion difference.''}

The order must be stated.  $q_dq^*$ and $q^*q_d$ are generally different.

\item \textbf{Mixing left error propagation with right error injection.}

The filter or controller must keep the chosen side consistent.

\item \textbf{Ignoring the \(q\) versus \(-q\) equivalence.}

An error quaternion near $-1$ can represent almost zero physical error.

\item \textbf{Forcing sign continuity and principal angle simultaneously
without a policy.}

Near $180^\circ$, the principal sign choice can switch discontinuously.

\item \textbf{Interpreting the raw passive vector part as a positive physical
correction vector.}

The small physical frame error is approximately
$-2\delta\mathbf q_v$.

\item \textbf{Subtracting Euler angle triples for a large finite error.}

Euler coordinates are sequence dependent nonlinear coordinates, not a global
rotation vector.

\item \textbf{Assuming left and right error vectors have the same
coordinates.}

They represent the same geometric error but are transported through the
current attitude.

\end{enumerate}

\section{Relationship to adjacent PhysicsLibrary entries}

The preceding article, \emph{Quaternion Kinematics and Angular Velocity},
derives the passive quaternion differential equations used to propagate the
nominal attitude.

The present article defines exact relative attitude and multiplicative error
quaternions and establishes the passive small error sign used in estimation
and control.

A separate companion entry,
\emph{Relative Attitude and Error Quaternions: Examples, Exercises, and
Solutions}, provides the Q12E self study problem bank.

The next main article,
\emph{Numerical Quaternion Propagation and IMU Attitude State Integration},
combines quaternion kinematics, sampled gyro increments, bias correction, and
small error concepts in a discrete navigation implementation.

\section{Sources and convention notes}

Relative attitude and multiplicative quaternion errors are standard tools in
spacecraft attitude estimation, inertial navigation, robotics, and nonlinear
state estimation.  Their exact signs and multiplication sides depend on the
chosen quaternion frame map.

Sommer and coauthors provide a modern discussion of quaternion convention
management and passive frame transformations.  Markley and Crassidis provide
a broad spacecraft attitude treatment including quaternion errors and
estimation.  Shuster discusses historical spacecraft quaternion conventions.
Sol\`a provides a detailed engineering discussion of quaternion perturbations
and error state Kalman filtering; its formulas should be translated carefully
when the quaternion map differs from the PhysicsLibrary passive convention.

\begin{thebibliography}{9}

\bibitem{Sommer2018}
H. Sommer, I. Gilitschenski, M. Bloesch, S. Weiss, R. Siegwart, and J. Nieto,
``Why and How to Avoid the Flipped Quaternion Multiplication,''
\emph{Aerospace}, vol. 5, no. 3, article 72, 2018.
Published under CC BY 4.0.
\PMlinkexternal{Publisher article}
{https://www.mdpi.com/2226-4310/5/3/72}

\bibitem{MarkleyCrassidis}
F. L. Markley and J. L. Crassidis,
\emph{Fundamentals of Spacecraft Attitude Determination and Control},
Springer, 2014.
Engineering reference.
\PMlinkexternal{Publisher book page}
{https://link.springer.com/book/10.1007/978-1-4939-0802-8}

\bibitem{Shuster2008}
M. D. Shuster,
``The Nature of the Quaternion,''
\emph{The Journal of the Astronautical Sciences},
vol. 56, no. 3, pp. 359--373, 2008.
Reference source.
\PMlinkexternal{DOI record}
{https://doi.org/10.1007/BF03256558}

\bibitem{Sola2017}
J. Sol\`a,
``Quaternion Kinematics for the Error State Kalman Filter,''
technical report, 2017.
\PMlinkexternal{arXiv preprint}
{https://arxiv.org/abs/1711.02508}

\end{thebibliography}

\section*{License}

Unless otherwise noted, this PhysicsLibrary entry is intended for release under
the Creative Commons Attribution ShareAlike 4.0 International license.</content>
</record>
