Я борюсь с проблемой кватернионов и способов их использования в моем приложении.Я потратил несколько дней на поиски решения для этого, но не могу найти ни одного подобного приложения или примера.
У меня есть достаточно ясные все свойства кватернионов и почему мы должны их использовать, но, возможно, я упускаю крошечные детали.
Моя проблема описана следующим образом:
- У меня есть жесткий объект с присоединенным 9-осевым ИДУ (откуда вычисляются кватернионы), и я хочу определить некоторые конкретные позы (настолько специфичныеориентации) относительно исходной ориентации.
В частности, первоначальную ориентацию (или, скажем, каждый раз, когда объект устойчив на поверхности) легко идентифицировать, поскольку IMU находится в состоянии покояи энергия ускорения и гироскопа в основном равна нулю (или очень мала).
Как объяснено в ссылке ниже, можно найти все относительные вращения от исходного, и использовать начальное вращение в качестве эталонного.
https://math.stackexchange.com/questions/2354978/relative-quaternion-rotation-delta-rotation-produces-unstable-results
Этот шаг довольно понятен и задокументирован во многих сообщениях на этом форуме.
Однако мне не ясно, как определить все позы, которые, например, превышают или совпадают с конкретной.
Например, моему приложению будет интересно посмотреть, как долго объект удерживается в ориентации, где угол наклона составляет от 0 до 45 градусов (объект направлен вверх) или от 0 до -45.Или просто сгенерировать флаг, который указывает объект, указывающий вверх или объект, указывающий вниз
Я не могу найти никакого способа решить эту проблему, кроме как перейти от кватернионов к углам Эйлера и оттуда попытаться вывести эту информацию, просто установив порог Эйлерауглы.
Однако, поскольку углы Эйлера страдают от определенных особенностей, получить точную оценку в принципе невозможно.