[imu] default settings for navgo imu

This commit is contained in:
Gautier Hattenberger
2013-03-05 13:56:01 +01:00
committed by Felix Ruess
parent de13525fd3
commit bf7e5df42a
3 changed files with 28 additions and 3 deletions
-1
View File
@@ -118,7 +118,6 @@
<!-- Magnetic field for Toulouse (declination -16°) --> <!-- Magnetic field for Toulouse (declination -16°) -->
<section name="AHRS" prefix="AHRS_"> <section name="AHRS" prefix="AHRS_">
<define name="PROPAGATE_FREQUENCY" value="512"/>
<define name="PROPAGATE_LOW_PASS_RATES" value="1"/> <define name="PROPAGATE_LOW_PASS_RATES" value="1"/>
<define name="H_X" value=" 0.513081"/> <define name="H_X" value=" 0.513081"/>
<define name="H_Y" value="-0.00242783"/> <define name="H_Y" value="-0.00242783"/>
@@ -14,6 +14,13 @@ IMU_NAVGO_SRCS += peripherals/itg3200.c
IMU_NAVGO_SRCS += peripherals/adxl345_i2c.c IMU_NAVGO_SRCS += peripherals/adxl345_i2c.c
IMU_NAVGO_SRCS += peripherals/hmc58xx.c IMU_NAVGO_SRCS += peripherals/hmc58xx.c
# with default NAVGO_GYRO_SMPLRT_DIV (gyro output 500Hz)
# the AHRS_PROPAGATE_FREQUENCY needs to be adjusted accordingly
AHRS_PROPAGATE_FREQUENCY ?= 500
AHRS_CORRECT_FREQUENCY ?= 500
ap.CFLAGS += -DAHRS_PROPAGATE_FREQUENCY=$(AHRS_PROPAGATE_FREQUENCY)
ap.CFLAGS += -DAHRS_CORRECT_FREQUENCY=$(AHRS_CORRECT_FREQUENCY)
ap.CFLAGS += $(IMU_NAVGO_CFLAGS) ap.CFLAGS += $(IMU_NAVGO_CFLAGS)
ap.srcs += $(IMU_NAVGO_SRCS) ap.srcs += $(IMU_NAVGO_SRCS)
+21 -2
View File
@@ -49,8 +49,19 @@
#endif #endif
PRINT_CONFIG_VAR(NAVGO_ACCEL_RATE) PRINT_CONFIG_VAR(NAVGO_ACCEL_RATE)
/* default gyro internal lowpass frequency and sample rate divider */
#if !defined NAVGO_GYRO_LOWPASS && !defined NAVGO_GYRO_SMPLRT_DIV
#define NAVGO_GYRO_LOWPASS ITG3200_DLPF_10HZ
#define NAVGO_GYRO_SMPLRT_DIV 1
PRINT_CONFIG_MSG("Gyro output rate is 500Hz")
#endif
PRINT_CONFIG_VAR(NAVGO_GYRO_LOWPASS)
PRINT_CONFIG_VAR(NAVGO_GYRO_SMPLRT_DIV)
#if NAVGO_USE_MEDIAN_FILTER
#include "filters/median_filter.h" #include "filters/median_filter.h"
struct MedianFilter3Int median_gyro, median_accel, median_mag; struct MedianFilter3Int median_gyro, median_accel, median_mag;
#endif
struct ImuNavgo imu_navgo; struct ImuNavgo imu_navgo;
@@ -60,8 +71,8 @@ void imu_impl_init(void)
// ITG3200 // ITG3200
itg3200_init(&imu_navgo.itg, &(IMU_NAVGO_I2C_DEV), ITG3200_ADDR_ALT); itg3200_init(&imu_navgo.itg, &(IMU_NAVGO_I2C_DEV), ITG3200_ADDR_ALT);
// change the default configuration // change the default configuration
imu_navgo.itg.config.smplrt_div = 1; // 500Hz sample rate since internal is 1kHz imu_navgo.itg.config.smplrt_div = NAVGO_GYRO_SMPLRT_DIV; // 500Hz sample rate since internal is 1kHz
imu_navgo.itg.config.dlpf_cfg = ITG3200_DLPF_10HZ; imu_navgo.itg.config.dlpf_cfg = NAVGO_GYRO_LOWPASS;
///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
// ADXL345 // ADXL345
@@ -73,10 +84,12 @@ void imu_impl_init(void)
// HMC58XX // HMC58XX
hmc58xx_init(&imu_navgo.hmc, &(IMU_NAVGO_I2C_DEV), HMC58XX_ADDR); hmc58xx_init(&imu_navgo.hmc, &(IMU_NAVGO_I2C_DEV), HMC58XX_ADDR);
#if NAVGO_USE_MEDIAN_FILTER
// Init median filters // Init median filters
InitMedianFilterRatesInt(median_gyro); InitMedianFilterRatesInt(median_gyro);
InitMedianFilterVect3Int(median_accel); InitMedianFilterVect3Int(median_accel);
InitMedianFilterVect3Int(median_mag); InitMedianFilterVect3Int(median_mag);
#endif
imu_navgo.gyr_valid = FALSE; imu_navgo.gyr_valid = FALSE;
imu_navgo.acc_valid = FALSE; imu_navgo.acc_valid = FALSE;
@@ -115,7 +128,9 @@ void imu_navgo_event( void )
itg3200_event(&imu_navgo.itg); itg3200_event(&imu_navgo.itg);
if (imu_navgo.itg.data_available) { if (imu_navgo.itg.data_available) {
RATES_ASSIGN(imu.gyro_unscaled, -imu_navgo.itg.data.rates.q, imu_navgo.itg.data.rates.p, imu_navgo.itg.data.rates.r); RATES_ASSIGN(imu.gyro_unscaled, -imu_navgo.itg.data.rates.q, imu_navgo.itg.data.rates.p, imu_navgo.itg.data.rates.r);
#if NAVGO_USE_MEDIAN_FILTER
UpdateMedianFilterRatesInt(median_gyro, imu.gyro_unscaled); UpdateMedianFilterRatesInt(median_gyro, imu.gyro_unscaled);
#endif
imu_navgo.itg.data_available = FALSE; imu_navgo.itg.data_available = FALSE;
imu_navgo.gyr_valid = TRUE; imu_navgo.gyr_valid = TRUE;
} }
@@ -124,7 +139,9 @@ void imu_navgo_event( void )
adxl345_i2c_event(&imu_navgo.adxl); adxl345_i2c_event(&imu_navgo.adxl);
if (imu_navgo.adxl.data_available) { if (imu_navgo.adxl.data_available) {
VECT3_ASSIGN(imu.accel_unscaled, imu_navgo.adxl.data.vect.y, -imu_navgo.adxl.data.vect.x, imu_navgo.adxl.data.vect.z); VECT3_ASSIGN(imu.accel_unscaled, imu_navgo.adxl.data.vect.y, -imu_navgo.adxl.data.vect.x, imu_navgo.adxl.data.vect.z);
#if NAVGO_USE_MEDIAN_FILTER
UpdateMedianFilterVect3Int(median_accel, imu.accel_unscaled); UpdateMedianFilterVect3Int(median_accel, imu.accel_unscaled);
#endif
imu_navgo.adxl.data_available = FALSE; imu_navgo.adxl.data_available = FALSE;
imu_navgo.acc_valid = TRUE; imu_navgo.acc_valid = TRUE;
} }
@@ -133,7 +150,9 @@ void imu_navgo_event( void )
hmc58xx_event(&imu_navgo.hmc); hmc58xx_event(&imu_navgo.hmc);
if (imu_navgo.hmc.data_available) { if (imu_navgo.hmc.data_available) {
VECT3_COPY(imu.mag_unscaled, imu_navgo.hmc.data.vect); VECT3_COPY(imu.mag_unscaled, imu_navgo.hmc.data.vect);
#if NAVGO_USE_MEDIAN_FILTER
UpdateMedianFilterVect3Int(median_mag, imu.mag_unscaled); UpdateMedianFilterVect3Int(median_mag, imu.mag_unscaled);
#endif
imu_navgo.hmc.data_available = FALSE; imu_navgo.hmc.data_available = FALSE;
imu_navgo.mag_valid = TRUE; imu_navgo.mag_valid = TRUE;
} }