Page 1 of 1

Gyro calibration (zeroing), movement detection

Posted: Sun Dec 09, 2012 6:51 pm
by alll
Hi,

I have had weird behaviors when starting motors after power up the copter.
So if i hold the copter upsidedown and move it while powering the board, arm and start, sometimes, not all motors start at the same time. If after power up, i do a gyro cal. all is smooth! So, for now i always do a manual gyro calibration.

So, could we not always do a gyro zeroing on power up (automatic gyro cal.), as long as "movement" is detected, redo a gyro calibration (zeroing).

manu

Re: Gyro calibration (zeroing), movement detection

Posted: Sun Dec 09, 2012 10:15 pm
by alll
So, i came up with this: Goal, when board is powered up, and the board moves, continue trying to find gyro zero's (gyro calibration)

Alex, or some other developer, can you tell me if this could be written using less variables. Is the the right place to do it?

manu

In void setup() at line

Code: Select all

//  calibratingG = 400;


i replaced with :

Code: Select all

  int16_t movement1[3]={10,10,10};
  uint8_t movement=10;
  while (movement>0) {
    calibratingG = 400;
    while (calibratingG>0)computeIMU();
    movement1[ROLL]=gyroZero[ROLL];
    movement1[PITCH]=gyroZero[PITCH];
    movement1[YAW]=gyroZero[YAW];
    calibratingG = 400;
    while (calibratingG>0)computeIMU();
    movement=abs(movement1[ROLL]-gyroZero[ROLL])+abs(movement1[PITCH]-gyroZero[PITCH])+abs(movement1[YAW]-gyroZero[YAW]);
  }

Re: Gyro calibration (zeroing), movement detection

Posted: Sun Dec 09, 2012 11:36 pm
by Mis
Check leatest DEV version.

Code: Select all

 /************************        continuous gyro calibration        ********************/
  /* Gyrocalibration will be repeated if copter is moving during calibration. */
    //#define GYROCALIBRATIONFAILSAFE

If you uncomment this line you get effect exactly as you want.
Calibration is restarted until the board stop moving.

Re: Gyro calibration (zeroing), movement detection

Posted: Mon Dec 10, 2012 7:23 am
by alll
Good! But i can't imagine doing a gyro zero calibration without this movement check! Why is it not enabled by default ?
Thanksmanu

Re: Gyro calibration (zeroing), movement detection

Posted: Mon Dec 10, 2012 8:40 pm
by doughboy
alll wrote:Good! But i can't imagine doing a gyro zero calibration without this movement check! Why is it not enabled by default ?
Thanksmanu


I agree.
why it is not enabled? people with check in priviledge is turning mw source into their own personal source code. just look at trunk/multiwii, someone checked in his personal config.h. imho, there should be some kind of code review process before check in.

Re: Gyro calibration (zeroing), movement detection

Posted: Mon Dec 10, 2012 9:22 pm
by Hamburger
We do peer reviews after checkin :)

Re: Gyro calibration (zeroing), movement detection

Posted: Mon Dec 10, 2012 9:31 pm
by alll
i don't find GYROCALIBRATIONFAILSAFE in v2.1 ?

Re: Gyro calibration (zeroing), movement detection

Posted: Mon Dec 10, 2012 9:40 pm
by doughboy

Re: Gyro calibration (zeroing), movement detection

Posted: Mon Dec 10, 2012 10:31 pm
by jevermeister
we had this discussion weeks ago. gyro calibration is influenced by temperature. so automatic repeat can lead to an unflyable copter. especially if you can arm it while it is still trying to calibrate.

Imho everybody should manually calibrate the gyro after powering up anyway. No toy!

Re: Gyro calibration (zeroing), movement detection

Posted: Mon Dec 10, 2012 11:13 pm
by alll
No!
The code i posted is called only in setup, and only on power up as long as you don't keep the copter still, it loops calibrating.

I fly like this now and this is the way it should be imho. You can still calibrate via sticks after if you want.

manu

Re: Gyro calibration (zeroing), movement detection

