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

21 Авг 2019 в 06:10
194 +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 Апр 2024 в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир