Всем привет! Пытаюсь запустить фильтр Маджвика в своем проекте на stm32c8t6, но безуспешно. Реализацию взял здесь https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/. На вход фильтра подаю данные гироскопа в рад/с, данные акселерометра и магнетометра. В конце фильтра функции перевод в радианы по этим формулам:
yaw = atan2(2.0f * (q[1] * q[2] + q[0] * q[3]), q[0] * q[0] + q[1] * q[1] - q[2] * q[2] - q[3] * q[3]);
pitch = -asin(2.0f * (q[1] * q[3] - q[0] * q[2]));
roll = atan2(2.0f * (q[0] * q[1] + q[2] * q[3]), q[0] * q[0] - q[1] * q[1] - q[2] * q[2] + q[3] * q[3]);
и перевожу из радиан в градусы * (180/pi).
Еще нашел такой проект https://github.com/kriswiner/MPU9250/blob/master/MPU9250BasicAHRS_t3.ino. Проверял все по строчкам, все то же самое, получаю данные с датчика отправляю на фиьтр и тд.
В итоге получаю значения не углов, а пляски значений. Во-первых они бывают не постоянны, да еще и не соотвествуют реальности.
Вот на скрине все показания, первые паоказания это через фильтр Маджвика, а последние 3 значения углы, которые соответствуют реальности, полученные через комплементарный фильтр, единсвенно последнее значение рысканья без учета магнетометра, просто с гироскопа, которое соответсвенно плывет.
По крену конструкция реально почти 90 градусов, это видно по последним показаниям R. По тангажу то же самое. Но первые показания не понятно что показывают и пляшут.
Но если трясти конструкци, удерживая ее ровно по осям, углы уже сильно скачут, когда ориентация конструкции не изменилась, то комплементарный фильтр совсем не годится.
Еще заметил один момент, если выровнять консрукцию до 0, то показания с фильтра маджвика совпадают с комплементарным, там 0 и там 0 по той оси, что выровнял.
Прошу подсказать, кто шарит в этой теме, где я могу косячить и чего не учел.