Posted: Mon Dec 10, 2012 11:23 pm
by jevermeister
Heard that.

But what if the gyro won't stop restarting calibration because of temp drift?I experienced that the last time I tested this. I' d rather fly with a not proper centered gyro than with a gyro that tries to calibrate over and over again.

This topic has been discussed three times in multiwii and two times at shreddiquette. Everytime we came to the same conclusion: Not neccesary and has to be overrideable in case of temp drift.
This function is called "moron mode" in certain other projects for a reason. *wink at tc*

I think it is good to be disabled by default.Everyone who is unable to find,change and compile it should not fly a copter. everyone else may enable it.

by the way: I only follow arguments given to me regarding vbat, inflight acc etc. enable as less as possible per default and make the user have to change config.h to get a flying copter.
Nils

Re: Gyro calibration (zeroing), movement detection

Posted: Mon Dec 10, 2012 11:47 pm
by alll
Again, the way i do the calibration (movement detection) is to do 2 calibrations after each other, compare, if == it means no movement and the gyroZero's are correct! Even if temperature affects gyro, it should settle at a certain point, and the 2 calibrations will be identical.
Am i missing something here?
Where can i read about the discussion you had before, to better understand your point.
Thanks,
manu

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 3:52 am
by Mis
I commit this feature some times ago as mandatory. But someone change it to an option, and turn off by default. Why ? I don't know.
In my opinion the argument about themperature drift is irrational. It is not possible to quickly change the temperature so that no calibration to be performed.
And this is not "moron mode", if you have battery conector at bottom of copter can't power up the copter without shaking it.
But jevermeister is guru and knows better.

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 3:57 am
by timecop
It is moron mode, because people repeatedly have plugged stuff in while shaking the copter, have SEEN non-zero offsets on gyros, and STILL continue attempting to take off after that, resulting in flips/crashes/wahtever.

The wiki/faq/whatever clearly says gyro MUST be calibrated after each power up by stick combo before flight.

NOONE reads this.

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 5:58 am
by jevermeister
Who said I am guru?I gave a technical explanation why I am againat rhat everytime I stared my point. What more do you expext?
That "someone" who changed the geature to an option was me - I even explained why. FYI: You can see who changed the code in SVN.

If you do not like it, then change it but provide an explanation for that. Dude, even failsafe isn't mandatory.Those people start their copters without even knowing what they to on a connectoon lost. My only intention was to make flying saver. But go on and change it - I don't care anymore.

nils

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 8:24 am
by scrat
So it is not good to uncomment gyrocalibrationfailsafe?

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 9:32 am
by jevermeister
hi,
scrat you can try to uncomment it and see if it works for you.if not then you can comment it again. that was the whole intention.

By disabling it default I wanted to prevent the idiots that do not read the manual from killing their copter by arming, or getting nts because the copter is unable to arm.

the function is still there. I don't see a problem with that.
it is alex policy to disable most of the features by default.
see infligt calibration,failsafe,vbat,motorstop. all are important featurea that are diaqbled by default and noones has a problem with simply enabling them.

guru

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 10:43 am
by scrat
I just ask because I have uncommented this feature and it works for me.
I have tested it and if I move copter when powering it gyrocalibration goes on and on. When I stop moving the copter gyrocal stops and copter flyes very well.

And I'm using define motor_stop too :)

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 10:59 am
by jevermeister
Hi, I am happy that it works for you. I had several problems with functions like this when I moved gyros from warm inside or car to cold outside. I tried that with a whole selection of gyros. This is the reason why I am against a default activation - I stated this countless times before btw.

scrat: thanks for that feedback.

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 11:05 am
by scrat
But I always leave my quad outside in winter for about 20 minutes before connecting battery. I wait for gyros to settle in cold weather.

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 11:31 am
by jevermeister
scrat wrote:But I always leave my quad outside in winter for about 20 minutes before connecting battery. I wait for gyros to settle in cold weather.

that is a correct behavior especcially for the battery and the cpu but I do not have time for that every time I fly.

