Larus glider flight sensor system 3.9.2024
Software-In-The-Loop test and validation system
Loading...
Searching...
No Matches
navigator.cpp
Go to the documentation of this file.
1/***********************************************************************/
25#include <navigator.h>
26
27// to be called at 100 Hz
29 const float3vector &acc,
30 const float3vector &mag,
31 const float3vector &gyro)
32{
33 ahrs.update( gyro, acc, mag,
34 GNSS_acceleration,
35 GNSS_heading,
36 GNSS_fix_type == (SAT_FIX | SAT_HEADING));
37
38#if DEVELOPMENT_ADDITIONS
39 ahrs_magnetic.update_compass(
40 gyro, acc, mag,
41 GNSS_acceleration);
42#endif
45 heading_vector[EAST] = ahrs.get_east ();
46 heading_vector[DOWN] = ahrs.get_down ();
47
48 wind_observer.process_at_100_Hz( GNSS_velocity - heading_vector * TAS);
49
50 flight_observer.update_at_100Hz (
51 GNSS_velocity,
54 GNSS_negative_altitude,
55 atmosphere.get_negative_altitude(),
56 IAS,
57 wind_observer.get_speed_compensator_wind(),
58 (GNSS_fix_type != 0)
59 );
60}
61
63{
64 GNSS_fix_type = coordinates.sat_fix_type;
65
66 if (coordinates.sat_fix_type == SAT_FIX_NONE) // presently no GNSS fix
67 {
68 GNSS_velocity = { 0 };
69 GNSS_acceleration = { 0 };
70 GNSS_heading = 0.0f;
71 GNSS_negative_altitude = 0.0f;
72 GNSS_speed = 0.0f;
73 }
74 else
75 {
76 GNSS_velocity = coordinates.velocity;
77 GNSS_acceleration = coordinates.acceleration;
78 GNSS_heading = coordinates.relPosHeading;
79 GNSS_negative_altitude = coordinates.position[DOWN];
80 GNSS_speed = coordinates.speed_motion;
81 }
82}
83
84// to be called at 10 Hz
86{
87 bool landing_detected=false;
89 air_pressure_resampler_100Hz_10Hz.get_output(),
90 flight_observer.get_filtered_GNSS_altitude());
91
92 atmosphere.update_density_correction(); // here because of the 10 Hz call frequency
93
94 wind_observer.process_at_10_Hz( ahrs);
95
96 vario_integrator.update (flight_observer.get_vario_GNSS(), // here because of the update rate 10Hz
97 ahrs.get_euler ().y,
98 ahrs.get_circling_state ());
99
100 airborne_detector.report_to_be_airborne( abs( flight_observer.get_speed_compensation_GNSS()) > AIRBORNE_TRIGGER_SPEED);
101 if( airborne_detector.detect_just_landed())
102 {
104 landing_detected = true;
105 }
106 return landing_detected;
107}
108
111{
112 d.TAS = TAS_averager.get_output();
113 d.IAS = IAS_averager.get_output();
114
115 d.euler = ahrs.get_euler();
116 d.q = ahrs.get_attitude();
117
118 d.vario = flight_observer.get_vario_GNSS(); // todo pick one vario
119 d.vario_pressure = flight_observer.get_vario_pressure();
120 d.integrator_vario = vario_integrator.get_output();
121 d.vario_uncompensated = flight_observer.get_vario_uncompensated_GNSS();
122
123 d.wind = wind_observer.get_instant_value();
124 d.wind_average = wind_observer.get_average_value();
125
126 d.speed_compensation_TAS = flight_observer.get_speed_compensation_IAS();
127 d.speed_compensation_GNSS = flight_observer.get_speed_compensation_GNSS();
128 d.effective_vertical_acceleration
129 = flight_observer.get_effective_vertical_acceleration();
130
131 d.circle_mode = ahrs.get_circling_state();
132 d.turn_rate = ahrs.get_turn_rate();
133 d.slip_angle = ahrs.getSlipAngle();
134 d.pitch_angle = ahrs.getPitchAngle();
135 d.G_load = ahrs.get_G_load();
136 d.pressure_altitude = - atmosphere.get_negative_altitude();
137 d.magnetic_disturbance = ahrs.getMagneticDisturbance();
138 d.air_density = atmosphere.get_density();
139 d.nav_induction_gnss = ahrs.get_nav_induction();
140
141#if DEVELOPMENT_ADDITIONS
142
143 d.QFF = atmosphere.get_QFF();
144 d.nav_correction = ahrs.get_nav_correction();
145 d.gyro_correction = ahrs.get_gyro_correction();
146 d.nav_acceleration_gnss = ahrs.get_nav_acceleration();
147
148 d.euler_magnetic = ahrs_magnetic.get_euler();
149 d.q_magnetic = ahrs_magnetic.get_attitude();
150 d.nav_acceleration_mag = ahrs_magnetic.get_nav_acceleration();
151 d.nav_induction_mag = ahrs_magnetic.get_nav_induction();
152
153 d.HeadingDifferenceAhrsDgnss = ahrs.getHeadingDifferenceAhrsDgnss();
154 d.satfix = (float)(d.c.sat_fix_type);
155 d.inst_wind_N = wind_observer.get_measurement()[NORTH];
156 d.inst_wind_E = wind_observer.get_measurement()[EAST];
157 d.headwind = wind_observer.get_headwind();
158 d.crosswind = wind_observer.get_crosswind();
159 d.inst_wind_corrected_N = wind_observer.get_corrected_wind()[NORTH];
160 d.inst_wind_corrected_E = wind_observer.get_corrected_wind()[EAST];
161 for( unsigned i=0; i<3; ++i)
162 d.speed_compensation[i] = flight_observer.get_speed_compensation(i);
163 d.cross_acc_correction = ahrs_magnetic.get_cross_acc_correction();
164 d.vario_wind_N = wind_observer.get_speed_compensator_wind()[NORTH];
165 d.vario_wind_E = wind_observer.get_speed_compensator_wind()[EAST];
166 d.body_induction = ahrs.getBodyInduction();
167 d.body_induction_error = ahrs.getBodyInductionError();
168// d.body_induction_error = ahrs_magnetic.getBodyInductionError();
169 d.gyro_correction_power = ahrs.getGyro_correction_Power();
170#endif
171}
@ DOWN
Definition AHRS.h:42
@ EAST
Definition AHRS.h:42
@ NORTH
Definition AHRS.h:42
#define SAT_FIX_NONE
Definition GNSS.h:98
#define SAT_HEADING
Definition GNSS.h:100
#define SAT_FIX
Definition GNSS.h:99
#define AIRBORNE_TRIGGER_SPEED
speed-compensator vario value m/s
float3vector getBodyInductionError() const
Definition AHRS.h:179
float getSlipAngle() const
Definition AHRS.h:140
float get_down(void) const
Definition AHRS.h:102
float get_east(void) const
Definition AHRS.h:98
float get_G_load(void) const
Definition AHRS.h:155
float get_north(void) const
Definition AHRS.h:94
const float3vector & get_gyro_correction(void) const
Definition AHRS.h:118
eulerangle< ftype > get_euler(void) const
Definition AHRS.h:78
void write_calibration_into_EEPROM(void)
Definition AHRS.cpp:429
circle_state_t get_circling_state(void) const
Definition AHRS.h:134
float getPitchAngle() const
Definition AHRS.h:146
quaternion< ftype > get_attitude(void) const
Definition AHRS.h:82
const float3vector & get_nav_acceleration(void) const
Definition AHRS.h:86
float getMagneticDisturbance() const
Definition AHRS.h:174
float getHeadingDifferenceAhrsDgnss() const
Definition AHRS.h:169
float getGyro_correction_Power() const
Definition AHRS.h:189
const float3vector & get_nav_induction(void) const
Definition AHRS.h:90
float3vector getBodyInduction() const
Definition AHRS.h:184
float get_turn_rate(void) const
Definition AHRS.h:151
const float3vector & get_nav_correction(void)
Definition AHRS.h:126
void update(const float3vector &gyro, const float3vector &acc, const float3vector &mag, const float3vector &GNSS_acceleration, float GNSS_heading, bool GNSS_heading_valid)
Definition AHRS.cpp:168
void report_to_be_airborne(bool yes)
float get_density(void) const
Definition atmosphere.h:76
float get_negative_altitude(void) const
Definition atmosphere.h:80
float get_QFF() const
Definition atmosphere.h:104
void feed_QFF_density_metering(float pressure, float MSL_altitude)
Definition atmosphere.h:109
void update_density_correction(void)
Definition atmosphere.h:60
datatype y
Definition euler.h:17
bool update_at_10Hz()
slow update flight observer data
Definition navigator.cpp:85
void update_at_100Hz(const float3vector &acc, const float3vector &mag, const float3vector &gyro)
update AHRS from IMU
Definition navigator.cpp:28
void report_data(output_data_t &d)
copy all navigator data into output_data structure
void update_GNSS_data(const coordinates_t &coordinates)
update on new navigation data from GNSS
Definition navigator.cpp:62
datatype get_output(void) const
Definition pt2.h:88
void update(const value_t &current_value, float heading, circle_state_t new_state)
const value_t & get_output(void) const
float get_speed_compensation(unsigned index) const
Definition variometer.h:89
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
float3vector get_speed_compensator_wind(void) const
float3vector get_average_value(void) const
float3vector get_instant_value(void) const
float get_crosswind(void) const
float3vector get_measurement(void) const
void process_at_10_Hz(const AHRS_type &ahrs)
float get_headwind(void) const
void process_at_100_Hz(const float3vector &instant_wind)
float3vector get_corrected_wind(void) const
combine sensor observations to provide flight-relevant data
Contains all important data from the GNSS.
Definition GNSS.h:104
float speed_motion
ground speed m/s
Definition GNSS.h:109
float3vector position
NED / meters.
Definition GNSS.h:105
float3vector velocity
NED / m/s.
Definition GNSS.h:106
float3vector acceleration
NED / m/s^2 (from GNSS velocity derivative)
Definition GNSS.h:107
float relPosHeading
heading from D-GNSS
Definition GNSS.h:111
uint8_t sat_fix_type
bit 0: SAT FIX, bit 1: SAT HEADING availale
Definition GNSS.h:124
combination of all input and output data in one structure