Отмена вращения векторов с использованием кватернионов

У меня есть набор значений ускорения по направлениям x, y, z (рамка корпуса датчика). Датчик наклонялся и менял ориентацию много раз во время работы. Используя гироскоп, магнитометр и акселерометр, я смог объединить и извлечь углы крена, тангажа и рыскания в формате кватерниона (назовем его Q).

Теперь, чтобы изменить значения ускорения в глобальных положениях X, Y, Z. Можно ли просто 1. преобразовать значения ускорения в кватернион, установив скалярную часть в 0 (назовем ее Acc) 2. Умножить кватернион ускорения следующим образом: Qtranspose * Acc * Q??

Или мой вывод неверный? как мы деротируем значения?

Благодарность


person The Byzantine    schedule 19.07.2012    source источник
comment
Ваш подход выглядит правильным, но лучший способ убедиться в этом — протестировать его с помощью смоделированных значений и убедиться, что вы получите ожидаемый результат.   -  person Isaac    schedule 20.07.2012


Ответы (1)


Если у вас уже есть точная ориентация кватерниона q, то «неповернутый» вектор ускорений, как вы сказали:

Ag = q* A q

or

Ag = q A q*

в зависимости от того, какое соглашение вы используете для умножения кватернионов. (просто попробуйте оба и посмотрите, какой из них даст вам правильный вектор гравитации).

ЗАМЕТЬТЕ, что A и Ag являются «чистыми кватернионами» — это кватернион со скалярной составляющей, равной 0, и осевой составляющей, являющейся вашим вектором ускорения. Другими словами, если ваш кватернион q = [w x y z], то A = [0 ax ay az]. Затем вы можете отбросить скалярную составляющую Ag, чтобы получить вектор без поворота. Убедитесь, что порядок вектора ускорения соответствует вашему порядку вектора кватерниона.

person Gouda    schedule 23.01.2015