Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ins_int.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2008-2010 The Paparazzi Team
3 *
4 * This file is part of paparazzi.
5 *
6 * paparazzi is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
9 * any later version.
10 *
11 * paparazzi is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with paparazzi; see the file COPYING. If not, write to
18 * the Free Software Foundation, 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 */
21
29#include "modules/ins/ins_int.h"
30
31#include "modules/core/abi.h"
32
33#include "modules/imu/imu.h"
34#include "modules/gps/gps.h"
35
36#include "generated/airframe.h"
37
38#if USE_VFF_EXTENDED
40#else
42#endif
43
44#if USE_HFF
46#endif
47
48#if defined SITL && USE_NPS
49//#include "nps_fdm.h"
50#include "nps_autopilot.h"
51#include <stdio.h>
52#endif
53
55#include "math/pprz_isa.h"
56#include "math/pprz_stat.h"
57
58#ifndef VFF_R_AGL
59#define VFF_R_AGL 0.2
60#endif
61
62#if USE_SONAR
63#if !USE_VFF_EXTENDED
64#error USE_SONAR needs USE_VFF_EXTENDED
65#endif
66
67#ifdef INS_SONAR_THROTTLE_THRESHOLD
69#endif
70
71#ifndef INS_SONAR_MIN_RANGE
72#define INS_SONAR_MIN_RANGE 0.001
73#endif
74#ifndef INS_SONAR_MAX_RANGE
75#define INS_SONAR_MAX_RANGE 4.0
76#endif
77#define VFF_R_SONAR_0 0.2
78#ifndef VFF_R_SONAR_OF_M
79#define VFF_R_SONAR_OF_M 0.2
80#endif
81
82#endif // USE_SONAR
83
84#if USE_GPS
85#ifndef INS_VFF_R_GPS
86#define INS_VFF_R_GPS 2.0
87#endif
88
89#ifndef INS_VFF_VZ_R_GPS
90#define INS_VFF_VZ_R_GPS 2.0
91#endif
92#endif // USE_GPS
93
95#ifndef INS_MAX_PROPAGATION_STEPS
96#define INS_MAX_PROPAGATION_STEPS 200
97#endif
98
99#ifndef USE_INS_NAV_INIT
100#define USE_INS_NAV_INIT TRUE
101PRINT_CONFIG_MSG("USE_INS_NAV_INIT defaulting to TRUE")
102#endif
103
105#define INS_BARO_MAX_INIT_VAR 1.f // variance threshold to set initial baro measurement
106#ifndef INS_INT_BARO_ID
107#if USE_BARO_BOARD
108#define INS_INT_BARO_ID BARO_BOARD_SENDER_ID
109#else
110#define INS_INT_BARO_ID ABI_BROADCAST
111#endif
112#endif
115static void baro_cb(uint8_t sender_id, uint32_t stamp, float pressure);
116
120#ifndef INS_INT_IMU_ID
121#define INS_INT_IMU_ID ABI_BROADCAST
122#endif
126
127#ifndef INS_INT_GPS_ID
128#define INS_INT_GPS_ID GPS_MULTI_ID
129#endif
133
137#ifndef INS_INT_VEL_ID
138#define INS_INT_VEL_ID ABI_BROADCAST
139#endif
144 float x, float y, float z,
145 float noise_x, float noise_y, float noise_z);
146#ifndef INS_INT_POS_ID
147#define INS_INT_POS_ID ABI_BROADCAST
148#endif
153 float x, float y, float z,
154 float noise_x, float noise_y, float noise_z);
155
159#ifndef INS_INT_AGL_ID
160#define INS_INT_AGL_ID ABI_BROADCAST
161#endif
164static void agl_cb(uint8_t sender_id, uint32_t stamp, float distance);
165
166
169
171
172#if PERIODIC_TELEMETRY
174
182
183static void send_ins_z(struct transport_tx *trans, struct link_device *dev)
184{
187}
188
198#endif
199
200static void ins_ned_to_state(void);
201static void ins_update_from_vff(void);
202#if USE_HFF
203static void ins_update_from_hff(void);
204#endif
205
206
207void ins_int_init(void)
208{
209
210#if USE_INS_NAV_INIT
213#else
214 ins_int.ltp_initialized = false;
215#endif
216
217 /* we haven't had any measurement updates yet, so set the counter to max */
219
220 // Bind to BARO_ABS message
223
224 ins_int.vf_reset = false;
225 ins_int.hf_realign = false;
226
227 /* init vertical and horizontal filters */
229#if USE_HFF
230 hff_init(0., 0., 0., 0.);
231#endif
232
236
237#if PERIODIC_TELEMETRY
241#endif
242
243 /*
244 * Subscribe to scaled IMU measurements and attach callbacks
245 */
250 AbiBindMsgAGL(INS_INT_AGL_ID, &agl_ev, agl_cb); // ABI to the altitude above ground level
252}
253
254static void reset_ref(void)
255{
256#if USE_GPS
257 if (GpsFixValid()) {
258 struct EcefCoor_i ecef_pos = ecef_int_from_gps(&gps);
259 struct LlaCoor_i lla_pos = lla_int_from_gps(&gps);
261 ins_int.ltp_def.lla.alt = lla_pos.alt;
265 } else {
266 ins_int.ltp_initialized = false;
267 }
268#else
269 ins_int.ltp_initialized = false;
270#endif
271
272#if USE_HFF
273 ins_int.hf_realign = true;
274#endif
275 ins_int.vf_reset = true;
276}
277
278static void reset_vertical_ref(void)
279{
280#if USE_GPS
281 if (GpsFixValid()) {
282 struct LlaCoor_i lla_pos = lla_int_from_gps(&gps);
283 struct LlaCoor_i lla = {
285 .lon = stateGetLlaOrigin_i().lon,
286 .alt = lla_pos.alt
287 };
291 }
292#endif
293 ins_int.vf_reset = true;
294}
295
296static void reset_vertical_pos(void)
297{
298 ins_int.vf_reset = true;
299}
300
302{
303 switch (flag) {
304 case INS_RESET_REF:
305 reset_ref();
306 break;
309 break;
312 break;
313 default:
314 // unsupported cases
315 break;
316 }
317}
318
319void ins_int_propagate(struct Int32Vect3 *accel, float dt)
320{
321 // Set body acceleration in the state
323
324 /* untilt accels */
327
329
330 /* Propagate only if we got any measurement during the last INS_MAX_PROPAGATION_STEPS.
331 * Otherwise halt the propagation to not diverge and only set the acceleration.
332 * This should only be relevant in the startup phase when the baro is not yet initialized
333 * and there is no gps fix yet...
334 */
338 } else {
339 // feed accel from the sensors
340 // subtract -9.81m/s2 (acceleration measured due to gravity,
341 // but vehicle not accelerating in ltp)
343 }
344
345#if USE_HFF
346 /* propagate horizontal filter */
348 /* convert and copy result to ins_int */
350#else
353#endif /* USE_HFF */
354
356
357 /* increment the propagation counter, while making sure it doesn't overflow */
360 }
361}
362
363static void baro_cb(uint8_t __attribute__((unused)) sender_id, __attribute__((unused)) uint32_t stamp, float pressure)
364{
365 if (pressure < 1.f)
366 {
367 // bad baro pressure, don't use
368 return;
369 }
370
372#define press_hist_len 10
373 static float press_hist[press_hist_len];
374 static uint8_t idx = 0;
375
376 press_hist[idx] = pressure;
377 idx = (idx + 1) % press_hist_len;
380 // wait for a first positive value
381 ins_int.vf_reset = true;
383 }
384 }
385
387 float height_correction = 0.f;
389 // Calculate the distance to the origin
391 double dist2_to_origin = enu->x * enu->x + enu->y * enu->y;
392
393 // correction for the earth's curvature
394 const double earth_radius = 6378137.0;
396 }
397
398 if (ins_int.vf_reset) {
399 ins_int.vf_reset = false;
400 ins_int.qfe = pressure;
403 }
404
406
407 // The VFF will update in the NED frame
409
410#if USE_VFF_EXTENDED
412#else
414#endif
415
416 /* reset the counter to indicate we just had a measurement update */
418 }
419}
420
421#if USE_GPS
423{
424 if (gps_s->fix < GPS_FIX_3D) {
425 return;
426 }
427
429 reset_ref();
430 }
431
433 struct EcefCoor_i ecef_pos_i = ecef_int_from_gps(gps_s);
435
436 /* calculate body frame position taking BODY_TO_GPS translation (in cm) into account */
437#ifdef INS_BODY_TO_GPS_X
438 /* body2gps translation in body frame */
439 struct Int32Vect3 b2g_b = {
443 };
444 /* rotate offset given in body frame to navigation/ltp frame using current attitude */
447 struct Int32Vect3 b2g_n;
449 /* subtract body2gps translation in ltp from gps position */
451#endif
452
457
458#if INS_USE_GPS_ALT
460#endif
461#if INS_USE_GPS_ALT_SPEED
464#endif
465
466#if USE_HFF
467 /* horizontal gps transformed to NED in meters as float */
471
475
476 if (ins_int.hf_realign) {
477 ins_int.hf_realign = false;
479 }
480 // run horizontal filter
482 // convert and copy result to ins_int
484
485#else /* hff not used */
486 /* simply copy horizontal pos/speed from gps */
491#endif /* USE_HFF */
492
494
495 /* reset the counter to indicate we just had a measurement update */
497}
498#else
499void ins_int_update_gps(struct GpsState *gps_s __attribute__((unused))) {}
500#endif /* USE_GPS */
501
506#if USE_VFF_EXTENDED
507static void agl_cb(uint8_t __attribute__((unused)) sender_id, __attribute__((unused)) uint32_t stamp, float distance) {
508 if (distance <= 0 || !(ins_int.baro_initialized)) {
509 return;
510 }
511
512#if USE_SONAR
513 if (distance > INS_SONAR_MAX_RANGE || distance < INS_SONAR_MIN_RANGE){
514 return;
515 }
516#endif
517#ifdef INS_AGL_THROTTLE_THRESHOLD
519 return;
520 }
521#endif
522#ifdef INS_AGL_BARO_THRESHOLD
523 if(ins_int.baro_z < -INS_SONAR_BARO_THRESHOLD){ /* z down */
524 return;
525 }
526#endif
527
528#if USE_SONAR
529 vff_update_agl(-distance, VFF_R_SONAR_0 + VFF_R_SONAR_OF_M * fabsf(distance));
530#else
531 // TODO: this assumes that you will either have sonar or other agl sensor never both
532 vff_update_agl(-distance, VFF_R_AGL);
533#endif
534 /* reset the counter to indicate we just had a measurement update */
536}
537#else
538static void agl_cb(uint8_t __attribute__((unused)) sender_id, __attribute__((unused)) uint32_t stamp, __attribute__((unused)) float distance) {}
539#endif
540
554
562
563#if USE_HFF
565static void ins_update_from_hff(void)
566{
573}
574#endif
575
576
578 uint32_t stamp, struct Int32Vect3 *accel)
579{
580 PRINT_CONFIG_MSG("Calculating dt for INS int propagation.")
581 /* timestamp in usec when last callback was received */
582 static uint32_t last_stamp = 0;
583
584 if (last_stamp > 0) {
585 float dt = (float)(stamp - last_stamp) * 1e-6;
586 ins_int_propagate(accel, dt);
587 }
588 last_stamp = stamp;
589}
590
591static void gps_cb(uint8_t sender_id __attribute__((unused)),
592 uint32_t stamp __attribute__((unused)),
593 struct GpsState *gps_s)
594{
596}
597
598/* body relative velocity estimate
599 *
600 */
602 uint32_t stamp __attribute__((unused)),
603 float x, float y, float z,
604 float noise_x, float noise_y, float noise_z)
605{
606 struct FloatVect3 vel_body = {x, y, z};
607
608 /* rotate velocity estimate to nav/ltp frame */
611 struct FloatVect3 vel_ned;
612 float_quat_vmult(&vel_ned, &q_b2n, &vel_body);
613
614 // abi message contains an update to the horizontal velocity estimate
615#if USE_HFF
616 struct FloatVect2 vel = {vel_ned.x, vel_ned.y};
617 struct FloatVect2 Rvel = {noise_x, noise_y};
618
619 hff_update_vel(vel, Rvel);
621#else
622 if (noise_x >= 0.f)
623 {
625 }
626 if (noise_y >= 0.f)
627 {
629 }
630
631 static uint32_t last_stamp_x = 0, last_stamp_y = 0;
632 if (noise_x >= 0.f) {
633 if (last_stamp_x > 0)
634 {
635 float dt = (float)(stamp - last_stamp_x) * 1e-6;
636 ins_int.ltp_pos.x += lround(POS_BFP_OF_REAL(dt * vel_ned.x));
637 }
639 }
640
641 if (noise_y >= 0.f)
642 {
643 if (last_stamp_y > 0)
644 {
645 float dt = (float)(stamp - last_stamp_y) * 1e-6;
646 ins_int.ltp_pos.y += lround(POS_BFP_OF_REAL(dt * vel_ned.y));
647 }
649 }
650#endif
651
652 // abi message contains an update to the vertical velocity estimate
653 vff_update_vz_conf(vel_ned.z, noise_z);
654
656
657 /* reset the counter to indicate we just had a measurement update */
659}
660
661/* NED position estimate relative to ltp origin
662 */
664 uint32_t stamp __attribute__((unused)),
665 float x, float y, float z,
666 float noise_x, float noise_y, float noise_z)
667{
668
669#if USE_HFF
670 struct FloatVect2 pos = {x, y};
671 struct FloatVect2 Rpos = {noise_x, noise_y};
672
673 hff_update_pos(pos, Rpos);
675#else
676 if (noise_x >= 0.f)
677 {
679 }
680 if (noise_y >= 0.f)
681 {
683 }
684#endif
685
687
689
690 /* reset the counter to indicate we just had a measurement update */
692}
Main include for ABI (AirBorneInterface).
#define ABI_BROADCAST
Broadcast address.
Definition abi_common.h:58
Event structure to store callbacks in a linked list.
Definition abi_common.h:67
#define UNUSED(x)
struct GpsState gps
global GPS state
Definition gps.c:74
struct LlaCoor_i lla_int_from_gps(struct GpsState *gps_s)
Get GPS lla (integer) Converted on the fly if not available.
Definition gps.c:464
struct EcefCoor_i ecef_vel_int_from_gps(struct GpsState *gps_s)
Get GPS ecef velocity (integer) Converted on the fly if not available.
Definition gps.c:522
struct EcefCoor_i ecef_int_from_gps(struct GpsState *gps_s)
Get GPS ecef pos (integer) Converted on the fly if not available.
Definition gps.c:493
Device independent GPS code (interface)
int32_t hmsl
height above mean sea level (MSL) in mm
Definition gps.h:94
#define GpsFixValid()
Definition gps.h:168
#define GPS_FIX_3D
3D GPS fix
Definition gps.h:44
data structure for GPS information
Definition gps.h:87
void float_quat_vmult(struct FloatVect3 *v_out, struct FloatQuat *q, const struct FloatVect3 *v_in)
rotate 3D vector by quaternion.
Roation quaternion.
#define QUAT_INVERT(_qo, _qi)
#define VECT3_SUB(_a, _b)
#define VECT2_SDIV(_vo, _vi, _s)
#define VECT2_ASSIGN(_a, _x, _y)
#define INT32_POS_OF_CM_DEN
#define INT32_SPEED_OF_CM_S_NUM
#define ACCEL_BFP_OF_REAL(_af)
#define INT32_SPEED_OF_CM_S_DEN
#define INT32_VECT2_SCALE_2(_a, _b, _num, _den)
void int32_quat_vmult(struct Int32Vect3 *v_out, struct Int32Quat *q, struct Int32Vect3 *v_in)
rotate 3D vector by quaternion.
#define INT32_POS_OF_CM_NUM
#define INT32_VECT3_ZERO(_v)
void int32_rmat_transp_vmult(struct Int32Vect3 *vb, struct Int32RMat *m_b2a, struct Int32Vect3 *va)
rotate 3D vector by transposed rotation matrix.
#define POS_BFP_OF_REAL(_af)
#define ACCEL_FLOAT_OF_BFP(_ai)
#define SPEED_BFP_OF_REAL(_af)
Rotation quaternion.
int32_t lat
in degrees*1e7
int32_t hmsl
Height above mean sea level in mm.
int32_t alt
in millimeters above WGS84 reference ellipsoid
int32_t z
Down.
int32_t z
in centimeters
struct LlaCoor_i lla
Reference point in lla.
int32_t x
in centimeters
int32_t y
East.
struct EcefCoor_i ecef
Reference point in ecef.
int32_t y
in centimeters
int32_t lon
in degrees*1e7
int32_t x
North.
void ltp_def_from_ecef_i(struct LtpDef_i *def, struct EcefCoor_i *ecef)
void ned_of_ecef_point_i(struct NedCoor_i *ned, struct LtpDef_i *def, struct EcefCoor_i *ecef)
Convert a point from ECEF to local NED.
void ned_of_ecef_vect_i(struct NedCoor_i *ned, struct LtpDef_i *def, struct EcefCoor_i *ecef)
Rotate a vector from ECEF to NED.
void ltp_def_from_lla_i(struct LtpDef_i *def, struct LlaCoor_i *lla)
vector in EarthCenteredEarthFixed coordinates
vector in Latitude, Longitude and Altitude
vector in North East Down coordinates
static float pprz_isa_height_of_pressure(float pressure, float ref_p)
Get relative altitude from pressure (using simplified equation).
Definition pprz_isa.h:102
static void stateSetAccelNed_i(uint16_t id, struct NedCoor_i *ned_accel)
Set acceleration in NED coordinates (int).
Definition state.h:1127
static void stateSetAccelBody_i(uint16_t id, struct Int32Vect3 *body_accel)
Set acceleration in Body coordinates (int).
Definition state.h:1167
static struct Int32Quat * stateGetNedToBodyQuat_i(void)
Get vehicle body attitude quaternion (int).
Definition state.h:1276
static struct Int32RMat * stateGetNedToBodyRMat_i(void)
Get vehicle body attitude rotation matrix (int).
Definition state.h:1282
static struct FloatQuat * stateGetNedToBodyQuat_f(void)
Get vehicle body attitude quaternion (float).
Definition state.h:1294
static void stateSetLocalOrigin_i(uint16_t id, struct LtpDef_i *ltp_def)
Set the local (flat earth) coordinate frame origin (int).
Definition state.h:519
struct LlaCoor_i stateGetLlaOrigin_i(void)
Get the LLA position of the frame origin (int)
Definition state.c:124
static struct EnuCoor_f * stateGetPositionEnu_f(void)
Get position in local ENU coordinates (float).
Definition state.h:848
static void stateSetPositionNed_i(uint16_t id, struct NedCoor_i *ned_pos)
Set position from local NED coordinates (int).
Definition state.h:638
static void stateSetSpeedNed_i(uint16_t id, struct NedCoor_i *ned_speed)
Set ground speed in local NED coordinates (int).
Definition state.h:892
void hff_init(float init_x, float init_xdot, float init_y, float init_ydot)
Definition hf_float.c:274
struct HfilterFloat hff
Definition hf_float.c:124
void hff_update_gps(struct FloatVect2 *pos_ned, struct FloatVect2 *speed_ned)
Definition hf_float.c:541
void hff_propagate(void)
Definition hf_float.c:479
void hff_update_vel(struct FloatVect2 vel, struct FloatVect2 Rvel)
Definition hf_float.c:806
void hff_realign(struct FloatVect2 pos, struct FloatVect2 vel)
Definition hf_float.c:602
void hff_update_pos(struct FloatVect2 pos, struct FloatVect2 Rpos)
Update position.
Definition hf_float.c:711
Horizontal filter (x,y) to estimate position and velocity.
float xdot
Definition hf_float.h:42
float ydotdot
Definition hf_float.h:47
float xdotdot
Definition hf_float.h:43
float ydot
Definition hf_float.h:46
Inertial Measurement Unit interface.
void ins_init_origin_i_from_flightplan(uint16_t id, struct LtpDef_i *ltp_def)
initialize the local origin (ltp_def in fixed point) from flight plan position
Definition ins.c:33
#define INS_RESET_VERTICAL_REF
Definition ins.h:37
#define INS_RESET_VERTICAL_POS
Definition ins.h:38
#define INS_RESET_REF
flags for INS reset
Definition ins.h:36
struct InsInt ins_int
global INS state
Definition ins_int.c:170
#define INS_INT_IMU_ID
ABI binding for IMU data.
Definition ins_int.c:121
static void reset_vertical_ref(void)
Definition ins_int.c:278
#define INS_INT_AGL_ID
ABI binding for AGL.
Definition ins_int.c:160
static void gps_cb(uint8_t sender_id, uint32_t stamp, struct GpsState *gps_s)
Definition ins_int.c:591
static void ins_update_from_vff(void)
update ins state from vertical filter
Definition ins_int.c:556
static void reset_cb(uint8_t sender_id, uint8_t flag)
Definition ins_int.c:301
static void send_ins(struct transport_tx *trans, struct link_device *dev)
Definition ins_int.c:175
static abi_event pos_est_ev
Definition ins_int.c:150
#define VFF_R_AGL
Definition ins_int.c:59
#define INS_INT_GPS_ID
Definition ins_int.c:128
static void reset_ref(void)
Definition ins_int.c:254
static abi_event accel_ev
Definition ins_int.c:124
#define INS_BARO_MAX_INIT_VAR
default barometer to use in INS
Definition ins_int.c:105
void ins_int_propagate(struct Int32Vect3 *accel, float dt)
Definition ins_int.c:319
static abi_event reset_ev
Definition ins_int.c:167
void ins_int_update_gps(struct GpsState *gps_s)
Definition ins_int.c:422
void ins_int_init(void)
Definition ins_int.c:207
static void send_ins_ref(struct transport_tx *trans, struct link_device *dev)
Definition ins_int.c:189
static void agl_cb(uint8_t sender_id, uint32_t stamp, float distance)
agl_cb This callback handles all estimates of the height of the vehicle above the ground under it Thi...
Definition ins_int.c:538
static void send_ins_z(struct transport_tx *trans, struct link_device *dev)
Definition ins_int.c:183
abi_event baro_ev
Definition ins_int.c:114
#define INS_INT_VEL_ID
ABI binding for VELOCITY_ESTIMATE.
Definition ins_int.c:138
#define INS_MAX_PROPAGATION_STEPS
maximum number of propagation steps without any updates in between
Definition ins_int.c:96
static abi_event vel_est_ev
Definition ins_int.c:141
static void ins_ned_to_state(void)
copy position and speed to state interface
Definition ins_int.c:542
static void baro_cb(uint8_t sender_id, uint32_t stamp, float pressure)
Definition ins_int.c:363
#define INS_VFF_VZ_R_GPS
Definition ins_int.c:90
static void reset_vertical_pos(void)
Definition ins_int.c:296
static void accel_cb(uint8_t sender_id, uint32_t stamp, struct Int32Vect3 *accel)
Definition ins_int.c:577
#define INS_INT_POS_ID
Definition ins_int.c:147
static void vel_est_cb(uint8_t sender_id, uint32_t stamp, float x, float y, float z, float noise_x, float noise_y, float noise_z)
Definition ins_int.c:601
#define press_hist_len
#define INS_INT_BARO_ID
Definition ins_int.c:110
static void pos_est_cb(uint8_t sender_id, uint32_t stamp, float x, float y, float z, float noise_x, float noise_y, float noise_z)
Definition ins_int.c:663
#define INS_VFF_R_GPS
Definition ins_int.c:86
static abi_event gps_ev
Definition ins_int.c:131
static abi_event agl_ev
The agl ABI event.
Definition ins_int.c:163
INS for rotorcrafts combining vertical and horizontal filters.
float baro_z
z-position calculated from baro in meters (z-down)
Definition ins_int.h:61
struct LtpDef_i ltp_def
Definition ins_int.h:40
bool ltp_initialized
Definition ins_int.h:41
bool baro_initialized
Definition ins_int.h:63
struct NedCoor_i ltp_pos
Definition ins_int.h:56
bool vf_reset
request to reset vertical filter.
Definition ins_int.h:53
struct NedCoor_i ltp_speed
Definition ins_int.h:57
float qfe
Definition ins_int.h:62
bool hf_realign
request to realign horizontal filter.
Definition ins_int.h:48
uint32_t propagation_cnt
number of propagation steps since the last measurement update
Definition ins_int.h:43
struct NedCoor_i ltp_accel
Definition ins_int.h:58
Ins implementation state (fixed point)
Definition ins_int.h:39
PRINT_CONFIG_MSG("USE_INS_NAV_INIT defaulting to TRUE")
uint16_t foo
Definition main_demo5.c:58
bool nps_bypass_ins
void sim_overwrite_ins(void)
static uint32_t idx
PRINT_CONFIG_VAR(ONELOOP_ANDI_FILT_CUTOFF)
vector in East North Up coordinates Units: meters
Paparazzi fixed point math for geodetic calculations.
Paparazzi atmospheric pressure conversion utilities.
float variance_f(float *array, uint32_t n_elements)
Compute the variance of an array of values (float).
Definition pprz_stat.c:139
Statistics functions.
struct Stabilization stabilization
General stabilization interface for rotorcrafts.
int32_t cmd[COMMANDS_NB]
output command vector, range from [-MAX_PPRZ:MAX_PPRZ] (store for messages)
static const struct usb_device_descriptor dev
Definition usb_ser_hw.c:74
int8_t register_periodic_telemetry(struct periodic_telemetry *_pt, uint8_t _id, telemetry_cb _cb)
Register a telemetry callback function.
Definition telemetry.c:51
Periodic telemetry system header (includes downlink utility and generated code).
#define DefaultPeriodic
Set default periodic telemetry.
Definition telemetry.h:66
void vff_init_zero(void)
void vff_update_z_conf(float z_meas, float conf)
void vff_update_vz_conf(float vz_meas, float conf)
void vff_update_baro(float z_meas)
void vff_realign(float z_meas)
void vff_propagate(float accel, float dt)
Propagate the filter in time.
struct VffExtended vff
void vff_update_agl(float z_meas, float conf)
Interface for extended vertical filter (in float).
float zdotdot
z-acceleration in m/s^2 (NED, z-down)
float zdot
z-velocity estimate in m/s (NED, z-down)
float z
z-position estimate in m (NED, z-down)
void vff_update(float z_meas)
Definition vf_float.c:189
Vertical filter (in float) estimating altitude, velocity and accel bias.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.