9#include <janus/math/Quaternion.hpp>
28template <
typename Scalar>
31 const janus::Quaternion<Scalar> &q_dot) {
33 auto omega_quat = q.conjugate() * q_dot;
34 Scalar two = Scalar(2);
37 omega(0) = two * omega_quat.x;
38 omega(1) = two * omega_quat.y;
39 omega(2) = two * omega_quat.z;
54template <
typename Scalar>
55janus::Quaternion<Scalar>
57 const Vec3<Scalar> &omega_body) {
59 janus::Quaternion<Scalar> omega_quat(Scalar(0), omega_body(0),
60 omega_body(1), omega_body(2));
61 Scalar half = Scalar(0.5);
62 auto q_dot = q * omega_quat;
63 return janus::Quaternion<Scalar>(half * q_dot.w, half * q_dot.x,
64 half * q_dot.y, half * q_dot.z);
83template <
typename Scalar>
85 const Mat3<Scalar> &R_dot) {
86 Mat3<Scalar> omega_skew = R.transpose() * R_dot;
99template <
typename Scalar>
101 const Vec3<Scalar> &omega_body) {
102 return R *
skew(omega_body);
119template <
typename Scalar>
120janus::Quaternion<Scalar>
122 const janus::Quaternion<Scalar> &q2) {
136template <
typename Scalar>
137janus::Quaternion<Scalar>
139 const janus::Quaternion<Scalar> &q_to) {
140 return q_to * q_from.conjugate();
154template <
typename Scalar>
156 const janus::Quaternion<Scalar> &q_desired) {
158 auto q_error = q_desired * q_actual.conjugate();
Definition Aerodynamics.hpp:11
Mat3< Scalar > skew(const Vec3< Scalar > &v)
Definition DCMUtils.hpp:32
janus::Quaternion< Scalar > compose_rotations(const janus::Quaternion< Scalar > &q1, const janus::Quaternion< Scalar > &q2)
Definition RotationKinematics.hpp:121
janus::Quaternion< Scalar > relative_rotation(const janus::Quaternion< Scalar > &q_from, const janus::Quaternion< Scalar > &q_to)
Definition RotationKinematics.hpp:138
Vec3< Scalar > omega_from_quaternion_rate(const janus::Quaternion< Scalar > &q, const janus::Quaternion< Scalar > &q_dot)
Definition RotationKinematics.hpp:30
janus::Quaternion< Scalar > quaternion_rate_from_omega(const janus::Quaternion< Scalar > &q, const Vec3< Scalar > &omega_body)
Definition RotationKinematics.hpp:56
Vec3< Scalar > rotation_error(const janus::Quaternion< Scalar > &q_actual, const janus::Quaternion< Scalar > &q_desired)
Definition RotationKinematics.hpp:155
Mat3< Scalar > dcm_rate_from_omega(const Mat3< Scalar > &R, const Vec3< Scalar > &omega_body)
Definition RotationKinematics.hpp:100
Vec3< Scalar > rotation_vector_from_quaternion(const janus::Quaternion< Scalar > &q)
Definition AxisAngle.hpp:143
Vec3< Scalar > omega_from_dcm_rate(const Mat3< Scalar > &R, const Mat3< Scalar > &R_dot)
Definition RotationKinematics.hpp:84
Vec3< Scalar > unskew(const Mat3< Scalar > &S)
Definition DCMUtils.hpp:53