11#include <janus/janus.hpp>
25template <
typename Scalar>
48template <
typename Scalar>
50 const Scalar &angle_cmd,
const Scalar &omega_n,
52 Scalar omega_sq = omega_n * omega_n;
53 return omega_sq * (angle_cmd - angle) -
54 Scalar(2) * zeta * omega_n * angle_dot;
69template <
typename Scalar>
71 Scalar cos_gamma = janus::cos(gamma);
72 Scalar sin_gamma = janus::sin(gamma);
73 Scalar cos_chi = janus::cos(chi);
74 Scalar sin_chi = janus::sin(chi);
94template <
typename Scalar>
97 Scalar cos_gamma = janus::cos(gamma);
98 Scalar sin_gamma = janus::sin(gamma);
99 Scalar cos_chi = janus::cos(chi);
100 Scalar sin_chi = janus::sin(chi);
101 Scalar cos_phi = janus::cos(phi);
102 Scalar sin_phi = janus::sin(phi);
106 Vec3<Scalar> up_v{sin_gamma * cos_chi, sin_gamma * sin_chi, cos_gamma};
110 Vec3<Scalar> right_v{-sin_chi, cos_chi, Scalar(0)};
113 return cos_phi * up_v + sin_phi * right_v;
124template <
typename Scalar>
126 Scalar cos_theta = janus::cos(theta);
127 Scalar sin_theta = janus::sin(theta);
128 Scalar cos_psi = janus::cos(psi);
129 Scalar sin_psi = janus::sin(psi);
146template <
typename Scalar>
148 Scalar cos_psi = janus::cos(psi);
149 Scalar sin_psi = janus::sin(psi);
152 return Vec3<Scalar>{-sin_psi, cos_psi, Scalar(0)};
163template <
typename Scalar>
166 Scalar cos_theta = janus::cos(theta);
167 Scalar sin_theta = janus::sin(theta);
168 Scalar cos_psi = janus::cos(psi);
169 Scalar sin_psi = janus::sin(psi);
172 return Vec3<Scalar>{sin_theta * cos_psi, sin_theta * sin_psi, cos_theta};
190template <
typename Scalar>
192 const Scalar &lift,
const Scalar &
mass,
193 const Scalar &
gravity,
const Scalar &gamma,
194 const Scalar &chi,
const Scalar &phi) {
197 Vec3<Scalar> D_dir = -T_dir;
199 Vec3<Scalar> grav{Scalar(0), Scalar(0),
gravity};
201 return (thrust /
mass) * T_dir + (drag /
mass) * D_dir +
202 (lift /
mass) * L_dir + grav;
216template <
typename Scalar>
218 const Scalar &normal_force,
219 const Scalar &side_force,
const Scalar &
mass,
220 const Scalar &
gravity,
const Scalar &theta,
225 Vec3<Scalar> D_dir = -T_dir;
227 Vec3<Scalar> grav{Scalar(0), Scalar(0),
gravity};
229 return (thrust /
mass) * T_dir + (drag /
mass) * D_dir +
230 (normal_force /
mass) * N_dir + (side_force /
mass) * S_dir + grav;
250template <
typename Scalar>
251Scalar
gamma_dot(
const Scalar &lift,
const Scalar &weight,
const Scalar &
mass,
252 const Scalar &velocity,
const Scalar &gamma,
254 Scalar cos_phi = janus::cos(phi);
255 Scalar cos_gamma = janus::cos(gamma);
256 return (lift * cos_phi - weight * cos_gamma) /
257 (
mass * velocity + Scalar(1e-12));
270template <
typename Scalar>
272 const Scalar &velocity,
const Scalar &gamma,
274 Scalar sin_phi = janus::sin(phi);
275 Scalar cos_gamma = janus::cos(gamma);
276 return (lift * sin_phi) /
277 (
mass * velocity * (cos_gamma + Scalar(1e-12)) + Scalar(1e-12));
287template <
typename Scalar>
289 return lift / (weight + Scalar(1e-12));
301template <
typename Scalar>
304 return janus::atan(velocity * chi_dot /
gravity);
Definition Guided5Dof.hpp:13
Vec3< Scalar > thrust_direction_stt(const Scalar &theta, const Scalar &psi)
Definition Guided5Dof.hpp:125
Vec3< Scalar > lift_direction_btt(const Scalar &gamma, const Scalar &chi, const Scalar &phi)
Definition Guided5Dof.hpp:95
Vec3< Scalar > velocity_dot_btt(const Scalar &thrust, const Scalar &drag, const Scalar &lift, const Scalar &mass, const Scalar &gravity, const Scalar &gamma, const Scalar &chi, const Scalar &phi)
Definition Guided5Dof.hpp:191
Scalar chi_dot_btt(const Scalar &lift, const Scalar &mass, const Scalar &velocity, const Scalar &gamma, const Scalar &phi)
Definition Guided5Dof.hpp:271
Scalar bank_for_turn_rate(const Scalar &velocity, const Scalar &chi_dot, const Scalar &gravity)
Definition Guided5Dof.hpp:302
Vec3< Scalar > side_force_direction_stt(const Scalar &theta, const Scalar &psi)
Definition Guided5Dof.hpp:147
Vec3< Scalar > normal_force_direction_stt(const Scalar &theta, const Scalar &psi)
Definition Guided5Dof.hpp:164
Vec3< Scalar > position_dot(const Vec3< Scalar > &velocity)
Definition Guided5Dof.hpp:26
Scalar attitude_response_accel(const Scalar &angle, const Scalar &angle_dot, const Scalar &angle_cmd, const Scalar &omega_n, const Scalar &zeta)
Definition Guided5Dof.hpp:49
Vec3< Scalar > velocity_dot_stt(const Scalar &thrust, const Scalar &drag, const Scalar &normal_force, const Scalar &side_force, const Scalar &mass, const Scalar &gravity, const Scalar &theta, const Scalar &psi)
Definition Guided5Dof.hpp:217
Scalar gamma_dot(const Scalar &lift, const Scalar &weight, const Scalar &mass, const Scalar &velocity, const Scalar &gamma, const Scalar &phi)
Definition Guided5Dof.hpp:251
Vec3< Scalar > thrust_direction_btt(const Scalar &gamma, const Scalar &chi)
Definition Guided5Dof.hpp:70
Scalar load_factor_from_lift(const Scalar &lift, const Scalar &weight)
Definition Guided5Dof.hpp:288
Definition GravityTypes.hpp:7
Definition MassProperties.hpp:12