Avionics
Core avionics package for CURE flight computers
Loading...
Searching...
No Matches
VerticalVelocityEstimator.h
Go to the documentation of this file.
1#ifndef VELOCITY_ESTIMATOR_H
2#define VELOCITY_ESTIMATOR_H
3
4#include <array>
5#include <cstdint>
6
9
10
11
12constexpr float MINIMUM_DELTA_T_S = 0.01f; // Minimum delta time for updates (10ms)
13constexpr float MILLISECONDS_TO_SECONDS = 0.001f; // Conversion factor from milliseconds to seconds
14
15struct alignas(8) NoiseVariances {
18};
19
24
25
26
38public:
47 VerticalVelocityEstimator(NoiseVariances noise = {1.0f, 0.1f});
48
55 void init(InitialState initialState);
56
66 void update(const AccelerationTriplet& accel,
67 const DataPoint &altimeter);
68
72 virtual float getEstimatedAltitude() const;
73
77 virtual float getEstimatedVelocity() const;
78
82 virtual uint32_t getTimestamp() const;
83
87 virtual float getInertialVerticalAcceleration() const;
88
92 virtual int8_t getVerticalAxis() const;
93
97 virtual int8_t getVerticalDirection() const;
98
99private:
104 void determineVerticalAxis(const std::array<float, 3>& rawAcl);
105
106private:
107 // Kalman filter state: altitude (m), vertical velocity (m/s).
108 float state_alt;
109 float state_vel;
110
111 // Covariance matrix (2x2).
112 float P[2][2] = {{}, {}};
113
114 // Time of last update (milliseconds).
115 uint32_t lastTimestamp_ms;
116
117 // True after init() has been called.
118 bool initialized;
119
120 // Noise parameters.
121 float accelNoiseVariance; // Acceleration noise variance (process noise).
122 float altimeterNoiseVariance; // Altimeter noise variance (measurement noise).
123
124 // Gravity constant (m/s²).
125 const float g = 9.81f;
126
127 // Which axis is vertical, and in what direction?
128 int8_t verticalAxis;
129 int8_t verticalDirection;
130 bool verticalAxisDetermined;
131
132 // Latest computed inertial acceleration along the vertical axis.
133 float inertialVerticalAcceleration;
134};
135
136#endif // VELOCITY_ESTIMATOR_H
constexpr float MILLISECONDS_TO_SECONDS
constexpr float MINIMUM_DELTA_T_S
Timestamped float measurement container.
Definition DataPoint.h:11
virtual int8_t getVerticalDirection() const
virtual uint32_t getTimestamp() const
VerticalVelocityEstimator(NoiseVariances noise={1.0f, 0.1f})
void update(const AccelerationTriplet &accel, const DataPoint &altimeter)
virtual float getInertialVerticalAcceleration() const
void init(InitialState initialState)