This is a common problem with the gyro. We got the following solution
from http://www.droidsrobotics.org, and in turn have contributed some of
our code to their great site. I encourage other teams to help these guys
build a useful repository of foundational code, they're doing it the right
Anyway - here is the code that will cure your gyro woes:
I'm not sure how well the photo will come through, but here's a brief
explanation - this all goes into a 'reset gyro' myBlock that you can call
when you need to reset it.
1) play a tone to signify the start of calibration
2) read the angle and rate
start a loop
3) read the angle only - apparently switching from angle+rate to angle mode
causes it to go into reset mode
4) check to see if the angle is >= 0 OR < 0, more on that in a moment
end the loop when step 4 evaluates to true
5) play a tone to signify that calibration has finished.
So, what the heck is going on here? It appears that when you switch from
reading angles/rates, to just angles, it causes the gyro to reset itself.
While it is resetting, it will return 'NaN', which stands for 'Not a
Number'. NaN's have caused me more headaches than I care to admit as a
professional software engineer... they're hard to detect. The property
that is being exploited here is that NaN returns 'false' when compared to
any other number. It's not >, =, or < anything, because it's Not a
Number. What the loop is doing is just reading the angle from the gyro
(after it has been put into reset mode) until it starts returning actual
Finally - Once I found this, I tried it out and simply explained it to the
team. I strongly believe that you don't have to re-invent everything. If
someone else has published a good solution, then it's perfectly fine to
understand it and use it. It gave us a great opportunity to discuss how
computers represent things like NaN (which can happen when you divide a
number by zero). They all understood it and we have a robot that turns :)
Hope this helps you or anyone else that is suffering from the dizzy robot
Coach, "The Construction Mavericks"
On Mon, Nov 10, 2014 at 9:09 PM, Naren Botlaguduru <[log in to unmask]>
> First of all thanks to this community for clarifying lot of questions.
> Great work.
> We are using Gyro sensor this year and understand about the Drift.
> We tried following but still Robot sometimes just spins....
> 1. Kids are resetting the sensor before every program and also couple of
> times in the program.
> 2. Compare is set to equal to rather than Greater than Equal to or Less
> than equal to as those both options didn't work for us.
> 3. We are also deducting some drift value to get right angle value.
> 4. Kids are using a very slow power to do the turns.
> But still the program that works one day is not working another day due to
> the Gyro sensor keeps on rotating sometimes. Kids are restarting the Robot
> when they see that but still not helping.
> Any tips and tricks to solve this will be a great help. Is there firmware
> or something that need to be done so that Gyro sensor doesn't give us that
> drift and gives perfect angle stop.
> Thanks in advance for any help with Gyro Sensor.
> To UNSUBSCRIBE or CHANGE your settings, please visit
> https://listserv.jmu.edu/archives/vadcfll-l.html and select "Join or
> leave the list".
> VADCFLL administrative announcements are sent via VADCFLL-ANNOUNCEMENTS-L.
> Visit https://listserv.jmu.edu/archives/vadcfll-announcements-l.html to
-- To UNSUBSCRIBE or CHANGE your settings, please visit https://listserv.jmu.edu/archives/vadcfll-l.html and select "Join or leave the list".
-- VADCFLL administrative announcements are sent via VADCFLL-ANNOUNCEMENTS-L. Visit https://listserv.jmu.edu/archives/vadcfll-ANNOUNCEMENTS-l.html to subscribe.