Снять гравитацию с акселерометра, используя вектор вращения кватерниона - PullRequest
0 голосов
/ 28 февраля 2019

Пожалуйста, потерпите меня, если это звучит повторяющийся вопрос.Но я просто хочу убедиться, что весь подход, который я использую, является правильным.В основном я построил следующее из того, что я прочитал из разных источников:

У меня есть IMU, из которого я получаю значения акселерометра и вектора вращения.В документации говорится следующее о векторе вращения.

Вектор вращения обеспечивает вывод ориентации, который выражается в виде кватерниона относительно магнитного севера и силы тяжести.Он производится путем объединения выходов акселерометра, гироскопа и магнитометра.Вектор вращения является наиболее точной доступной оценкой ориентации.

Кватернион вектора вращения показывает, насколько устройство повернуто относительно земной системы координат.Я хотел получить линейное ускорение в системе координат устройства из комбинации вектора вращения и акселерометра.И я предполагаю, что всякий раз, когда устройство находится в состоянии покоя, линейное ускорение должно быть 0.

Это математика, которую я придумал.

  • получить кватернион из вектора вращения q
  • получить инверсию кватерниона, чтобы гравитация была выражена в системе координат устройства.qPrime = inverse(q)
  • принять медиану нормы примерно определенного числа сигналов ускорения.norm
  • создать вектор гравитации как g = [0 0 norm]
  • получить линейное ускорение как a_linear = a_total - qPrime*g*conjugate(qPrime)

примерно вот важные строки в моем коде matlab / octave.

    %get the gravity norm at rest from 100 samples
    gNorm = median(sqrt(sum(Acc(1:100, 1:3).^2, 2)), 1);
    %a couple of lines and a loop later
    q_inv = qInv(q);
    a_p = qTimes(qTimes(q_inv, [0 g]), qConj(q_inv));
    LinAcc = [Acc(i, 1:3) - a_p(2:4)];

После использования приведенного выше кода у меня есть график, который выглядит следующим образом.

linear acceleration plot

Является ли какое-либо из моих предположений неверным?Неправильно ли я предположить, что я должен использовать инверсию кватерниона, чтобы повернуть к системе координат устройства?Должен ли я думать, что ошибки, такие как 0,05 м / с / с в y, исходят из других источников, таких как калибровка, а не из математики?

1 Ответ

0 голосов
/ 28 февраля 2019

Уравнение правильное.Шумы немного странные.Вы проверяли значение до снятия гравитационного умножения?Если исходные значения acc имеют те же шумы, что не из вашей математики.Или это может быть шум вашего вектора вращения.

...