mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-02-23 00:04:02 -04:00
ArduCopter: allow DMP to run in parallel with DCM
Parallel DMP can be enabled by #define SECONDARY_DMP_ENABLED in APM_Config.h New DMP dataflash log type added to allow easy comparison with DCM
This commit is contained in:
parent
c2c2d560bb
commit
fc4f4d76c9
@ -15,6 +15,7 @@
|
|||||||
//#define MAG_ORIENTATION AP_COMPASS_COMPONENTS_DOWN_PINS_FORWARD
|
//#define MAG_ORIENTATION AP_COMPASS_COMPONENTS_DOWN_PINS_FORWARD
|
||||||
//#define HIL_MODE HIL_MODE_ATTITUDE
|
//#define HIL_MODE HIL_MODE_ATTITUDE
|
||||||
//#define DMP_ENABLED ENABLED
|
//#define DMP_ENABLED ENABLED
|
||||||
|
//#define SECONDARY_DMP_ENABLED ENABLED // allows running DMP in parallel with DCM for testing purposes
|
||||||
|
|
||||||
//#define FRAME_CONFIG QUAD_FRAME
|
//#define FRAME_CONFIG QUAD_FRAME
|
||||||
/*
|
/*
|
||||||
|
@ -272,6 +272,11 @@ AP_AHRS_MPU6000 ahrs(&imu, g_gps, &ins); // only works with APM2
|
|||||||
AP_AHRS_DCM ahrs(&imu, g_gps);
|
AP_AHRS_DCM ahrs(&imu, g_gps);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// ahrs2 object is the secondary ahrs to allow running DMP in parallel with DCM
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED && CONFIG_APM_HARDWARE == APM_HARDWARE_APM2
|
||||||
|
AP_AHRS_MPU6000 ahrs2(&imu, g_gps, &ins); // only works with APM2
|
||||||
|
#endif
|
||||||
|
|
||||||
#elif HIL_MODE == HIL_MODE_SENSORS
|
#elif HIL_MODE == HIL_MODE_SENSORS
|
||||||
// sensor emulators
|
// sensor emulators
|
||||||
AP_ADC_HIL adc;
|
AP_ADC_HIL adc;
|
||||||
@ -1187,8 +1192,12 @@ static void medium_loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(motors.armed()) {
|
if(motors.armed()) {
|
||||||
if (g.log_bitmask & MASK_LOG_ATTITUDE_MED)
|
if (g.log_bitmask & MASK_LOG_ATTITUDE_MED) {
|
||||||
Log_Write_Attitude();
|
Log_Write_Attitude();
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
Log_Write_DMP();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if (g.log_bitmask & MASK_LOG_MOTORS)
|
if (g.log_bitmask & MASK_LOG_MOTORS)
|
||||||
Log_Write_Motors();
|
Log_Write_Motors();
|
||||||
@ -1288,8 +1297,12 @@ static void fifty_hz_loop()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
# if HIL_MODE == HIL_MODE_DISABLED
|
# if HIL_MODE == HIL_MODE_DISABLED
|
||||||
if (g.log_bitmask & MASK_LOG_ATTITUDE_FAST && motors.armed())
|
if (g.log_bitmask & MASK_LOG_ATTITUDE_FAST && motors.armed()) {
|
||||||
Log_Write_Attitude();
|
Log_Write_Attitude();
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
Log_Write_DMP();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if (g.log_bitmask & MASK_LOG_RAW && motors.armed())
|
if (g.log_bitmask & MASK_LOG_RAW && motors.armed())
|
||||||
Log_Write_Raw();
|
Log_Write_Raw();
|
||||||
@ -2089,6 +2102,10 @@ static void read_AHRS(void)
|
|||||||
|
|
||||||
ahrs.update();
|
ahrs.update();
|
||||||
omega = imu.get_gyro();
|
omega = imu.get_gyro();
|
||||||
|
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
ahrs2.update();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_trig(void){
|
static void update_trig(void){
|
||||||
|
@ -942,6 +942,44 @@ static void Log_Read_PID()
|
|||||||
temp7); // gain
|
temp7); // gain
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Write a DMP attitude packet. Total length : 16 bytes
|
||||||
|
static void Log_Write_DMP()
|
||||||
|
{
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
DataFlash.WriteByte(HEAD_BYTE1);
|
||||||
|
DataFlash.WriteByte(HEAD_BYTE2);
|
||||||
|
DataFlash.WriteByte(LOG_DMP_MSG);
|
||||||
|
|
||||||
|
DataFlash.WriteInt((int16_t)ahrs.roll_sensor); // 1
|
||||||
|
DataFlash.WriteInt((int16_t)ahrs2.roll_sensor); // 2
|
||||||
|
DataFlash.WriteInt((int16_t)ahrs.pitch_sensor); // 3
|
||||||
|
DataFlash.WriteInt((int16_t)ahrs2.pitch_sensor); // 4
|
||||||
|
DataFlash.WriteInt((uint16_t)ahrs.yaw_sensor); // 5
|
||||||
|
DataFlash.WriteInt((uint16_t)ahrs2.yaw_sensor); // 6
|
||||||
|
DataFlash.WriteByte(END_BYTE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read an attitude packet
|
||||||
|
static void Log_Read_DMP()
|
||||||
|
{
|
||||||
|
int16_t temp1 = DataFlash.ReadInt();
|
||||||
|
int16_t temp2 = DataFlash.ReadInt();
|
||||||
|
int16_t temp3 = DataFlash.ReadInt();
|
||||||
|
int16_t temp4 = DataFlash.ReadInt();
|
||||||
|
uint16_t temp5 = DataFlash.ReadInt();
|
||||||
|
uint16_t temp6 = DataFlash.ReadInt();
|
||||||
|
|
||||||
|
// 1 2 3 4 5 6
|
||||||
|
Serial.printf_P(PSTR("DMP, %d, %d, %d, %d, %u, %u\n"),
|
||||||
|
(int)temp1,
|
||||||
|
(int)temp2,
|
||||||
|
(int)temp3,
|
||||||
|
(int)temp4,
|
||||||
|
(unsigned)temp5,
|
||||||
|
(unsigned)temp6);
|
||||||
|
}
|
||||||
|
|
||||||
// Read the DataFlash log memory
|
// Read the DataFlash log memory
|
||||||
static void Log_Read(int16_t start_page, int16_t end_page)
|
static void Log_Read(int16_t start_page, int16_t end_page)
|
||||||
{
|
{
|
||||||
@ -1069,6 +1107,10 @@ static int16_t Log_Read_Process(int16_t start_page, int16_t end_page)
|
|||||||
case LOG_ITERM_MSG:
|
case LOG_ITERM_MSG:
|
||||||
Log_Read_Iterm();
|
Log_Read_Iterm();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LOG_DMP_MSG:
|
||||||
|
Log_Read_DMP();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
@ -1122,7 +1164,9 @@ static void Log_Write_Motors() {
|
|||||||
}
|
}
|
||||||
static void Log_Write_Performance() {
|
static void Log_Write_Performance() {
|
||||||
}
|
}
|
||||||
static void Log_Write_PID() {
|
static void Log_Write_PID(int8_t pid_id, int32_t error, int32_t p, int32_t i, int32_t d, int32_t output, float gain) {
|
||||||
|
}
|
||||||
|
static void Log_Write_DMP() {
|
||||||
}
|
}
|
||||||
static int8_t process_logs(uint8_t argc, const Menu::arg *argv) {
|
static int8_t process_logs(uint8_t argc, const Menu::arg *argv) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -373,6 +373,15 @@ static void load_parameters(void)
|
|||||||
ahrs._kp_yaw.set_and_save(0.1);
|
ahrs._kp_yaw.set_and_save(0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
if (!ahrs2._kp.load()) {
|
||||||
|
ahrs2._kp.set(0.1);
|
||||||
|
}
|
||||||
|
if (!ahrs2._kp_yaw.load()) {
|
||||||
|
ahrs2._kp_yaw.set(0.1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if (!g.format_version.load() ||
|
if (!g.format_version.load() ||
|
||||||
g.format_version != Parameters::k_format_version) {
|
g.format_version != Parameters::k_format_version) {
|
||||||
|
@ -1061,6 +1061,11 @@
|
|||||||
# define DMP_ENABLED DISABLED
|
# define DMP_ENABLED DISABLED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// experimental mpu6000 DMP code
|
||||||
|
#ifndef SECONDARY_DMP_ENABLED
|
||||||
|
# define SECONDARY_DMP_ENABLED DISABLED
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef ALTERNATIVE_YAW_MODE
|
#ifndef ALTERNATIVE_YAW_MODE
|
||||||
# define ALTERNATIVE_YAW_MODE DISABLED
|
# define ALTERNATIVE_YAW_MODE DISABLED
|
||||||
#endif
|
#endif
|
||||||
|
@ -165,6 +165,9 @@ static void auto_trim()
|
|||||||
if( motors.armed() ) {
|
if( motors.armed() ) {
|
||||||
// set high AHRS gains to force accelerometers to impact attitude estimate
|
// set high AHRS gains to force accelerometers to impact attitude estimate
|
||||||
ahrs.set_fast_gains(true);
|
ahrs.set_fast_gains(true);
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
ahrs2.set_fast_gains(true);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
trim_accel();
|
trim_accel();
|
||||||
@ -183,6 +186,9 @@ static void auto_trim()
|
|||||||
// go back to normal AHRS gains
|
// go back to normal AHRS gains
|
||||||
if( motors.armed() ) {
|
if( motors.armed() ) {
|
||||||
ahrs.set_fast_gains(false);
|
ahrs.set_fast_gains(false);
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
ahrs2.set_fast_gains(false);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//Serial.println("Done");
|
//Serial.println("Done");
|
||||||
|
@ -296,6 +296,7 @@ enum gcs_severity {
|
|||||||
#define LOG_DATA_MSG 0x0D
|
#define LOG_DATA_MSG 0x0D
|
||||||
#define LOG_PID_MSG 0x0E
|
#define LOG_PID_MSG 0x0E
|
||||||
#define LOG_ITERM_MSG 0x0F
|
#define LOG_ITERM_MSG 0x0F
|
||||||
|
#define LOG_DMP_MSG 0x10
|
||||||
#define LOG_INDEX_MSG 0xF0
|
#define LOG_INDEX_MSG 0xF0
|
||||||
#define MAX_NUM_LOGS 50
|
#define MAX_NUM_LOGS 50
|
||||||
|
|
||||||
|
@ -161,6 +161,9 @@ static void init_arm_motors()
|
|||||||
|
|
||||||
// go back to normal AHRS gains
|
// go back to normal AHRS gains
|
||||||
ahrs.set_fast_gains(false);
|
ahrs.set_fast_gains(false);
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
ahrs2.set_fast_gains(false);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -187,6 +190,9 @@ static void init_disarm_motors()
|
|||||||
|
|
||||||
// setup fast AHRS gains to get right attitude
|
// setup fast AHRS gains to get right attitude
|
||||||
ahrs.set_fast_gains(true);
|
ahrs.set_fast_gains(true);
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
ahrs2.set_fast_gains(true);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************
|
/*****************************************
|
||||||
|
@ -43,6 +43,9 @@ static void init_compass()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ahrs.set_compass(&compass);
|
ahrs.set_compass(&compass);
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
ahrs2.set_compass(&compass);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_optflow()
|
static void init_optflow()
|
||||||
|
@ -367,6 +367,12 @@ static void startup_ground(void)
|
|||||||
// setup fast AHRS gains to get right attitude
|
// setup fast AHRS gains to get right attitude
|
||||||
ahrs.set_fast_gains(true);
|
ahrs.set_fast_gains(true);
|
||||||
|
|
||||||
|
#if SECONDARY_DMP_ENABLED == ENABLED
|
||||||
|
ahrs2.init(&timer_scheduler);
|
||||||
|
ahrs2.set_as_secondary(true);
|
||||||
|
ahrs2.set_fast_gains(true);
|
||||||
|
#endif
|
||||||
|
|
||||||
// reset the leds
|
// reset the leds
|
||||||
// ---------------------------
|
// ---------------------------
|
||||||
clear_leds();
|
clear_leds();
|
||||||
|
Loading…
Reference in New Issue
Block a user