Content deleted Content added
m v2.05b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation) |
Replace all q_0/1/2/3 with q_w/x/y/z (vector rotation section needs some work) |
||
Line 4:
==Definition==
There are two representations of quaternions. Hamilton (where w is the first component) and [[JPL]] (where w is the last component).<ref>W. G. Breckenridge, "Quaternions proposed standard conventions," NASA Jet Propulsion Laboratory, Technical Report, Oct. 1979.</ref> This article uses Hamilton for some formulas. A unit [[quaternion]] can be described as:
:<math>\mathbf{q}
:<math>|\mathbf{q}|
We can associate a [[quaternion]] with a rotation around an axis by the following expression
:<math>
:<math>
:<math>
:<math>
where α is a simple rotation angle (the value in radians of the [[angle of rotation]]) and cos(β<sub>''x''</sub>), cos(β<sub>''y''</sub>) and cos(β<sub>''z''</sub>) are the "[[direction cosine]]s" of the angles between the three coordinate axes and the axis of rotation. (Euler's Rotation Theorem).
Line 18:
To better understand how "[[direction cosine]]s" work with quaternions:
:<math>\begin{array}{lcr}
If the [[axis of rotation]] is the ''x''-axis:
:<math>\begin{array}{lcr}
If the [[axis of rotation]] is the ''y''-axis:
:<math>\begin{array}{lcr}
If the [[axis of rotation]] is the ''z''-axis:
:<math>\begin{array}{lcr}
If the [[axis of rotation]] is a [[Vector_(mathematics_and_physics)|vector]] located 45° ({{sfrac|{{pi}}|4}} radians) between the ''x'' and ''y'' axes:
:<math>\begin{array}{lcr}
Therefore, the ''x'' and ''y'' axes "share" influence over the new [[axis of rotation]].
Line 63:
== Rotation matrices ==
The [[orthogonal matrix]] (post-multiplying a column vector) corresponding to a clockwise/[[Right-hand rule|left-handed]] (looking along positive axis to origin) rotation by the unit [[quaternion]] <math>q=
:<math>R = \begin{bmatrix}
1- 2(
2(
2(
\end{bmatrix}</math>
Line 74:
:<math>R = \begin{bmatrix}
2(
2(
\end{bmatrix}</math>
If <math>
The direction cosine matrix (from the rotated Body XYZ coordinates to the original Lab xyz coordinates for a clockwise/lefthand rotation) corresponding to a post-multiply '''Body 3-2-1''' sequence with [[Euler angles]] (ψ, θ, φ) is given by:<ref name=nasa-rotation>{{cite web|last=NASA Mission Planning and Analysis Division|title=Euler Angles, Quaternions, and Transformation Matrices|date=July 1977 |url=https://ntrs.nasa.gov/citations/19770024290|publisher=[[NASA]]|accessdate=24 May 2021}}</ref>
Line 196:
\end{bmatrix} =
\begin{bmatrix}
\mbox{arctan} \left(\dfrac {2(
- \pi/2 + 2 \, \mbox{arctan} \sqrt{\dfrac {1 + 2(
\mbox{arctan} \left(\dfrac {2(
\end{bmatrix} </math>
Line 207:
\end{bmatrix} =
\begin{bmatrix}
\mbox{atan2} \left(2(
- \pi/2 + 2 \, \mbox{atan2} \left(\sqrt{1 + 2(
\mbox{atan2} \left(2(
\end{bmatrix} </math>
Moreover, typical implementations of arctan also might have some numerical disadvantages near zero and one. Some implementations use the equivalent expression:<ref>{{cite journal|last1=Blanco|first1=Jose-Luis|title=A tutorial on se (3) transformation parameterizations and on-manifold optimization|journal=University of Malaga, Tech. Rep|date=2010|citeseerx=10.1.1.468.5407}}</ref>
:<math> \theta = \mbox{arcsin} (2(
=== Source code ===
Line 261:
== Vector rotation ==
Let us define scalar <math>q_0</math> and vector <math>\vec{q}</math> such that <math>\mathbf{q} = (q_0,\vec{q}) = q_0+
Note that the canonical way to rotate a three-dimensional vector <math>\vec{v}</math> by a quaternion <math>q</math> defining an [[#Conversion|Euler rotation]] is via the formula
:<math>\mathbf{p}^{\,\prime} = \mathbf{qpq}^\ast</math>
where <math>\mathbf{p} = (0,\vec{v}) = 0+
:<math>\vec{t} = 2\vec{q} \times \vec{v}</math>
:<math>\vec{v}^{\,\prime} = \vec{v} + q_0 \vec{t} + \vec{q} \times \vec{t}</math>
Line 274:
:<math>
\begin{align}
\mathbf{
& = (r_1 r_2 - \vec{v}
\vec{v}
\end{align}
</math>
|