Техника

Гироскоп - акселерометр MPU6050. Как избавиться от дрейфа по оси Z?

Применил фильтр Калмана к трем осям. На выходе с интервалом в 1 сек.:

X:178 Y:180 Z:5

X:179 Y:180 Z:14

X:178 Y:179 Z:23

X:178 Y:180 Z:5

X:179 Y:180 Z:10

X:179 Y:180 Z:6

X:179 Y:180 Z:357

X:179 Y:180 Z:18

X:179 Y:180 Z:4

X:179 Y:180 Z:12

X:179 Y:180 Z:354

X:178 Y:180 Z:6

X:179 Y:180 Z:13

X:179 Y:180 Z:15
Никак принципиально.
Берем гироскоп.
На самом деле это не гироскоп, а всего лишь устройство, измеряющее величину силы тяжести по осям X,Y, Z.
Сила тяжести у нас центральная, направление - вертикально вниз.
По осям Х и Y отклонение - это отклонение от вертикали. И шумы можно путем фильтрации убрать.
Отклонение по оси Z - это вращение вокруг вертикальной оси. Т. е. значение этого отклонения, если ты не отклоняешь сою плату от вертикали, а только вращаешь - не меняется.
Поэтому мы при помощи гироскопа мы это перемещение отслеживать не можем. Но можем как то отследить вращение вокруг этой оси используя данные с акселерометра и используя их уже как то корректировать отклонения гироскопа по оси Z.
Т. е. без хорошей математики, просто жонглируя данными, получаемыми с датчика, дрейф не убрать.

Более-менее приличный результат можно получить, добавив магнитометр (его еще называют магнитным компасом... неправомерно).
Алгоритм такой. Мы знаем ориентацию вектора магнитного поля в твоей конкретной местности. Гироскоп дает нам приличные отклонения по осям x и Y. Используя их и показания магнитометра, мы вычисляем условно говоря направление на север. (На магнитный полюс.)
Вот это направление будет уже довольно объективной (шум естественно будет - куда без него то... ).

Но магнитометр это тоже не панацея. Реагирует на все железяки и прочие флуктуации магнитного поля.

Теоретически мы можем использовать еще и GPS... но это уже так далеко от первоначальной простоты, что мама не горюй.
Тем более, что в условиях, когда спутники не видны, например в квартире уже и этот прибор работать откажется.
Вита Петрусева
Вита Петрусева
26 971
Лучший ответ
Валентина Алисейко Есть у меня магнитометр. Пока не подключил, решив, что ангуляции по оси Z с MPU6050 мне пока хватит. Видимо, я ошибся, решив, что это проще. Не знаете, где взять скетч обработки данных с гироскопа-акселерометра и магнитометра для получения теперь уже азимута для Ардуино?
вычислять среднее, не трясти руками
Ануар Абуов
Ануар Абуов
80 859
Валентина Алисейко Устройство лежит на поверхности. Почему оси X и Y не дрейфуют, а Z дрейфует? К ней какой-то особый подход нужен? Я её обработал так же, как и X и Y:
accX = ((data[0] << 8) | data[1]);
accY = ((data[2] << 8) | data[3]);
accZ = ((data[4] << 8) | data[5]);
tempRaw = ((data[6] << 8) | data[7]);
gyroX = ((data[8] << 8) | data[9]);
gyroY = ((data[10] << 8) | data[11]);
gyroZ = ((data[12] << 8) | data[13]);
/* Calculate the angls based on the different sensors and algorithm */
accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG;
accXangle = (atan2(accY,accZ)+PI)*RAD_TO_DEG;
accZangle = (atan2(accX,accY)+PI)*RAD_TO_DEG;
double gyroXrate = (double)gyroX/131.0;
double gyroYrate = -((double)gyroY/131.0);
double gyroZrate = -((double)gyroZ/131.0);
gyroXangle += kalmanX.getRate()*((double)(micros()-timer)/
Забить х уй