wunderwaffe: рабочее (Default)
доктор Вандершпигель ([personal profile] wunderwaffe) wrote2022-04-15 04:40 am
Entry tags:

Интегрировай (с)

По мотивам https://wunderwaffe.dreamwidth.org/44858.html - шаг интегрирования, как оказывается, очень груб если использовать millis() вместо micros()
УПД: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 минут"