8#include <janus/math/Linalg.hpp>
9#include <janus/math/Quaternion.hpp>
32template <
typename Scalar>
33Vec3<Scalar> translational_dynamics(
const Vec3<Scalar> &velocity_body,
34 const Vec3<Scalar> &omega_body,
35 const Vec3<Scalar> &force_body,
38 Vec3<Scalar> transport = janus::cross(omega_body, velocity_body);
39 return force_body / mass - transport;
60template <
typename Scalar>
61Vec3<Scalar> rotational_dynamics(
const Vec3<Scalar> &omega_body,
62 const Vec3<Scalar> &moment_body,
63 const Mat3<Scalar> &inertia) {
65 Vec3<Scalar> H = inertia * omega_body;
66 Vec3<Scalar> gyroscopic = janus::cross(omega_body, H);
67 Vec3<Scalar> rhs = moment_body - gyroscopic;
70 return janus::solve(inertia, rhs);
87template <
typename Scalar>
89velocity_to_reference_frame(
const Vec3<Scalar> &velocity_body,
90 const janus::Quaternion<Scalar> &attitude) {
91 return attitude.rotate(velocity_body);
104template <
typename Scalar>
105Vec3<Scalar> velocity_to_body_frame(
const Vec3<Scalar> &velocity_ref,
106 const janus::Quaternion<Scalar> &attitude) {
107 return attitude.conjugate().rotate(velocity_ref);
132template <
typename Scalar>
140 velocity_to_reference_frame(
state.velocity_body,
state.attitude);
143 derivs.velocity_dot = translational_dynamics(
144 state.velocity_body,
state.omega_body, force_body, mass_props.mass);
147 derivs.attitude_dot =
152 rotational_dynamics(
state.omega_body, moment_body, mass_props.inertia);
177template <
typename Scalar>
178Vec3<Scalar> translational_dynamics_ecef(
const Vec3<Scalar> &position,
179 const Vec3<Scalar> &velocity_ecef,
180 const Vec3<Scalar> &force_ecef,
182 const Vec3<Scalar> &omega_earth) {
184 Vec3<Scalar> coriolis =
185 Scalar(2) * janus::cross(omega_earth, velocity_ecef);
188 Vec3<Scalar> centrifugal =
189 janus::cross(omega_earth, janus::cross(omega_earth, position));
192 return force_ecef / mass - coriolis - centrifugal;
Definition Guided5Dof.hpp:13
AtmosphericState< Scalar > state(const Scalar &altitude, double scale_height=DEFAULT_SCALE_HEIGHT)
Exponential atmosphere - Complete atmospheric state.
Definition ExponentialAtmosphere.hpp:160
janus::Quaternion< Scalar > quaternion_rate_from_omega(const janus::Quaternion< Scalar > &q, const Vec3< Scalar > &omega_body)
Definition RotationKinematics.hpp:56
Time derivatives of rigid body state.
Definition RigidBodyTypes.hpp:32
Vec3< Scalar > position_dot
Velocity in reference frame [m/s].
Definition RigidBodyTypes.hpp:33
Definition RigidBodyTypes.hpp:24
Definition MassProperties.hpp:65