доктор Вандершпигель (
wunderwaffe) wrote2022-04-15 04:40 am
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Entry tags:
Интегрировай (с)
По мотивам https://wunderwaffe.dreamwidth.org/44858.html - шаг интегрирования, как оказывается, очень груб если использовать millis() вместо micros()
УПД:ARW стал лучше раза в два. Конечно, тупо интегрировать углы Эйлера - так себе идея, но почему чем меньше амплитуда качаний А, тем больше ARW? Для А~140 град. за 5 мин. уход 3-5 град., для А~10 уход 10-15 градусов? Независимо от оси и гироскопа.

Красная линия - шаг времени (время исполнения цикла loop() в миллисекундах) - если его измерять в micros(), и черная линия - в millis(). Трудно ожидать хороших результатов, если шаг времени скачет случайным образом в полтора раза.
Та же лажа для Madgwick9DOF.ino -
И для Razor_AHRS.ino -
Не знаю, почему - наверно, "Возвращаемое число переполнится (сбросится в 0) спустя приблизительно 70 минут"
УПД:ARW стал лучше раза в два. Конечно, тупо интегрировать углы Эйлера - так себе идея, но почему чем меньше амплитуда качаний А, тем больше ARW? Для А~140 град. за 5 мин. уход 3-5 град., для А~10 уход 10-15 градусов? Независимо от оси и гироскопа.

Красная линия - шаг времени (время исполнения цикла loop() в миллисекундах) - если его измерять в micros(), и черная линия - в millis(). Трудно ожидать хороших результатов, если шаг времени скачет случайным образом в полтора раза.
Та же лажа для Madgwick9DOF.ino -
// Вычисляем затраченное время на обработку данных unsigned long deltaMillis = millis() - startMillis; // Вычисляем частоту обработки фильтра sampleRate = 1000 / deltaMillis;
И для Razor_AHRS.ino -
timestamp = millis(); if (timestamp > timestamp_old) G_Dt = (float) (timestamp - timestamp_old) / 1000.0f; // Real time of loop run. We use this on the DCM algorithm (gyro integration time) else G_Dt = 0;
Не знаю, почему - наверно, "Возвращаемое число переполнится (сбросится в 0) спустя приблизительно 70 минут"