28#include "pprzlink/messages.h"
101 k->
P[0][0] = 1; k->
P[0][1] = 0; k->
P[0][2] = 0;
102 k->
P[1][0] = 0; k->
P[1][1] = 1; k->
P[1][2] = 0;
103 k->
P[2][0] = 0; k->
P[2][1] = 0; k->
P[2][2] = 0.0001;
108 k->
Ad[0][0] = 1; k->
Ad[0][1] = k->
Te; k->
Ad[0][2] = 0;
109 k->
Ad[1][0] = 0; k->
Ad[1][1] = 1; k->
Ad[1][2] = 0;
110 k->
Ad[2][0] = 0; k->
Ad[2][1] = 0; k->
Ad[2][2] = 1;
117 k->
Md[0][0] =
pow(k->
Te, 1.5) / 2; k->
Md[0][1] = 0;
118 k->
Md[1][0] =
pow(k->
Te, 0.5); k->
Md[1][1] = 0;
119 k->
Md[2][0] = 0; k->
Md[2][1] =
pow(k->
Te, 0.5);
140 k->
X[0] = k->
Ad[0][0] * k->
X[0] + k->
Ad[0][1] * k->
X[1] + k->
Ad[0][2] * k->
X[2] + k->
Bd[0] *
accVert;
141 k->
X[1] = k->
Ad[1][0] * k->
X[0] + k->
Ad[1][1] * k->
X[1] + k->
Ad[1][2] * k->
X[2] + k->
Bd[1] *
accVert;
142 k->
X[2] = k->
Ad[2][0] * k->
X[0] + k->
Ad[2][1] * k->
X[1] + k->
Ad[2][2] * k->
X[2] + k->
Bd[2] *
accVert;
146 for (i = 0; i < 3; i++) {
147 for (
j = 0;
j < 3;
j++) {
148 I[i][
j] = k->
Ad[i][0] * k->
P[0][
j] + k->
Ad[i][1] * k->
P[1][
j] + k->
Ad[i][2] * k->
P[2][
j];
152 for (i = 0; i < 3; i++) {
153 for (
j = 0;
j < 3;
j++) {
154 k->
P[i][
j] =
I[i][0] * k->
Ad[
j][0] +
I[i][1] * k->
Ad[
j][1] +
I[i][2] * k->
Ad[
j][2];
158 for (i = 0; i < 3; i++) {
159 for (
j = 0;
j < 2;
j++) {
160 J[i][
j] = k->
Md[i][0] * k->
W[0][
j] + k->
Md[i][1] * k->
W[1][
j];
164 for (i = 0; i < 3; i++) {
165 for (
j = 0;
j < 3;
j++) {
166 k->
P[i][
j] = k->
P[i][
j] +
J[i][0] * k->
Md[
j][0] +
J[i][1] * k->
Md[
j][1];
185 float Kf[3] = { 0., 0., 0. };
201 for (i = 0; i < 3; i++) {
207 I[0][0] =
Kf[0];
I[0][1] = 0;
I[0][2] = 0;
208 I[1][0] =
Kf[1];
I[1][1] = 0;
I[1][2] = 0;
209 I[2][0] =
Kf[2];
I[2][1] = 0;
I[2][2] = 0;
211 for (i = 0; i < 3; i++) {
212 for (
j = 0;
j < 3;
j++) {
213 k->
P[i][
j] = k->
P[i][
j] -
I[i][0] * k->
P[0][
j] -
I[i][1] * k->
P[1][
j] -
I[i][2] * k->
P[2][
j];
232 float Kf[3] = { 0., 0., 0. };
241 Kf[0] = (k->
P[0][0] + k->
P[0][2]) /
div;
242 Kf[1] = (k->
P[1][0] + k->
P[1][2]) /
div;
243 Kf[2] = (k->
P[2][0] + k->
P[2][2]) /
div;
248 for (i = 0; i < 3; i++) {
254 I[0][0] =
Kf[0];
I[0][1] = 0;
I[0][2] =
Kf[0];
255 I[1][0] =
Kf[1];
I[1][1] = 0;
I[1][2] =
Kf[1];
256 I[2][0] =
Kf[2];
I[2][1] = 0;
I[2][2] =
Kf[2];
258 for (i = 0; i < 3; i++) {
259 for (
j = 0;
j < 3;
j++) {
260 k->
P[i][
j] = k->
P[i][
j] -
I[i][0] * k->
P[0][
j] -
I[i][1] * k->
P[1][
j] -
I[i][2] * k->
P[2][
j];
float MarcheAleaBiaisAltimetre
void kalmanEstimation(TypeKalman *k, float accVert)
void kalmanCorrectionAltimetre(TypeKalman *k, float altitude_altimetre)
float MarcheAleaAccelerometre
void alt_filter_init(void)
void alt_filter_periodic(void)
void kalmanInit(TypeKalman *k)
void kalmanCorrectionGPS(TypeKalman *k, float altitude_gps)
float P[KALT_N_ETAT][KALT_N_ETAT]
float Md[KALT_N_ETAT][KALT_N_ETAT - 1]
float Ad[KALT_N_ETAT][KALT_N_ETAT]
float W[KALT_N_ETAT - 1][KALT_N_ETAT - 1]
Driver for the EagleTree Systems Altitude Sensor.
Common code for AP and FBW telemetry.
struct GpsState gps
global GPS state
Device independent GPS code (interface)
int32_t hmsl
height above mean sea level (MSL) in mm
arch independent UART (Universal Asynchronous Receiver/Transmitter) API