2
3
4
5
6
7
8
9
10
11
12
13
14
15
17#ifndef DYNAMICS_FUNCTIONS_HPP
18#define DYNAMICS_FUNCTIONS_HPP
20#include "core/Matrix.hpp"
22#define NUM_INPUT_STATES 6
31 template <
typename T,
unsigned int N,
unsigned int Qn>
32 void calcSimpleSncMatrix(T t_step,
const Matrix<T, Qn, Qn> &Qc,
36 multiply(t_step, B, omega);
39 Qd = omega*Qc*omega.transpose();
59 T x2 = state[0]*state[0];
60 T y2 = state[1]*state[1];
61 T z2 = state[2]*state[2];
64 T r = std::sqrt(x2 + y2 + z2);
73 T common_mu_r6_over_r17;
74 int err = clockwerk::safeDivide(0.5*mu, r11, common_mu_r6_over_r17);
78 T tmp_1 = 105.0*r2*(J2R2*z2 - J3R3*state[2]);
84 A[3][0] = -common_mu_r6_over_r17*(2.0*r8 + r6*(3.0*J2R2 - 6.0*x2) - 15.0*J2R2*r4*(x2 + z2) + J3R3*(15.0*r4*state[2] - 35.0*r2*z3 + 315.0*x2*z3) + tmp_1*x2);
85 A[3][1] = A[4][0] = 3.0*common_mu_r6_over_r17*state[0]*state[1]*(2.0*r6 + 5.0*J2R2*r4 - 105.0*J3R3*z3 - 35.0*J2R2*r2*z2 + 35.0*J3R3*r2*state[2]);
86 A[3][2] = A[5][0] = 3.0*common_mu_r6_over_r17*state[0]*(2.0*r6*state[2] - 5.0*J3R3*r4 - 105.0*J3R3*z4 + 15.0*J2R2*r4*state[2] - 35.0*J2R2*r2*z3 + 70.0*J3R3*r2*z2);
87 A[4][1] = -common_mu_r6_over_r17*(2.0*r8 + r6*(3.0*J2R2 - 6.0*y2) - 15.0*J2R2*r4*(y2 + z2) + J3R3*(15.0*r4*state[2] - 35.0*r2*z3 + 315.0*y2*z3) + tmp_1*r2);
88 A[4][2] = A[5][1] = 3.0*common_mu_r6_over_r17*state[1]*(2.0*r6*state[2] - 5.0*J3R3*r4 - 105.0*J3R3*z4 + 15.0*J2R2*r4*state[2] - 35.0*J2R2*r2*z3 + 70.0*J3R3*r2*z2);
89 A[5][2] = -common_mu_r6_over_r17*(2.0*r8 - 6.0*r6*z2 + J3R3*state[2]*(315.0*z4 + 75.0*r4 - 350.0*r2*z2) + J2R2*(9.0*r6 + 105.0*r2*z4 - 90.0*r4*z2));
102 template <
typename T>
111 T x2 = state[0]*state[0];
112 T y2 = state[1]*state[1];
113 T z2 = state[2]*state[2];
116 T r = std::sqrt(x2 + y2 + z2);
125 T common_mu_r6_over_r17;
126 int err = clockwerk::safeDivide(0.5*mu, r11, common_mu_r6_over_r17);
127 if(err) {
return err;}
130 T tmp_1 = 105.0*r2*(J2R2*z2 - J3R3*state[2]);
136 A[3][0] = -common_mu_r6_over_r17*(2.0*r8 + r6*(3.0*J2R2 - 6.0*x2) - 15.0*J2R2*r4*(x2 + z2) + J3R3*(15.0*r4*state[2] - 35.0*r2*z3 + 315.0*x2*z3) + tmp_1*x2);
137 A[3][1] = A[4][0] = 3.0*common_mu_r6_over_r17*state[0]*state[1]*(2.0*r6 + 5.0*J2R2*r4 - 105.0*J3R3*z3 - 35.0*J2R2*r2*z2 + 35.0*J3R3*r2*state[2]);
138 A[3][2] = A[5][0] = 3.0*common_mu_r6_over_r17*state[0]*(2.0*r6*state[2] - 5.0*J3R3*r4 - 105.0*J3R3*z4 + 15.0*J2R2*r4*state[2] - 35.0*J2R2*r2*z3 + 70.0*J3R3*r2*z2);
139 A[4][1] = -common_mu_r6_over_r17*(2.0*r8 + r6*(3.0*J2R2 - 6.0*y2) - 15.0*J2R2*r4*(y2 + z2) + J3R3*(15.0*r4*state[2] - 35.0*r2*z3 + 315.0*y2*z3) + tmp_1*r2);
140 A[4][2] = A[5][1] = 3.0*common_mu_r6_over_r17*state[1]*(2.0*r6*state[2] - 5.0*J3R3*r4 - 105.0*J3R3*z4 + 15.0*J2R2*r4*state[2] - 35.0*J2R2*r2*z3 + 70.0*J3R3*r2*z2);
141 A[5][2] = -common_mu_r6_over_r17*(2.0*r8 - 6.0*r6*z2 + J3R3*state[2]*(315.0*z4 + 75.0*r4 - 350.0*r2*z2) + J2R2*(9.0*r6 + 105.0*r2*z4 - 90.0*r4*z2));
Matrix math implementation.
Definition Matrix.hpp:54
#define NO_ERROR
Definition clockwerkerrors.h:31
#define NUM_INPUT_STATES
Definition dynamicsfunctions.hpp:22