Nils

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 11:57 am
by nicog
Hmmm, I'm not so sure, waiting and leaving the batery to cool down to below freeze level will just make things bad. Lipos don't like the cold (there is some alcohol inside) and make the electrolyte to densify. This leads to a less responsive batery in terms of electric power.

And as everybody knows, batery gets warm on use, wich is normal. So from all of my testing (flew a lot last year and filmed ice climbing) best thing is keep the bat inside the jacket to keep it warm, then plug it when ready (yes you can leave the MR outside in the cold) and fly. Flight time is much similar to summer time this way.

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 12:36 pm
by alll
The way you do the calibration is different from mine!
If I get it correct, you check every 10 samples (out of the 400) the difference of current gyroADC with previousgyroADC(10 samples before) for the 3 axis. If there is a difference you reset calibrating=1000 (not 400?) to start over.
(by the way the line after #if defined(GYROCALIBRATIONFAILSAFE) “previousGyroADC[axis] = gyroADC[axis];” should not be there…)
Why if tilt==1 you set calibratingG =1000 and not 400?

My implementation of “movement detection” just compares 2 successive 400 sample calibrations = comparing 2 averages.

So your statement to never get out this loop (not able to arm) because of temperature is maybe true for your implementation, but is less with my implementation.

And the way it is implemented in v2.1, is more dangerous for us “noops, Mormons, idiots”. Let the code help those Mormons that don’t have a clue what they are doing…

PS:
“Who said I am guru?” : Just the fact you mentioned TC as a reference. ;)
Also, what is the best failsafe procedure for multicopters…, tell me?



Your code ver dev_r1240:

Code: Select all

