Использование Quaternion для представления угла гироскопа в С#

Я использую гироскоп WiiM+ для расчета вращения.

Я интегрирую скорости поворота по осям рыскания, тангажа и крена и сохраняю их в векторе с именем angleSum.

Таким образом, для каждого показания angleSum(чтение) представляет повороты y, p и r от начальной ориентации.

Затем я использую кватернионы (с которыми я совершенно не знаком) для представления следующим образом:

q = Quaternion.createfromyawPitchRoll(angleSum.yaw, angleSum.pitch, angleSum.roll*(-1))

Но когда я поворачиваю свой wiimote на 90 градусов в каком-либо направлении и распечатываю q.x, q.y и q.z для поворота, поворот влияет на ВСЕ показания (все они показывают поворот на 90 градусов и обратно, хотя величина для двух из них меньше)

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

Спасибо!


person Imelza    schedule 07.12.2010    source источник


Ответы (1)


кватернион – это четырехмерная конструкция, в общих чертах определяемая как ось и компонент вращения. вокруг заданной оси (обычно обозначаемой как {x, y, z, w}). Взглянув на метод, на который вы ссылались, я предполагаю, вы указываете рыскание, тангаж и крен в радианах вместо градусов. Это уберет из таблицы наиболее распространенную ошибку реализации.

Предполагая, что ваша реализация правильная (и кажется), q.x, q.y и q.z все ожидаемо изменятся при любом вращении. Помните, вы определяете четырехмерный объект; кватернионы отличаются от углов Эйлера.

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

person MrGomez    schedule 07.12.2010
comment
Спасибо за разъяснения. Но если я преобразую его обратно в углы Эйлера, то какова цель создания кватерниона в первую очередь? Я не выполняю над ним никаких операций (мои углы изначально в градусах, которые я конвертирую в радианы и использую для создания кватерниона) - person Imelza; 07.12.2010
comment
Моя конечная цель - отобразить ориентацию гироскопа в мировых координатах (рыскание, тангаж и крен). Как мне использовать кватернион для достижения этого? - person Imelza; 07.12.2010