Without any knowledge of DCM, I'm porting a DCM implementation, that is used with SparkFuns 9DOF to C for ARM Cortex M3.
So far it goes well, but since I do not know what to expect of data in the matrices, I do not know if the current filter output data is tuned well.
In the test below I quickly moved the IMU with my hands over a flat table. I did this from left to right over the X-axis from the accelerometer. Sure there might be some Y-axis movement as well since I cannot achieve that accuracy with my bare hands.
Mostly I`m interested if the gyro's VS accelerometers are aligned well and not reversed. Can anyone please advice me?
Because what I do not understand is that the X-axis of the accelerometer is measuring the shaking, which is right, but also the gyro is measuring rotation over the X-axis.
On the IMU, the X axis from gyro is mounted in the same way the X-axis of accelerometer is pointing to (same holds for Y and Z)
The sample time is 50Hz
Gyro data to grad/s can be calculated by dividing by 14.375
Acc. data to Gravity can be calculated by dividing by 4096
The output of the filter is already in grads/s
The first 2 plots are RAW data from sensors, the third plot is the output from filter in grad/s.
Below a plot of the raw data from gyro and accelerometer (Z axis).
Clearly there is also a lot of change (noise?) on the Z-axis of the accelerometer, what I find strange since the gravity isn't changing since it is shaking/lying on a flat surface.
What I expected from this test is that only the x-axis from accelerometer shows changes (since I'm shaking in into that direction) and that the rest of all the axis (gyro and accelerometer) isn't disturbed at any way.
By the way, it is for a Quadrocopter.
I would check that moving each sensor along each axis produces little/no effect on the other axes and other sensors. Basic orthogonality.
I've been porting MatrixNav DCM to x86 Linux + STM32 too. Maybe I can be of more help in a couple days.