IMU Gyro Stability

Greetings everyone. I'm working on a project where a computer steers a farm tractor via GPS. Getting accurate position data is easy. My challenge has been getting accurate heading data. I have tried a MEMS gyro on the yaw axis, but it shows a lot of noise and the gyro bias drifts around. While it does help, it isn't sufficient for what I need.

Roll and Pitch are relatively easy since this is a ground vehicle, and I can use accelerometers to fix the gyro bias. Yaw is the axis I'm having trouble with. Unfortunately, I can't use magnetometers to calibrate the yaw gyro because of all the steel on a farm tractor.

How stable is the latest MEMS gyro technology? I have also looked at going to a ring laser gyro or a fiber optic gyro based IMU, but I can't find a 6-DOF package with either of those gyros. Ideally, I want a 6-DOF IMU with a TTL or RS-232 serial output.

What I'm looking for is a gyro that is stable enough that it can sit still for 5 minutes and only accumulate a few degrees of change in the estimated heading. Ideas?

Thanks,
Lance

You need to be a member of diydrones to add comments!

Join diydrones

Email me when people reply –

Replies

  • Hello, this thread is from 2010 hopefully somebody be out there !!

    I recently face a strange behavior with my IMU (gyro and acce). It is like a noisy sensor response.

    On the flight data tab in the mission planner I noticed that when I rotate my board arbitrary and then rest it on its level position, the bank angle as well as the pitch angle would't become zero rather, they rest on an arbitrary angle (nonzero). but after minutes these two angles slowly gain back their level angle again (0,0).

    Something like a lag response. In other words these two angles would not become level (zero) fast enough after I move the board.

    so here is what I did

    I just add these line to the void loop to see the raw values in the serial monitor

    Vector3f accel;
    Vector3f gyro;
    while(1)
    {
    delay(1000);
    imu.UPDATEarrow-10x10.png();
    accel = imu.get_accel();
    gyro = imu.get_gyro();

    Serial.printf("AX: %4.4f AY: %4.4f AZ: %4.4f GX: %4.4f GY: %4.4f GZ: %4.4f\n",
    accel.x, accel.y, accel.z, gyro.x, gyro.y, gyro.z);

    This is what I am getting when the board in level. is it normal????

    shoudl't GX be at least smaller than 0.001 when the boar is at rest.

    AX: 0.0014 AY: -0.0002 AZ: -9.7990 GX: -0.0029 GY: 0.0008 GZ: 0.0004
    AX: -0.0011 AY: -0.0031 AZ: -9.8029 GX: -0.0023 GY: 0.0005 GZ: 0.0005
    AX: 0.0005 AY: -0.0028 AZ: -9.8007 GX: -0.0023 GY: 0.0005 GZ: -0.0002
    AX: -0.0004 AY: -0.0035 AZ: -9.8016 GX: -0.0024 GY: 0.0003 GZ: 0.0003
    AX: 0.0002 AY: -0.0026 AZ: -9.7990 GX: -0.0024 GY: 0.0002 GZ: 0.0002
    AX: 0.0013 AY: -0.0001 AZ: -9.8028 GX: -0.0027 GY: 0.0005 GZ: 0.0004
    AX: 0.0006 AY: -0.0001 AZ: -9.8011 GX: -0.0024 GY: 0.0003 GZ: 0.0005
    AX: 0.0007 AY: 0.0005 AZ: -9.7992 GX: -0.0024 GY: 0.0003 GZ: -0.0001
    AX: 0.0012 AY: 0.0002 AZ: -9.8005 GX: -0.0024 GY: 0.0004 GZ: -0.0002
    AX: 0.0005 AY: 0.0007 AZ: -9.7970 GX: -0.0028 GY: 0.0004 GZ: 0.0005
    AX: -0.0001 AY: -0.0006 AZ: -9.7964 GX: -0.0024 GY: 0.0003 GZ: 0.0002
    AX: -0.0004 AY: -0.0006 AZ: -9.7994 GX: -0.0023 GY: 0.0003 GZ: -0.0002
    AX: 0.0005 AY: 0.0000 AZ: -9.7995 GX: -0.0026 GY: 0.0004 GZ: 0.0003
    AX: 0.0005 AY: -0.0016 AZ: -9.7969 GX: -0.0025 GY: 0.0005 GZ: 0.0009
    AX: -0.0014 AY: -0.0017 AZ: -9.7946 GX: -0.0028 GY: 0.0006 GZ: 0.0009
    AX: -0.0002 AY: -0.0004 AZ: -9.7916 GX: -0.0035 GY: 0.0012 GZ: 0.0013
    AX: 0.0010 AY: -0.0003 AZ: -9.7938 GX: -0.0033 GY: 0.0007 GZ: 0.0006
    AX: -0.0007 AY: -0.0013 AZ: -9.7910 GX: -0.0031 GY: 0.0008 GZ: 0.0007
    AX: -0.0006 AY: -0.0008 AZ: -9.7944 GX: -0.0032 GY: 0.0004 GZ: 0.0007
    AX: -0.0023 AY: -0.0020 AZ: -9.7968 GX: -0.0026 GY: 0.0001 GZ: 0.0002
    AX: -0.0009 AY: -0.0025 AZ: -9.7978 GX: -0.0026 GY: 0.0002 GZ: 0.0004
    AX: -0.0001 AY: -0.0021 AZ: -9.7964 GX: -0.0030 GY: 0.0002 GZ: 0.0009
    AX: -0.0008 AY: -0.0000 AZ: -9.7939 GX: -0.0027 GY: 0.0003 GZ: 0.0013
    AX: -0.0007 AY: -0.0030 AZ: -9.7967 GX: -0.0026 GY: 0.0001 GZ: 0.0006

    Any Idea?

  • GPS correction works with the yaw axis on a moving craft. Faster is better. A farm tractor is moving slow and is not skidding around I would hope. Wheel sensors, naa. Maybe an old aircraft directional gyro with an analog output. They have autopilots with heading hold functions run of this gyro. It is an actual spinning gyro and drifts very little in 5 or 10 minutes. Then it would need to be calibrated it's self from GPS travel. Very reliable data. It would surely be analog, maybe needing amplification for the ADC input. You could get one cheap at an aircraft scrap yard. They either are electric or vacuum driven. Vacuum is more common. They seem to work pretty good in an airplane when I have used them.
    Set them to the compass every 15 min. or so +-. Its goin on a tractor so I think you can spare the payload weight :)
  • Developer
    Can you place the magnetometer outside the chassis? Otherwise Optical Flow would work.
  • 100KM
    Lance ,
    you can use gps heading to bias the yaw gyro . one method that is rarely talked about here is to use a high end gyro like the ADXRS610 , thermally de-stress it , measure the bias & rate temperature coefficients , and use temp reading and the coefficients measured on a temperature controlled rate table to set the bias and rate conversion factors . this can decrees drift to <2 deg/hour on the ADXRS610 . this is how the big boys do it but is costly and time consuming but produces very accurate results.
This reply was deleted.

Activity