2
3
4
5
6
7
8
9
10
11
12
13
14
15
17
18
19
20
26#include "core/Matrix.hpp"
27#include "core/CartesianVector.hpp"
28#include "core/safemath.hpp"
29#include "core/matrixmath.hpp"
75 Quaternion<T>(
const T(&initial)[4]);
79 Quaternion<T>(
const Quaternion<T> &initial);
83 Quaternion<T>(
const std::array<T, 4> &initial);
90 Quaternion<T>&
operator=(
const Quaternion<T>& other);
109 void toDCM(
DCM<T> &dcm_f1_f2)
const;
110 DCM<T> toDCM()
const;
115 void toMRP(MRP<T> &mrp_f1_f2)
const;
116 MRP<T> toMRP()
const;
124 template <
typename T>
125 Quaternion<T>::Quaternion() :
128 template <
typename T>
129 Quaternion<T>::Quaternion(
const T(&initial)[4]) :
132 template <
typename T>
133 Quaternion<T>::Quaternion(
const Quaternion<T> &initial) :
136 template <
typename T>
137 Quaternion<T>::Quaternion(
const std::array<T, 4> &initial) :
140 template <
typename T>
141 Quaternion<T>& Quaternion<T>::
operator=(
const Quaternion<T>& other)
149 for(i = 0; i < 4; i++) {
150 this->values[i][0] = other.values[i][0];
155 template <
typename T>
157 quatdot_f1_f2.values[0][0] = -omega_f1_f2__f1.values[0][0]*
CartesianVector<T, 4>::values[1][0] - omega_f1_f2__f1.values[1][0]*
CartesianVector<T, 4>::values[2][0] - omega_f1_f2__f1.values[2][0]*
CartesianVector<T, 4>::values[3][0];
158 quatdot_f1_f2.values[1][0] = omega_f1_f2__f1.values[0][0]*
CartesianVector<T, 4>::values[0][0] + omega_f1_f2__f1.values[2][0]*
CartesianVector<T, 4>::values[2][0] - omega_f1_f2__f1.values[1][0]*
CartesianVector<T, 4>::values[3][0];
159 quatdot_f1_f2.values[2][0] = omega_f1_f2__f1.values[1][0]*
CartesianVector<T, 4>::values[0][0] - omega_f1_f2__f1.values[2][0]*
CartesianVector<T, 4>::values[1][0] + omega_f1_f2__f1.values[0][0]*
CartesianVector<T, 4>::values[3][0];
160 quatdot_f1_f2.values[3][0] = omega_f1_f2__f1.values[2][0]*
CartesianVector<T, 4>::values[0][0] + omega_f1_f2__f1.values[1][0]*
CartesianVector<T, 4>::values[1][0] - omega_f1_f2__f1.values[0][0]*
CartesianVector<T, 4>::values[2][0];
161 multiply(
static_cast<T>(0.5), quatdot_f1_f2, quatdot_f1_f2);
164 template <
typename T>
165 void Quaternion<T>::
toDCM(
DCM<T> &dcm_f1_f2)
const {
167 T q02, q12, q22, q32, q0q1, q0q2, q0q3, q1q2, q1q3, q2q3;
180 dcm_f1_f2.values[0][0] = q02 + q12 - q22 - q32;
181 dcm_f1_f2.values[0][1] = 2*(q1q2 + q0q3);
182 dcm_f1_f2.values[0][2] = 2*(q1q3 - q0q2);
183 dcm_f1_f2.values[1][0] = 2*(q1q2 - q0q3);
184 dcm_f1_f2.values[1][1] = q02 - q12 + q22 - q32;
185 dcm_f1_f2.values[1][2] = 2*(q2q3 + q0q1);
186 dcm_f1_f2.values[2][0] = 2*(q1q3 + q0q2);
187 dcm_f1_f2.values[2][1] = 2*(q2q3 - q0q1);
188 dcm_f1_f2.values[2][2] = q02 - q12 - q22 + q32;
190 template <
typename T>
191 DCM<T> Quaternion<T>::toDCM()
const {
197 template <
typename T>
198 void Quaternion<T>::
toMRP(MRP<T> &mrp_f1_f2)
const {
206 template <
typename T>
207 MRP<T> Quaternion<T>::toMRP()
const {
213 template <
typename T>
Standard vector class derived from Matrix.
Definition CartesianVector.hpp:39
Class defining a direction cosine matrix inherited from Matrix.
Definition DCM.hpp:71
Matrix math implementation.
Definition Matrix.hpp:54
void toMRP(MRP< T > &mrp_f1_f2) const
Function to convert current attitude to MRP.
Definition Quaternion.hpp:198
void rate(const CartesianVector< T, 3 > &omega_f1_f2__f1, Matrix< T, 4, 1 > &quatdot_f1_f2) const
Function to calculate the rate of change in the current representation based on the omega vector.
Definition Quaternion.hpp:156
Quaternion< T > & operator=(const Quaternion< T > &other)
Equals operator overload for quaternion.
Definition Quaternion.hpp:141
void toDCM(DCM< T > &dcm_f1_f2) const
Function to convert current attitude to DCM.
Definition Quaternion.hpp:165
int rotationAngle(double &val) const
Calculate the rotation angle represented by the quaternion.
Definition Quaternion.hpp:214
#define NO_ERROR
Definition clockwerkerrors.h:31
#define ERROR_INVALID_RANGE
Definition clockwerkerrors.h:50