Hmmmmmmmmmm, interessant.
Probier doch mal bitte, das Sensorboard mit der MPU nach unten zu halten und schau, was dann passiert.
Die Roll-Richtung aus der DMP-Berechnung springt von -180 bis +180, es gibt also eine Unstetigkeit. Nachdem ich mein Platinchen am Gimbal mit der MPU nach unten angebracht habe, gabs ne kleine Code-Anpassung.
Siehe unten in Bold.
void updatePositionFromDmpFast(float *pitch, float *roll)
{
mpu.getFIFOBytes(fifoBuffer, 18); // I2C 800000L : 1300-1308 micros fo 42 bytes, ~540 micros for 16bytes
mpu.dmpGetQuaternion(&q, fifoBuffer); // I2C 800000L : 64-68 micros
*pitch = asin(-2*(q.x * q.z - q.w * q.y)) * 180/M_PI; // DMP yaw takes ~120 micros // pitch for my sensor setup
*roll = atan2(2*(q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z)* 180/M_PI; // DMP pitch takes ~310 micros // roll for my sensor setup
*roll = sgn(*roll) * 180.0 - *roll;
//atan2(2*(q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z) * 180/M_PI ; // DMP roll takes ~310 micros
}
Probier doch mal bitte, das Sensorboard mit der MPU nach unten zu halten und schau, was dann passiert.
Die Roll-Richtung aus der DMP-Berechnung springt von -180 bis +180, es gibt also eine Unstetigkeit. Nachdem ich mein Platinchen am Gimbal mit der MPU nach unten angebracht habe, gabs ne kleine Code-Anpassung.
Siehe unten in Bold.
void updatePositionFromDmpFast(float *pitch, float *roll)
{
mpu.getFIFOBytes(fifoBuffer, 18); // I2C 800000L : 1300-1308 micros fo 42 bytes, ~540 micros for 16bytes
mpu.dmpGetQuaternion(&q, fifoBuffer); // I2C 800000L : 64-68 micros
*pitch = asin(-2*(q.x * q.z - q.w * q.y)) * 180/M_PI; // DMP yaw takes ~120 micros // pitch for my sensor setup
*roll = atan2(2*(q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z)* 180/M_PI; // DMP pitch takes ~310 micros // roll for my sensor setup
*roll = sgn(*roll) * 180.0 - *roll;
//atan2(2*(q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z) * 180/M_PI ; // DMP roll takes ~310 micros
}
Fritz