I am working on a MEMS based project which requires me to calculate the orientation(Euler Angles) of an object using only GYROSCOPES.

The GYROSCOPE BIAS is calculated in the beginning for 2 seconds keeping it stationary.

Right now GYROSCOPES give me an accuracy of 2 degrees for a period of 3-4 mins of continuous movement.

Now if there is continuous movement beyond 3-4 mins, the GYROSCOPE BIAS would have changed and hence the errors increases rapidly.

My Question is:

1). If the bias drift changes randomly(as read),the angles start increasing in one direction, then why cant we track it for first ten seconds and then keep subtracting the present angles from initially calculated angles,for every ten seconds during movement.

I tried this out, but it does not work as expected.

Can GYROSCOPE BIAS be tracked by any way?

Thanks in advance.

  • $\begingroup$ Comment: If your issue is keeping the error under 2 degrees for more than 4 minutes with arbitrary rotations then you have to account for the earth's rotation and for other sources of cumulative error. The earth is not an inertial reference. In 4 minutes the earth has rotated about 1 degree (360 degrees per sideral day). And if you are not located at the poles or on the equator that rotation is on a computationaly awkward axis. As you turn on a locally vertical axis the contribution from the earth's rotation varies across roll,pitch, & yaw. Calibrated on the equator facing North you have to... $\endgroup$
    – Bgr967dhr
    Commented Jan 7, 2017 at 23:51
  • $\begingroup$ ...subtract 0.25 degrees per minute to show 0 rotation rate on the primary axis. Then turn to face South and it will read 0.5 degrees per minute! Rotation of the earth makes rotation rate (relative to the earth) challenging to compute. Consider the contribution of the accuracy/precision of the original orientation relative to earth, the angular rate measurements, sampling rate (because you can only sample the continuously changing rotation rates), coordinate transformation calculations from the current measurement axes to the starting axes, and the accumulation of the incremental rotations... $\endgroup$
    – Bgr967dhr
    Commented Jan 7, 2017 at 23:51
  • $\begingroup$ ...to the current Euler angles relative to the starting position (underflow during addition). There is a limit to the achievable accuracy even with no gyro "bias". $\endgroup$
    – Bgr967dhr
    Commented Jan 7, 2017 at 23:51
  • $\begingroup$ Yes true....Now I have calibrated the gyroscope for Sensitivity,Cross axis sensitivity and Non Orthogonality, and the results are more consistent and there is a bit improvement in the drift also $\endgroup$
    – Nithin G A
    Commented Jan 13, 2017 at 10:47

1 Answer 1


You say,

Then why can't we track [the angles] for first ten seconds and then keep subtracting the present angles from initially calculated angles for every ten seconds during movement?

You can't subtract angles from a gyroscope reading because the gyroscope measures angular velocity. This is kind of like asking why you can't subtract your odometer reading in your car from your speedometer - you're talking about a distance and a speed. Well, an angle is an angular position or an angular distance, and again, the gyroscope measures an angular speed.

You can "calibrate" a gyroscope by controlling its speed (generally ensuring it's stationary) and measuring the output. Then you average the output and offset it such that it reads the known speed (again, this usually means averaging and subtracting whatever that average is from future readings).

The problem you'll have with trying to do this continuously is that the actual (physical) input to the gyroscope is probably not zero-mean. So, if you average the angular speed (angular velocity, angular rate, etc.) over some period of time, you don't have a good way of separating the actual input signal from the bias ("offset") of the gyroscope.

For example, if you read an average angular speed of 1.5 deg/s for 10 seconds, is that reading correct, or is it actually 1 deg/s and a bias of +0.5 deg/s, or is it actually 2 deg/s and a bias of -0.5 deg/s?

Here's the problematic part of what you're doing - when you take that average and subtract it from all future readings, you are mathematically stating that the gyroscope is, on average, stationary for that 10 second interval because the very next sample you get that says it's rotating at 1.5 deg/s, you're going to subtract the running average from that and get (1.5-1.5) = 0 deg/s.

The only way you can do what you're talking about - averaging angular speed and using that to correct future samples - is to know that the device will be "stationary" over the average of whatever your sampling interval is.

What you might be able to do is to take multiple units, and average their output, use that average as truth, and then conclude that the bias is the difference between the individual unit's reading and the averaged output.

So, if you had two units, and one read 1.5 deg/s averaged over 10 seconds, and the other read 2.0 deg/s averaged over the same interval, then you could say that the "true" motion was 1.75 deg/s, and the first unit has a bias offset of -0.25 deg/s and the second has a bias offset of +0.25 deg/s.

The more units you get, the better your results will be. It would of course be extremely important that the units are all rigidly coupled; any significant flexing of the substrate between sensors would ruin your data.

  • $\begingroup$ I think there is a misunderstanding.Calculate the drifted angles from the first ten seconds, Say x, then keep subtracting them after ten seconds by all the angles calculated. $\endgroup$
    – Nithin G A
    Commented Jan 5, 2017 at 8:49
  • $\begingroup$ Adding units is a nice idea ...will try that out $\endgroup$
    – Nithin G A
    Commented Jan 5, 2017 at 9:06
  • $\begingroup$ @NithinGA - The gyro measures an angular rate; the bias offset is an offset on the speed. So you measure the angular drift (caused by the speed offset) for the first ten seconds, and then what? The speed offset still exists, so if you subtract the initial angle offset from future samples, then that only corrects the drift that occurred in the first ten seconds. You need to hold the gyro stationary, measure the speed for 10 seconds, average that, then subtract that average speed from future speed readings. Angle output is the first integral of the (now corrected) speed. $\endgroup$
    – Chuck
    Commented Jan 5, 2017 at 13:59
  • $\begingroup$ Right now I am doing that...Avearging first 2 seconds gyro ANGULAR RATE and then subtracting from the future ANGULAR RATE. $\endgroup$
    – Nithin G A
    Commented Jan 6, 2017 at 5:49
  • $\begingroup$ But What I observe is,because of the RANDOM DRIFT, the angles increase or decreases in a particular direction LINEARLY,so why cant we calculate the angles drifted for say for 10 seconds, then in the future,we can subtract this for every ten seconds once from the calculated future angles, I am saying this because of the LINEAR INCREASE OR DECREASE observed in the angles. $\endgroup$
    – Nithin G A
    Commented Jan 6, 2017 at 5:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.