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
10constexpr float kMillisecondsToSeconds = 0.001f; // Conversion factor from milliseconds to seconds
11
12struct alignas(8) NoiseVariances {
15};
16
21
22
23
35public:
44 VerticalVelocityEstimator(NoiseVariances noise = {1.0f, 0.1f});
45
52 void init(InitialState initialState);
53
63 void update(const AccelerationTriplet& accel,
64 const DataPoint &altitude);
65
69 virtual float getEstimatedAltitude() const;
70
74 virtual float getEstimatedVelocity() const;
75
79 virtual uint32_t getTimestamp() const;
80
84 virtual float getInertialVerticalAcceleration() const;
85
89 virtual int8_t getVerticalAxis() const;
90
94 virtual int8_t getVerticalDirection() const;
95
96private:
101 void determineVerticalAxis(const std::array<float, 3>& rawAcl);
102
103private:
104 // Kalman filter state: altitude (m), vertical velocity (m/s).
105 float stateAltitude_m_;
106 float stateVelocity_mps_;
107
108 // Covariance matrix (2x2).
109 float P_[2][2] = {{}, {}};
110
111 // Time of last update (milliseconds).
112 uint32_t lastTimestamp_ms_;
113
114 // True after init() has been called.
115 bool initialized_;
116
117 // Noise parameters.
118 float accelNoiseVariance_; // Acceleration noise variance (process noise).
119 float altimeterNoiseVariance_; // Altimeter noise variance (measurement noise).
120
121 // Gravity constant (m/s²).
122 static constexpr float kGravity_mps2 = 9.81f;
123
124 // Which axis is vertical, and in what direction?
125 int8_t verticalAxis_;
126 int8_t verticalDirection_;
127 bool verticalAxisDetermined_;
128
129 // Latest computed inertial acceleration along the vertical axis.
130 float inertialVerticalAcceleration_;
131};
132
133#endif // VELOCITY_ESTIMATOR_H
constexpr float kMillisecondsToSeconds
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})
virtual float getInertialVerticalAcceleration() const
void update(const AccelerationTriplet &accel, const DataPoint &altitude)
void init(InitialState initialState)