if (calibratingG>0) {
    for (axis = 0; axis < 3; axis++) {
      // Reset g[axis] at start of calibration
      if (calibratingG == 400) {
        g[axis]=0;
       
        #if defined(GYROCALIBRATIONFAILSAFE)
            previousGyroADC[axis] = gyroADC[axis];
          }
          if (calibratingG % 10 == 0) {
            if(abs(gyroADC[axis] - previousGyroADC[axis]) > 8) tilt=1;
            previousGyroADC[axis] = gyroADC[axis];
       #endif
      }
      // Sum up 400 readings
      g[axis] +=gyroADC[axis];
      // Clear global variables for next reading
      gyroADC[axis]=0;
      gyroZero[axis]=0;
      if (calibratingG == 1) {
        gyroZero[axis]=g[axis]/400;
        blinkLED(10,15,1);
      #if defined(BUZZER)
        alarmArray[7] = 4;
      #endif
      }
    }
    #if defined(GYROCALIBRATIONFAILSAFE)
      if(tilt) {
        calibratingG=1000;
        LEDPIN_ON;
      } else {
        calibratingG--;
        LEDPIN_OFF;
      }
      return;
    #else
      calibratingG--;
    #endif

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 12:51 pm
by timecop
Pretty sure calibratingG=1000 was a copypaste from baseflight where this number is higher due to lower cycle time.

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 1:29 pm
by jevermeister
its not my code... I only put it into a define clause.
feel free to erase it.

the battery facts are correct. I was wrong. sorry

nils

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 1:39 pm
by timecop
I know, I was referring about mis copypaste.

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 3:36 pm
by alll
Could you come to a conclusion here? Is the code i posted in the beginning a valid option?

ALWAYS do a manual gyro calibration before takeoff (for the gurus)
OR
Automatically calibrate after power up, with correct working code (for the Mormons that expect code logic could do it for them)

thanks,
manu

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 6:02 pm
by doughboy
If we all look at this objectively,

MIS committed the original code, with no option to disable.
Nils ran into some problem, then made the change to add a config option and disabled by default.
http://code.google.com/p/multiwii/sourc ... d/config.h
As far as I can tell from previous discussion, even Alex thinks the issue Nils encountered should be addressed separately (if I were reading between the lines, that means to just disable it in his own code).

As far as I can tell, nobody else has this problem. We are not doubting Nils experienced this problem, but so this does not appear like a committer checking in his personal code, we can compromise and say keep the option in but make the default enabled, unless the original author have any other suggestions.

if this is enabled by default, and more users come forward with problems, then this can be addressed at that time. But for now, I have not seen anyone else having problem with the option enabled. and while this option is disabled by default, this type of discussion will just keep coming up again and again.

comparing this to vbat disabled by default is not right. since not all boards have vbat circuit so it does not make sense to enable it by default, but all boards must have a gyro.

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 6:13 pm
by Mis
Timecop, you are wrong.

Why if tilt==1 you set calibratingG =1000 and not 400?

Load a 1000 to calibratingG counter is for additional delay between stop moving detection and begin of calibration. The calibration begin after calibratingG reached value of 400.

(by the way the line after #if defined(GYROCALIBRATIONFAILSAFE) “previousGyroADC[axis] = gyroADC[axis];” should not be there…)

This statement set initial value of previousGyroADC at start of calibration (if calibratingG == 400). Without this, if the copter is stable at startup, the first attempt to calibration can give a false motion detection.

timecop wrote:The wiki/faq/whatever clearly says gyro MUST be calibrated after each power up by stick combo before flight.NOONE reads this.

Show me this in FAQ/WIKI ect.
The FAQ says: "Calibration is made on each power on, but you can do it manually like before:". CAN, not MUST... How about this ??

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 9:27 pm
by alll
(by the way the line after #if defined(GYROCALIBRATIONFAILSAFE) “previousGyroADC[axis] = gyroADC[axis];” should not be there…)

This statement set initial value of previousGyroADC at start of calibration (if calibratingG == 400). Without this, if the copter is stable at startup, the first attempt to calibration can give a false motion detection.


Sorry, didn't look carefully enough, didn't saw the "if calibratingG == 400 {...}"

For the math people, is there a difference for the detection of movement, comparing
"2 consecutive 200 sample averages"
to
"40 compares (separated by 10 samples) out of 400 samples"

Thanks for the constructive feedback,

manu

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 9:39 pm
by alll
Since temperature will affect gyroZero values, we could store the gyro temp after a successful calibration, if the temp changes a warning should tell us to do a manual recalibration... or if there a magic formula that compensates the gyroZero values base on temp changes after calibration...

Is there already a temp compensation build in or to activate in resent gyro's?

manu

Re: Gyro calibration (zeroing), movement detection

Posted: Tue Dec 11, 2012 11:28 pm
by Mis
For the math people, is there a difference for the detection of movement, comparing
"2 consecutive 200 sample averages"
to
"40 compares (separated by 10 samples) out of 400 samples"


Yes of course. But the effect is similar. Is many ways for getting the same effect :-) I found one, you found another. I think both ways are good.

Re: Gyro calibration (zeroing), movement detection

Posted: Wed Dec 12, 2012 7:54 am
by scrat
nicog wrote:Hmmm, I'm not so sure, waiting and leaving the batery to cool down to below freeze level will just make things bad. Lipos don't like the cold (there is some alcohol inside) and make the electrolyte to densify. This leads to a less responsive batery in terms of electric power.

And as everybody knows, batery gets warm on use, wich is normal. So from all of my testing (flew a lot last year and filmed ice climbing) best thing is keep the bat inside the jacket to keep it warm, then plug it when ready (yes you can leave the MR outside in the cold) and fly. Flight time is much similar to summer time this way.


I leave outside just quad. Battery is in my garage.

Re: Gyro calibration (zeroing), movement detection

Posted: Wed Dec 12, 2012 11:52 pm
by alll
Hi,

I tested Mis code and mine regarding the supposed temperature drift problem with the GYROCALIBRATIONFAILSAFE option (heat gun while power up). Both do calibrate well without problems. Invensense gyro MPU6050.
I don't think many people still do use piezo gyro's, these were really temp sensitive, but even then, the code logic should get it done, unless you have a defect or noisy gyro.
manu