Of course, since the are parameters for an affine transformation, what we really care about is that we get good transform results. So I think the “right” thing to do is to check that the distance between these *transformations* is small. (e.g. we might define `change`

to be the maximum over all vectors in the unit sphere of the magnitude of the difference in transform values between the old and the new transforms.)

As far as what I’ve been doing, well other hobbies and work have pulled me away from this stuff. but I did get some good results using Kalman filters to get rid of parameter drift and to exploit multiple sensors for denoising.

]]>Convergence is much faster, and “change” has a sensible meaning if it is defined as the squared magnitude of the relative parameter shifts:

change =0.; for (i=0; i<6; i++) change += JtR[i]*JtR[i]/(_beta[i]*_beta[i]); //squared magnitude, relative parameter shifts printf("it# %d, rel. delta = %10.5f\n",20-num_iterations,change);

Wonder what the author has been doing for the last five years!

Cheers, Jim Remington

]]>I am also using ADXL335 with Arduino UNO and I also need to calibrate my data. I have followed your instruction from the start to here, but when I run your Python and Octave code, I meet the same trouble with Arpit Kumar. My beta values I have got:

5.1922e+002 5.1922e+002 5.1922e+002 1.1130e-003 1.1138e-003 1.1092e-003

I realized that my beta(4), (5) and (6) values are much smaller than yours (about 10 times) and cause my acceleration values smaller than it should be for about 10 times (for example, instead of

0.10 0.10 1.00 now they turn to 0.01 0.01 0.10). Could you please explain me about this difference between your result and mine? Even if I use the result of 6-point calibration you posted in previous post, the beta values are still not the same with ones you posted here.

Thanks a lot,

trungoc

]]>5.1922e+002 5.1922e+002 5.1922e+002 1.1130e-003 1.1138e-003 1.1092e-003

Compare to yours I realize that my beta(4), (5) and (6) are smaller for about 10 times. Could you please explain this for me?

]]>Applying a sensitivity scaling (deltas) transforms the raw accelerometer output to g (gravitational acceleration) units. If no external acceleration is applied to the accelerometer (i.e. when it is still), it will only detect the gravitational acceleration, which measured in g’s is 1.

The formula is merely Phytagoras theorem squared in 3D linear space. To get the resulting acceleration for all three directions, you would apply the square root to it. Since sqrt(1) = 1, the 1 remains intact.

]]>thanks,

Ted

]]>So I have a few questions and wondering if you can answer;

1) Is your calibration method based on gauss-newton also applicable on other accelerometers/magnetometers ? I’m using MPU9150.

2) In BestSphereGaussNewtonCalibrator.cpp the calibrate method，should the change be

change = JtR[0]*JtR[0] + JtR[1]*JtR[1] + JtR[2]*JtR[2] + JtR[3]*JtR[3]/(_beta[3]*_beta[3]) + JtR[4]*JtR[4]/(_beta[4]*_beta[4]) + JtR[5]*JtR[5]/(_beta[5]*_beta[5]);

instead of

change = JtR[0]*JtR[0] + JtR[1]*JtR[1] + JtR[2]*JtR[2] + JtR[3]*JtR[3]*(_beta[3]*_beta[3]) + JtR[4]*JtR[4]*(_beta[4]*_beta[4]) + JtR[5]*JtR[5]*(_beta[5]*_beta[5]);

I’m appreciate for your answer;

thanks,

Ted

]]>