/*
NavEKF_core_common holds scratch data shared by EKF2 and EKF3
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#pragma once
#include
#include
#include
/*
this declares a common parent class for AP_NavEKF2 and
AP_NavEKF3. The purpose of this class is to hold common static
scratch space variables. These variables do not hold anything that
matters between iterations, they are only intermediate variables. By
placing these in a common parent class we save a lot of memory, but
we also save a lot of CPU (approx 10% on STM32F427) as the compiler
is able to resolve the address of these variables at compile time,
which means significantly faster code
*/
class NavEKF_core_common {
public:
typedef float ftype;
#if MATH_CHECK_INDEXES
typedef VectorN Vector28;
typedef VectorN,24> Matrix24;
#else
typedef ftype Vector28[28];
typedef ftype Matrix24[24][24];
#endif
protected:
static Matrix24 KH; // intermediate result used for covariance updates
static Matrix24 KHP; // intermediate result used for covariance updates
static Matrix24 nextP; // Predicted covariance matrix before addition of process noise to diagonals
static Vector28 Kfusion; // intermediate fusion vector
// fill all the common scratch variables with NaN on SITL
void fill_scratch_variables(void);
};