17#ifndef GNCUTILS_EKF_EKFDYNAMICS_HPP
18#define GNCUTILS_EKF_EKFDYNAMICS_HPP
38 template <u
int32 N, u
int32 O, u
int32 D>
49 const std::array<floating_point, N> &tar_state,
50 const std::array<floating_point, O> &obs_state,
51 std::array<floating_point, N> &tar_state_dot) {
63 const std::array<floating_point, N> &tar_state,
64 const std::array<floating_point, O> &obs_state,
65 std::array<floating_point, N*N> &dynamics_Jacobian) {
77 const std::array<floating_point, N> &tar_state,
78 const std::array<floating_point, O> &obs_state,
79 std::array<floating_point, N*D> &dynamics_mapping) {
91 const std::array<floating_point, N> &tar_state,
92 const std::array<floating_point, O> &obs_state,
93 std::array<floating_point, D*D> &process_covariance) {
105 const std::array<floating_point, N> &tar_state,
106 const std::array<floating_point, O> &obs_state,
107 std::array<floating_point, O> &obs_state_dot) {
116 const std::array<floating_point, N+N*N+O> &state,
117 std::array<floating_point, N+N*N+O> &out_rates)
override {
119 for (uint32 i = 0; i < N; ++i) {
120 _state_vector[i] = state[i];
122 _PP.setFromArray(&state[N]);
123 for (uint32 i = 0; i < O; ++i) {
124 _observer_vector[i] = state[N+N*N+i];
130 if (_error > 0) {
return _error;}
else {_saved_warning = _error;}
131 _F.setFromArray(&_tmp_F_array[0]);
132 _F.transpose(_F_tpose);
135 if (_error > 0) {
return _error;}
else {_saved_warning = _error;}
136 _M.setFromArray(&_tmp_M_array[0]);
137 _M.transpose(_M_tpose);
140 if (_error > 0) {
return _error;}
else {_saved_warning = _error;}
141 _Q.setFromArray(&_tmp_Q_array[0]);
145 if (_error > 0) {
return _error;}
else {_saved_warning = _error;}
146 for (uint32 i = 0; i < N; ++i) {
147 out_rates[i] = _m_dot[i];
151 _P_dot = _F*_PP + _PP*_F_tpose + _M*_Q*_M_tpose;
152 _P_dot.getAsArray(&out_rates[N]);
156 if (_error > 0) {
return _error;}
else {_saved_warning = _error;}
157 for (uint32 i = 0; i < O; ++i) {
158 out_rates[i+N+N*N] = _o_dot[i];
161 return _saved_warning;
166 int16 _saved_warning;
169 std::array<floating_point, N> _state_vector, _m_dot;
171 std::array<floating_point, O> _observer_vector, _o_dot;
174 std::array<floating_point, N*N> _tmp_F_array;
178 std::array<floating_point, N*D> _tmp_M_array;
183 std::array<floating_point, D*D> _tmp_Q_array;
Matrix math implementation.
Definition Matrix.hpp:55
Definition EkfDynamics.hpp:39
virtual int16 calculateNoiseCovariance(floating_point time, const std::array< floating_point, N > &tar_state, const std::array< floating_point, O > &obs_state, std::array< floating_point, D *D > &process_covariance)
Function to calculate the covariance matrix of a given process with a specific noise profile.
Definition EkfDynamics.hpp:90
int16 calculateRates(floating_point time, const std::array< floating_point, N+N *N+O > &state, std::array< floating_point, N+N *N+O > &out_rates) override
Function to calculate rates from current state of system.
Definition EkfDynamics.hpp:115
virtual int16 calculateDynamicsJacobian(floating_point time, const std::array< floating_point, N > &tar_state, const std::array< floating_point, O > &obs_state, std::array< floating_point, N *N > &dynamics_Jacobian)
Function to calculate the dynamics function Jacobian from current state of system.
Definition EkfDynamics.hpp:62
virtual int16 calculateObserverDynamics(floating_point time, const std::array< floating_point, N > &tar_state, const std::array< floating_point, O > &obs_state, std::array< floating_point, O > &obs_state_dot)
Function to calculate the observer state vector time vector.
Definition EkfDynamics.hpp:104
virtual int16 calculateDynamicsNoiseMappingMatrix(floating_point time, const std::array< floating_point, N > &tar_state, const std::array< floating_point, O > &obs_state, std::array< floating_point, N *D > &dynamics_mapping)
Function to calculate the matrix that maps the noise configuration space to the state configuration s...
Definition EkfDynamics.hpp:76
virtual int16 calculateDynamics(floating_point time, const std::array< floating_point, N > &tar_state, const std::array< floating_point, O > &obs_state, std::array< floating_point, N > &tar_state_dot)
Function to calculate a state time derivative from current state of system.
Definition EkfDynamics.hpp:48
#define WARNING_NOT_OVERRIDDEN
Warning when a virtual function is not called but not overwridden and should not result in fault wort...
Definition clockwerkerrors.h:172
Definition DeadReckon.cpp:20