PID control loop, question about giro drift and acc noise

Hi guys,

I want to understand more about the control loop design of the ardupilot or in general.

Maybe this link here is a good example:

When you look e.g. at the roll-autopilot (see picture above), you can see that the IMU-inputs are the roll_rate and roll_angle.
I guess the roll_rate comes only from the giro, where the roll_angle is a fusion of giro an accelerometer data (and maybe magnetometer etc.).

But lets assume you want to fly in a certain roll angle for a longer period of time, can it be that the MeasuredRollRate will drift away (because of the giro drift?).

I mean the angular-rate in particular (or also the acceleration) will always kinda build up (or already has) an error (over time/voltage/temperature, etc), right? Because for the angular-rate or acceleration there is simply no data fusion available, you need to work with the bare data delivered from the giro or accelerometer.
The only reasonably accurate value what you can get is the pitch,yaw, roll - angle, right? Because to determine an “accurate” angle, you can fuse the accelerometer, giro (and magnetometer, etc.) data together which then gives you a reasonably accurate attitude of your vehicle.
Am I somewhere wrong with that?

So how does the giro-drift or acceleration-error(-setpoint) gets reset during flight? Or will the vehicle just drift away after some seconds?

And why is all the Kalman-filtering stuff necessary if the PID needs the “raw” acceleration and rate data anyway?


P.S. Isn’t the roll-angle rather calculated than measured as stated in the picture (“MeasuredRollAngle”)?

yes, its estimated.
However the EKF is very good at estimating gyro drift and gyro scale factor error. It has a lot more info than just accels to do that, it also has GPS velocity and mag data.
Basically gyro drift as a source of attitude error is now pretty rare in ArduPilot.

1 Like