На устройстве я хочу обнаружить диапазон сил: небольшие силы (минимум около 0,01 г), но также и более сильные силы, такие как 0,1–0,15 г.
Это устройство будет иметь разные положения в трехмерном пространстве, поэтому для обнаружения небольших сил мне нужно знать его угол, чтобы иметь возможность вычесть 1 г. Потому что устройство может иметь произвольное положение (угловое положение).
Что я сделал до сих пор: я использовал MPU6050 и использовал дополнительный фильтр с ускорением. и гироскоп. Это что-то вроде:
agnleX_k+1 = 0.98*(angle_k + deltaT * gyro_k+1) + 0.02*angle_acc_k+1;
angle_acc
— угол, рассчитанный по ускорению. датчик. Что-то вроде:
arctan(accelX / sqrt(accelX^2 + accelY^2 + accelZ^2 + ))
Итак, меня интересует:
forceX_k+1 = accelX_k+1 - 1g*sin(agnleX_k+1)
Проблема в следующем:
Если я хочу обнаружить небольшую силу, поступающую очень быстро, скажем, accelX_k+1
, я бы хотел обнаружить Изменение от 0 г до 0,01 г или более, но в очень небольшом временном диапазоне. Проблема в том, что на мой рассчитанный угол также повлияет это небольшое и быстрое изменение ускорения. датчик, хотя угол на самом деле не изменился.
Я думаю, что мне придется делать расчет угла независимо от ускорения. датчик. Могу ли я сделать что-то вроде дополнительного фильтра с гироскопом и магнитометром? Будет ли это работать так же, как мой фильтр, описанный выше, но только с магнитом? вместо датчика? Или как бы вы это сделали? Я думал об использовании MPU9250.