Plane: use AP_AHRS_NavEKF when available

This commit is contained in:
Andrew Tridgell 2014-01-02 12:16:20 +11:00
parent 7ac78ff991
commit 9ac886f58d
4 changed files with 41 additions and 57 deletions

View File

@ -273,7 +273,12 @@ AP_InertialSensor_L3G4200D ins;
#error Unrecognised CONFIG_INS_TYPE setting. #error Unrecognised CONFIG_INS_TYPE setting.
#endif // CONFIG_INS_TYPE #endif // CONFIG_INS_TYPE
// Inertial Navigation EKF
#if AP_AHRS_NAVEKF_AVAILABLE
AP_AHRS_NavEKF ahrs(ins, g_gps, barometer);
#else
AP_AHRS_DCM ahrs(ins, g_gps); AP_AHRS_DCM ahrs(ins, g_gps);
#endif
static AP_L1_Control L1_controller(ahrs); static AP_L1_Control L1_controller(ahrs);
static AP_TECS TECS_controller(ahrs, aparm); static AP_TECS TECS_controller(ahrs, aparm);
@ -284,11 +289,6 @@ static AP_PitchController pitchController(ahrs, aparm);
static AP_YawController yawController(ahrs, aparm); static AP_YawController yawController(ahrs, aparm);
static AP_SteerController steerController(ahrs); static AP_SteerController steerController(ahrs);
// Inertial Navigation EKF
#if HAL_CPU_CLASS >= HAL_CPU_CLASS_150
static NavEKF NavEKF(ahrs, barometer);
#endif
#if CONFIG_HAL_BOARD == HAL_BOARD_AVR_SITL #if CONFIG_HAL_BOARD == HAL_BOARD_AVR_SITL
SITL sitl; SITL sitl;
#endif #endif
@ -807,14 +807,10 @@ static void ahrs_update()
#endif #endif
ahrs.update(); ahrs.update();
#if HAL_CPU_CLASS >= HAL_CPU_CLASS_150
NavEKF.UpdateFilter();
#endif
if (should_log(MASK_LOG_ATTITUDE_FAST)) { if (should_log(MASK_LOG_ATTITUDE_FAST)) {
Log_Write_Attitude(); Log_Write_Attitude();
Log_Write_EKF1(); Log_Write_EKF();
Log_Write_EKF2();
} }
if (should_log(MASK_LOG_IMU)) if (should_log(MASK_LOG_IMU))
@ -898,8 +894,7 @@ static void update_logging1(void)
{ {
if (should_log(MASK_LOG_ATTITUDE_MED) && !should_log(MASK_LOG_ATTITUDE_FAST)) { if (should_log(MASK_LOG_ATTITUDE_MED) && !should_log(MASK_LOG_ATTITUDE_FAST)) {
Log_Write_Attitude(); Log_Write_Attitude();
Log_Write_EKF1(); Log_Write_EKF();
Log_Write_EKF2();
} }
if (should_log(MASK_LOG_ATTITUDE_MED) && !should_log(MASK_LOG_IMU)) if (should_log(MASK_LOG_ATTITUDE_MED) && !should_log(MASK_LOG_IMU))

View File

@ -530,11 +530,11 @@ static void NOINLINE send_simstate(mavlink_channel_t chan)
// report NavEKF state // report NavEKF state
static void NOINLINE send_ekf(mavlink_channel_t chan) static void NOINLINE send_ekf(mavlink_channel_t chan)
{ {
#if HAL_CPU_CLASS >= HAL_CPU_CLASS_150 #if AP_AHRS_NAVEKF_AVAILABLE
Vector3f euler; Vector3f euler;
struct Location loc; struct Location loc;
NavEKF.getEulerAngles(euler); ahrs.get_NavEKF().getEulerAngles(euler);
NavEKF.getLLH(loc); ahrs.get_NavEKF().getLLH(loc);
mavlink_msg_ekf_send(chan, mavlink_msg_ekf_send(chan,
euler.x, euler.x,
euler.y, euler.y,

View File

@ -206,20 +206,37 @@ struct PACKED log_EKF1 {
int8_t gyrZ; int8_t gyrZ;
}; };
struct PACKED log_EKF2 {
LOG_PACKET_HEADER;
uint32_t time_ms;
int8_t accX;
int8_t accY;
int8_t accZ;
int16_t windN;
int16_t windE;
int16_t magN;
int16_t magE;
int16_t magD;
int16_t magX;
int16_t magY;
int16_t magZ;
};
// Write first EKF packet // Write first EKF packet
static void Log_Write_EKF1(void) static void Log_Write_EKF(void)
{ {
#if HAL_CPU_CLASS >= HAL_CPU_CLASS_150 #if AP_AHRS_NAVEKF_AVAILABLE
Vector3f euler; Vector3f euler;
Vector3f posNED; Vector3f posNED;
Vector3f velNED; Vector3f velNED;
Vector3f dAngBias; Vector3f dAngBias;
Vector3f dVelBias; Vector3f dVelBias;
Vector3f gyroBias; Vector3f gyroBias;
NavEKF.getEulerAngles(euler); ahrs.get_NavEKF().getEulerAngles(euler);
NavEKF.getVelNED(velNED); ahrs.get_NavEKF().getVelNED(velNED);
NavEKF.getPosNED(posNED); ahrs.get_NavEKF().getPosNED(posNED);
NavEKF.getGyroBias(gyroBias); ahrs.get_NavEKF().getGyroBias(gyroBias);
struct log_EKF1 pkt = { struct log_EKF1 pkt = {
LOG_PACKET_HEADER_INIT(LOG_EKF1_MSG), LOG_PACKET_HEADER_INIT(LOG_EKF1_MSG),
time_ms : hal.scheduler->millis(), time_ms : hal.scheduler->millis(),
@ -237,39 +254,16 @@ static void Log_Write_EKF1(void)
gyrZ : (int8_t)(gyroBias.z) // deg/min gyrZ : (int8_t)(gyroBias.z) // deg/min
}; };
DataFlash.WriteBlock(&pkt, sizeof(pkt)); DataFlash.WriteBlock(&pkt, sizeof(pkt));
#endif
}
struct PACKED log_EKF2 {
LOG_PACKET_HEADER;
uint32_t time_ms;
int8_t accX;
int8_t accY;
int8_t accZ;
int16_t windN;
int16_t windE;
int16_t magN;
int16_t magE;
int16_t magD;
int16_t magX;
int16_t magY;
int16_t magZ;
};
// Write second EKF packet
static void Log_Write_EKF2(void)
{
#if HAL_CPU_CLASS >= HAL_CPU_CLASS_150
Vector3f euler;
Vector3f accelBias; Vector3f accelBias;
Vector3f wind; Vector3f wind;
Vector3f magNED; Vector3f magNED;
Vector3f magXYZ; Vector3f magXYZ;
NavEKF.getAccelBias(accelBias); ahrs.get_NavEKF().getAccelBias(accelBias);
NavEKF.getWind(wind); ahrs.get_NavEKF().getWind(wind);
NavEKF.getMagNED(magNED); ahrs.get_NavEKF().getMagNED(magNED);
NavEKF.getMagXYZ(magXYZ); ahrs.get_NavEKF().getMagXYZ(magXYZ);
struct log_EKF2 pkt = { struct log_EKF2 pkt2 = {
LOG_PACKET_HEADER_INIT(LOG_EKF2_MSG), LOG_PACKET_HEADER_INIT(LOG_EKF2_MSG),
time_ms : hal.scheduler->millis(), time_ms : hal.scheduler->millis(),
accX : (int8_t)(100*accelBias.x), accX : (int8_t)(100*accelBias.x),
@ -284,10 +278,11 @@ static void Log_Write_EKF2(void)
magY : (int16_t)(magXYZ.y), magY : (int16_t)(magXYZ.y),
magZ : (int16_t)(magXYZ.z) magZ : (int16_t)(magXYZ.z)
}; };
DataFlash.WriteBlock(&pkt, sizeof(pkt)); DataFlash.WriteBlock(&pkt2, sizeof(pkt2));
#endif #endif
} }
struct PACKED log_Performance { struct PACKED log_Performance {
LOG_PACKET_HEADER; LOG_PACKET_HEADER;
uint32_t loop_time; uint32_t loop_time;
@ -726,8 +721,7 @@ static void Log_Write_Nav_Tuning() {}
static void Log_Write_TECS_Tuning() {} static void Log_Write_TECS_Tuning() {}
static void Log_Write_Performance() {} static void Log_Write_Performance() {}
static void Log_Write_Attitude() {} static void Log_Write_Attitude() {}
static void Log_Write_EKF1() {} static void Log_Write_EKF() {}
static void Log_Write_EKF2() {}
static void Log_Write_Control_Tuning() {} static void Log_Write_Control_Tuning() {}
static void Log_Write_Camera() {} static void Log_Write_Camera() {}
static void Log_Write_Mode(uint8_t mode) {} static void Log_Write_Mode(uint8_t mode) {}

View File

@ -239,11 +239,6 @@ static void init_home()
// ------------- // -------------
guided_WP = home; guided_WP = home;
guided_WP.alt += g.RTL_altitude_cm; guided_WP.alt += g.RTL_altitude_cm;
// startup EKF now we have home
#if HAL_CPU_CLASS >= HAL_CPU_CLASS_150
NavEKF.InitialiseFilter();
#endif
} }
/* /*