Hi, I am Frank, I am the creator of the Picopter project

I have DMP almost working, I've almost finished adapting Noah Zerkin's code to use MultiWii's I2C routines, I am in the testing phase

I have the Picopter output the data via serial port. I have quaternion data.

The problem is I have no idea how to process it into roll and pitch angles.

Sitting still on my desk, the quaternion data are 30252 23548 23293 12242, these are 32 bit signed integers

Moving it only slightly turned them into -7376 -8963 -19205 -1322

The documentation says that these numbers are scaled by 2^30

so scaling by that gave me 0.0000 something that doesn't get printed, also the rotation matrix calculation were too low as a consequence

But through experimentation, the quaternion numbers do not ever exceed 32768, so I scaled by that instead

now the numbers are sane, quaternion data in double type is now between +/- 1, rotation matrix is also between +/- 1

I feed a few of the rotation matrix entries through to _atan2 to get roll and pitch angles, but now the numbers don't make sense

Here's the funny thing: I have almost no linear algebra education beyond finding determinants. This code was written by looking at the MotionApp code provided by InvenSens.

So... who wants to help me? I'll give you my test sketch, it should work on any platform as long as it has I2C and UART

I just need somebody to fix the mathematics in the "dmp_processQuat" function

Here is the sketch

Note, I'm not using arrays as an optimization, all the postfix numbers are indexed starting from 0, if you believe I should switch to using arrays, tell me so

I don't have any "calibration" routine yet, I have plans on writing them, but I was hoping I can start off by getting the angles to work.

edit: actually, the stuff I copied from MotionApp does not match what I see from

http://en.wikipedia.org/wiki/Conversion ... ler_angles at all... err I'm sleepy, I'll try again on Wednesday night

if you have the MPU-60X0, please mess around with it

edit: I need a good arcsin function