Larus glider flight sensor system 3.9.2024
Software-In-The-Loop test and validation system
Loading...
Searching...
No Matches
variometer.h
Go to the documentation of this file.
1/***********************************************************************/
25#ifndef VARIOMETER_H_
26#define VARIOMETER_H_
27
29#include "GNSS.h"
30#include "AHRS.h"
31#include <differentiator.h>
32#include "KalmanVario.h"
33#include "KalmanVario_PVA.h"
35#include "embedded_math.h"
37#include "HP_LP_fusion.h"
38
39#if USE_HARDWARE_EEPROM == 0
40#include "EEPROM_emulation.h"
41#endif
42
43#include "pt2.h"
44#include "HP_LP_fusion.h"
45#include "delay_line.h"
46
49{
50public:
52 :
53 vario_averager_pressure( FAST_SAMPLING_TIME / configuration( VARIO_TC)),
54 vario_averager_GNSS( FAST_SAMPLING_TIME / configuration( VARIO_TC)),
55 kinetic_energy_differentiator( 1.0f, FAST_SAMPLING_TIME),
56 KalmanVario_GNSS( 0.0f, 0.0f, 0.0f, - GRAVITY),
57 KalmanVario_pressure( 0.0f, 0.0f, 0.0f, - GRAVITY),
58 specific_energy_differentiator( 1.0f, FAST_SAMPLING_TIME),
59 Kalman_v_a_observer_N(),
60 Kalman_v_a_observer_E(),
61 GNSS_INS_speedcomp_fusioner(SPEED_COMPENSATION_FUSIONER_FEEDBACK),
62 vario_uncompensated_pressure( ZERO),
63 speed_compensation_IAS( ZERO),
64 speed_compensation_GNSS( 0.0f),
65 vario_uncompensated_GNSS( ZERO),
66 specific_energy(0.0f),
67 speed_compensation_INS_GNSS_1(0.0f),
68 speed_compensation_kalman_2(0.0f),
69 speed_compensation_energy_3(0.0f)
70 {
71 };
73 (
77 float GNSS_altitude,
78 float pressure_altitude,
79 float IAS,
80 const float3vector &wind_average,
82 );
83
84 void reset(float pressure_altitude, float GNSS_altitude);
85
86 float get_pressure_altitude( void) const;
87
88 float
89 get_speed_compensation (unsigned index) const
90 {
91 switch (index)
92 {
93 case 0:
94 return speed_compensation_INS_GNSS_1;
95 break;
96 case 1:
97 return speed_compensation_kalman_2;
98 break;
99
100 case 2:
101 return speed_compensation_energy_3;
102 break;
103 default:
104 return speed_compensation_projected_4;
105 break;
106 }
107 }
108
109 float get_speed_compensation_IAS( void ) const
110 {
111 return speed_compensation_IAS;
112 }
113
114 float get_speed_compensation_GNSS( void ) const
115 {
116 return speed_compensation_GNSS;
117 }
118
120 {
121 return vario_uncompensated_GNSS;
122 }
123
124 float get_vario_pressure( void ) const
125 {
126 return (float)( vario_averager_pressure.get_output());
127 }
128
129 float get_vario_GNSS( void ) const
130 {
131 return vario_averager_GNSS.get_output();
132 }
133
134 float get_filtered_GNSS_altitude( void) const
135 {
136 // the Kalman filter operates on *negative* altitude
137 return - KalmanVario_GNSS.get_x( KalmanVario_PVA_t::ALTITUDE);
138 }
139
141 {
142 return KalmanVario_GNSS.get_x( KalmanVario_PVA_t::ACCELERATION_OBSERVED);
143 }
144
145private:
146 // filter systems for variometer
147 pt2<float,float> vario_averager_pressure;
148 pt2<float,float> vario_averager_GNSS;
149 differentiator<float,float>kinetic_energy_differentiator;
150 KalmanVario_PVA_t KalmanVario_GNSS;
151 KalmanVario_t KalmanVario_pressure;
152 differentiator<float,float>specific_energy_differentiator;
153 Kalman_V_A_Aoff_observer_t Kalman_v_a_observer_N;
154 Kalman_V_A_Aoff_observer_t Kalman_v_a_observer_E;
155 HP_LP_fusion <float, float> GNSS_INS_speedcomp_fusioner;
156
157 // variometer-related signals
158 float vario_uncompensated_pressure;
159 float speed_compensation_IAS;
160 float speed_compensation_GNSS;
161 float vario_uncompensated_GNSS;
162 float specific_energy;
163
164 float speed_compensation_INS_GNSS_1;
165 float speed_compensation_kalman_2;
166 float speed_compensation_energy_3;
167 float speed_compensation_projected_4;
168};
169
170#endif /* VARIOMETER_H_ */
attitude and heading reference system (interface)
Replacement on the PC for the nonvolatile memory of the micro-controller.
uBlox GNSS + D-GNSS interface
measurement data fusion filter
Kalman filter for variometer (interface)
Kalman filter for variometer (interface)
Tuning parameters for navigation, wind an variometer.
#define FAST_SAMPLING_TIME
#define GRAVITY
#define SPEED_COMPENSATION_FUSIONER_FEEDBACK
Kalman-filter-based sensor fusion observer for horizontal movement.
Kalman-filter-based sensor fusion observer.
float get_x(state index) const
Kalman-filter-based sensor fusion observer for variometer.
Definition KalmanVario.h:40
datatype get_output(void) const
Definition pt2.h:88
this class is responsible for all glider flight data
Definition variometer.h:49
float get_pressure_altitude(void) const
float get_speed_compensation(unsigned index) const
Definition variometer.h:89
variometer_t(void)
Definition variometer.h:51
float get_vario_GNSS(void) const
Definition variometer.h:129
void update_at_100Hz(const float3vector &gnss_velocity, const float3vector &ahrs_acceleration, const float3vector &heading_vector, float GNSS_altitude, float pressure_altitude, float IAS, const float3vector &wind_average, bool GNSS_fix_avaliable)
calculate instant windspeed and variometer data, update @ 100 Hz
float get_vario_uncompensated_GNSS(void) const
Definition variometer.h:119
float get_speed_compensation_GNSS(void) const
Definition variometer.h:114
float get_vario_pressure(void) const
Definition variometer.h:124
float get_filtered_GNSS_altitude(void) const
Definition variometer.h:134
float get_effective_vertical_acceleration(void) const
Definition variometer.h:140
float get_speed_compensation_IAS(void) const
Definition variometer.h:109
void reset(float pressure_altitude, float GNSS_altitude)
mathematical vector of arbitrary type and size
Definition vector.h:40
delay line for testing purposes
differentiate data (template)
defines platform-dependent algorithms and constants
#define ZERO
float configuration(EEPROM_PARAMETER_ID id)
tunable second order IIR lowpass filter (butterworth)
collection of system tuning parameters