Paparazzi UAS
v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
|
Attitude estimation for fixedwings based on the DCM. More...
#include "std.h"
#include "modules/ahrs/ahrs_float_dcm.h"
#include "modules/ahrs/ahrs_float_utils.h"
#include "autopilot.h"
#include "modules/ahrs/ahrs_float_dcm_algebra.h"
#include "math/pprz_algebra_float.h"
#include "modules/gps/gps.h"
#include <string.h>
#include "led.h"
Go to the source code of this file.
Macros | |
#define | ACCEL_WEIGHT_FILTER 8 |
#define | ACCEL_WEIGHT_BAND 1.f |
Functions | |
static void | compute_ahrs_representations (void) |
static void | set_dcm_matrix_from_rmat (struct FloatRMat *rmat) |
void | Normalize (void) |
void | Drift_correction (void) |
void | Matrix_update (float dt) |
void | ahrs_dcm_init (void) |
bool | ahrs_dcm_align (struct FloatRates *lp_gyro, struct FloatVect3 *lp_accel, struct FloatVect3 *lp_mag) |
void | ahrs_dcm_propagate (struct FloatRates *gyro, float dt) |
void | ahrs_dcm_update_gps (struct GpsState *gps_s UNUSED) |
void | ahrs_dcm_update_accel (struct FloatVect3 *accel) |
void | ahrs_dcm_update_mag (struct FloatVect3 *mag) |
Variables | |
struct AhrsFloatDCM | ahrs_dcm |
struct FloatVect3 | accel_float = {0, 0, 0} |
struct FloatVect3 | mag_float = {0, 0, 0} |
float | Omega_Vector [3] = {0, 0, 0} |
float | Omega_P [3] = {0, 0, 0} |
float | Omega_I [3] = {0, 0, 0} |
float | Omega [3] = {0, 0, 0} |
float | DCM_Matrix [3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}} |
float | Update_Matrix [3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}} |
float | Temporary_Matrix [3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}} |
float | MAG_Heading_X = 1 |
float | MAG_Heading_Y = 0 |
Attitude estimation for fixedwings based on the DCM.
Theory: http://code.google.com/p/gentlenav/downloads/list file DCMDraft2.pdf
Options:
Definition in file ahrs_float_dcm.c.
#define ACCEL_WEIGHT_BAND 1.f |
Definition at line 379 of file ahrs_float_dcm.c.
#define ACCEL_WEIGHT_FILTER 8 |
Definition at line 372 of file ahrs_float_dcm.c.
bool ahrs_dcm_align | ( | struct FloatRates * | lp_gyro, |
struct FloatVect3 * | lp_accel, | ||
struct FloatVect3 * | lp_mag | ||
) |
Definition at line 120 of file ahrs_float_dcm.c.
References ahrs_dcm, AHRS_DCM_RUNNING, ahrs_float_get_quat_from_accel(), ahrs_float_get_quat_from_accel_mag(), float_eulers_of_quat(), float_rmat_of_quat(), AhrsFloatDCM::gyro_bias, AhrsFloatDCM::is_aligned, AhrsFloatDCM::ltp_to_body_euler, set_dcm_matrix_from_rmat(), and AhrsFloatDCM::status.
Referenced by aligner_cb().
void ahrs_dcm_init | ( | void | ) |
Definition at line 99 of file ahrs_float_dcm.c.
References ahrs_dcm, AHRS_DCM_UNINIT, AhrsFloatDCM::body_rate, FLOAT_EULERS_ZERO, FLOAT_RATES_ZERO, float_rmat_identity(), AhrsFloatDCM::gps_acceleration, AhrsFloatDCM::gps_age, AhrsFloatDCM::gps_course, AhrsFloatDCM::gps_course_valid, AhrsFloatDCM::gps_speed, AhrsFloatDCM::is_aligned, AhrsFloatDCM::ltp_to_body_euler, set_dcm_matrix_from_rmat(), and AhrsFloatDCM::status.
Referenced by ahrs_dcm_register().
void ahrs_dcm_propagate | ( | struct FloatRates * | gyro, |
float | dt | ||
) |
Definition at line 149 of file ahrs_float_dcm.c.
References ahrs_dcm, AhrsFloatDCM::body_rate, compute_ahrs_representations(), AhrsFloatDCM::gyro_bias, Matrix_update(), Normalize(), FloatRates::p, FloatRates::q, FloatRates::r, and RATES_DIFF.
Referenced by gyro_cb().
void ahrs_dcm_update_accel | ( | struct FloatVect3 * | accel | ) |
Definition at line 201 of file ahrs_float_dcm.c.
References accel_float, ahrs_dcm, Drift_correction(), AhrsFloatDCM::gps_acceleration, AhrsFloatDCM::gps_age, AhrsFloatDCM::gps_speed, Omega, PRINT_CONFIG_MSG(), FloatVect3::x, FloatVect3::y, and FloatVect3::z.
Referenced by accel_cb().
void ahrs_dcm_update_gps | ( | struct GpsState *gps_s | UNUSED | ) |
Definition at line 176 of file ahrs_float_dcm.c.
References ahrs_dcm, AHRS_FLOAT_MIN_SPEED_GPS_COURSE, AhrsFloatDCM::gps_acceleration, AhrsFloatDCM::gps_age, AhrsFloatDCM::gps_course, AhrsFloatDCM::gps_course_valid, GPS_FIX_3D, and AhrsFloatDCM::gps_speed.
Referenced by gps_cb().
void ahrs_dcm_update_mag | ( | struct FloatVect3 * | mag | ) |
Definition at line 228 of file ahrs_float_dcm.c.
References ahrs_dcm, DefaultChannel, DefaultDevice, AhrsFloatDCM::ltp_to_body_euler, MAG_Heading_X, MAG_Heading_Y, FloatEulers::phi, FloatEulers::theta, FloatVect3::x, FloatVect3::y, and FloatVect3::z.
Referenced by mag_cb().
|
static |
Definition at line 525 of file ahrs_float_dcm.c.
References accel_float, ahrs_dcm, DCM_Matrix, GRAVITY, AhrsFloatDCM::ltp_to_body_euler, FloatEulers::phi, FloatEulers::psi, FloatEulers::theta, FloatVect3::x, FloatVect3::y, and FloatVect3::z.
Referenced by ahrs_dcm_propagate().
void Drift_correction | ( | void | ) |
Definition at line 382 of file ahrs_float_dcm.c.
References accel_float, ACCEL_WEIGHT_BAND, ACCEL_WEIGHT_FILTER, ahrs_dcm, autopilot, course, DCM_Matrix, FALSE, AhrsFloatDCM::gps_course, AhrsFloatDCM::gps_course_valid, GRAVITY, imu_health, Ki_ROLLPITCH, Ki_YAW, Kp_ROLLPITCH, Kp_YAW, pprz_autopilot::launch, MAG_Heading_X, MAG_Heading_Y, Omega_I, Omega_P, PRINT_CONFIG_MSG(), Vector_Add(), Vector_Cross_Product(), Vector_Dot_Product(), Vector_Scale(), FloatVect3::x, FloatVect3::y, and FloatVect3::z.
Referenced by ahrs_dcm_update_accel().
void Matrix_update | ( | float | dt | ) |
Definition at line 489 of file ahrs_float_dcm.c.
References ahrs_dcm, AhrsFloatDCM::body_rate, DCM_Matrix, Matrix_Multiply(), Omega, Omega_I, Omega_P, Omega_Vector, FloatRates::p, FloatRates::q, FloatRates::r, Temporary_Matrix, Update_Matrix, and Vector_Add().
Referenced by ahrs_dcm_propagate().
void Normalize | ( | void | ) |
Definition at line 287 of file ahrs_float_dcm.c.
References DCM_Matrix, float_rmat_identity(), renorm_blowup_count, renorm_sqrt_count, set_dcm_matrix_from_rmat(), Vector_Add(), Vector_Cross_Product(), Vector_Dot_Product(), and Vector_Scale().
Referenced by ahrs_dcm_propagate().
|
inlinestatic |
Definition at line 90 of file ahrs_float_dcm.c.
References DCM_Matrix, and RMAT_ELMT.
Referenced by ahrs_dcm_align(), ahrs_dcm_init(), and Normalize().
struct FloatVect3 accel_float = {0, 0, 0} |
Definition at line 1 of file ahrs_float_dcm.c.
Referenced by ahrs_dcm_update_accel(), compute_ahrs_representations(), Drift_correction(), and send_accel().
struct AhrsFloatDCM ahrs_dcm |
Definition at line 1 of file ahrs_float_dcm.c.
Referenced by accel_cb(), ahrs_dcm_align(), ahrs_dcm_init(), ahrs_dcm_propagate(), ahrs_dcm_update_accel(), ahrs_dcm_update_gps(), ahrs_dcm_update_mag(), aligner_cb(), compute_ahrs_representations(), Drift_correction(), gyro_cb(), mag_cb(), Matrix_update(), send_filter_status(), and set_body_orientation_and_rates().
float DCM_Matrix[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}} |
Definition at line 67 of file ahrs_float_dcm.c.
Referenced by compute_ahrs_representations(), Drift_correction(), Matrix_update(), Normalize(), and set_dcm_matrix_from_rmat().
struct FloatVect3 mag_float = {0, 0, 0} |
Definition at line 1 of file ahrs_float_dcm.c.
Referenced by send_mag().
float MAG_Heading_X = 1 |
Definition at line 72 of file ahrs_float_dcm.c.
Referenced by ahrs_dcm_update_mag(), and Drift_correction().
float MAG_Heading_Y = 0 |
Definition at line 73 of file ahrs_float_dcm.c.
Referenced by ahrs_dcm_update_mag(), and Drift_correction().
float Omega[3] = {0, 0, 0} |
Definition at line 65 of file ahrs_float_dcm.c.
Referenced by ahrs_dcm_update_accel(), and Matrix_update().
float Omega_I[3] = {0, 0, 0} |
Definition at line 64 of file ahrs_float_dcm.c.
Referenced by Drift_correction(), and Matrix_update().
float Omega_P[3] = {0, 0, 0} |
Definition at line 63 of file ahrs_float_dcm.c.
Referenced by Drift_correction(), and Matrix_update().
float Omega_Vector[3] = {0, 0, 0} |
Definition at line 62 of file ahrs_float_dcm.c.
Referenced by Matrix_update().
float Temporary_Matrix[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}} |
Definition at line 69 of file ahrs_float_dcm.c.
Referenced by Matrix_update().
float Update_Matrix[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}} |
Definition at line 68 of file ahrs_float_dcm.c.
Referenced by Matrix_update().