Итак, были взяты следующие библиотеки для фильтра Маджвика для ардуины -
1) оригинальная, https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/
2) Амперка, http://wiki.amperka.ru/products:troyka-imu-10-dof-v2
3) Роботкласс, https://robotclass.ru/articles/madgwick-filter/4/
В оригинальной остались обе ошибки - и приближенного вычисления обратного квадратного корня(Е1), и в раскрытии формулы градиентального спуска с использованием магнитометра(Е2).
Амперка - Е1 нет, использованием в лоб ф-ии sqrtf, но Е2 присутствует.
Роботкласс - Е2 нет, зато присутствует Е1.
Код для без магнитометра везде одинаковый, но то, что он делает, работой назвать трудно, см. предыдущую запись.
Может, поэтому - в статье-переводе https://habr.com/ru/post/255661/ ("Кое-где буду от себя добавлять — там текст выделен курсивом. Мною найдено более 10 опечаток в оригинальном тексте" - прим. переводчика) оригинального текста Маджвика много места уделяется коэффициенту зета -
" Коэффициент усиления фильтра ζ представляет собой скорость сходимости для удаления ошибок измерения гироскопа, не связанных с нулём и также выражен как величина производного кватерниона. Эти ошибки представляют собой смещение гироскопа. ... Коэффициент усиления ζ, применимый только к варианту с гироскопом, был установлен в 0, так как калибровка датчиков ориентации не предполагает дрейф смещения гироскопа."
которого в коде я не нашол. Есть упоминание в библиотеки амперки -
"// Compute zeta
constexpr float ZETA_DEFAULT = sqrt(3.0f / 4.0f) * GYRO_MEAS_DRIFT;"
Но он там никак не используется. З а е б и с ь.
1) оригинальная, https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/
2) Амперка, http://wiki.amperka.ru/products:troyka-imu-10-dof-v2
3) Роботкласс, https://robotclass.ru/articles/madgwick-filter/4/
В оригинальной остались обе ошибки - и приближенного вычисления обратного квадратного корня(Е1), и в раскрытии формулы градиентального спуска с использованием магнитометра(Е2).
Амперка - Е1 нет, использованием в лоб ф-ии sqrtf, но Е2 присутствует.
Роботкласс - Е2 нет, зато присутствует Е1.
Код для без магнитометра везде одинаковый, но то, что он делает, работой назвать трудно, см. предыдущую запись.
Может, поэтому - в статье-переводе https://habr.com/ru/post/255661/ ("Кое-где буду от себя добавлять — там текст выделен курсивом. Мною найдено более 10 опечаток в оригинальном тексте" - прим. переводчика) оригинального текста Маджвика много места уделяется коэффициенту зета -
" Коэффициент усиления фильтра ζ представляет собой скорость сходимости для удаления ошибок измерения гироскопа, не связанных с нулём и также выражен как величина производного кватерниона. Эти ошибки представляют собой смещение гироскопа. ... Коэффициент усиления ζ, применимый только к варианту с гироскопом, был установлен в 0, так как калибровка датчиков ориентации не предполагает дрейф смещения гироскопа."
которого в коде я не нашол. Есть упоминание в библиотеки амперки -
"// Compute zeta
constexpr float ZETA_DEFAULT = sqrt(3.0f / 4.0f) * GYRO_MEAS_DRIFT;"
Но он там никак не используется. З а е б и с ь.