Как получить угол из кватерниона? Всем привет.
Имеется датчик акселерометр с гироскопом (MPU-6050). Посредством библиотеки могу получить кватернион. Но мне нужен угол наклона по одной из осей, который бы не зависил от других углов. Можно ли его вообще найти?
Вычисления делал так: кватернион -> матрица поворота -> углы Эйлера и yaw pitch roll
Для наглядности сделал демо: yadro.github.io/projects/quaternion
в консоли выводятся вычисления
1) расчеты движка threejs
2) углы эйлера
3) yaw pitch roll

21 Авг 2019 в 06:10
165 +1
0
Ответы
1

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

Преобразуйте кватернион в углы Эйлера или матрицу поворота.Используйте полученные углы Эйлера или матрицу поворота, чтобы вычислить угол наклона по конкретной оси (например, оси X, Y или Z).

Пример кода на JavaScript для вычисления угла наклона по оси X из кватерниона:

// Преобразование кватерниона в углы Эйлера
function quaternionToEuler(q) {
const sinr_cosp = 2 * (q.w * q.x + q.y * q.z);
const cosr_cosp = 1 - 2 * (q.x * q.x + q.y * q.y);
const roll = Math.atan2(sinr_cosp, cosr_cosp);
const sinp = 2 * (q.w * q.y - q.z * q.x);
let pitch;
if (Math.abs(sinp) >= 1) {
pitch = Math.sign(sinp) * Math.PI / 2;
} else {
pitch = Math.asin(sinp);
}
const siny_cosp = 2 * (q.w * q.z + q.x * q.y);
const cosy_cosp = 1 - 2 * (q.y * q.y + q.z * q.z);
const yaw = Math.atan2(siny_cosp, cosy_cosp);
return { roll, pitch, yaw };
}
// Получение угла наклона по оси X из углов Эйлера
function getTiltAngleX(q) {
const { roll, pitch, yaw } = quaternionToEuler(q);
return pitch;
}
// Пример использования
const quaternion = { w: 0.5, x: 0.5, y: 0.5, z: 0.5 };
const tiltAngleX = getTiltAngleX(quaternion);
console.log('Угол наклона по оси X:', tiltAngleX);

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

20 Апр в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 89 647 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир