реклама на сайте
подробности

 
 
> Вопрос по математике кватернионов
Mityan
сообщение Jun 15 2012, 08:21
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 5-07-11
Пользователь №: 66 068



Речь идет об определении положения объекта по его угловым скоростям.

В литературе написано: получаем начальный кватернион q0 q1 q2 q3, потом есть формулы, которые вычисляют производную кватерниона на основе угловых скоростей. Интегрируя эту производную, получаем кватернион, который можно также по соответствующим формулам пересчитать в углы эйлера.

Сделал так (в МАТЛАБе):
% Задал начальное положение - курс, тангаж, крен.
yaw = deg2rad(54);
pitch = deg2rad(-20);
roll = 0;
% вычислил кватернион (начальный)
dcm = angle2dcm(yaw, pitch, roll);
quat = dcm2quat(dcm);
q0 = quat(1);
q1 = quat(2);
q2 = quat(3);
q3 = quat(4);
% Здесь можно было сразу angle2quat - не суть важно.
% Затем задал, как у меня будет вращаться тело -
% по одной из осей со скоростью 1 градус в секунду 36 секунд.
p = [zeros(30,1); deg2rad(1)*ones(36,1); zeros(34,1)]; % крен
q = zeros(100,1);
r = zeros(100,1);
U = zeros(100,3); % Углы
% Затем в цикле вычисляю углы Эйлера - фи, тэта, пси
% После этого производную кватерниона на основе q0 q1 q2 q3 p q r
% Обновляю значение q = q + dq - и на следующий круг.
for i = 1:1:len
theta = asind(-2*(q1*q3 - q0*q2));
s = sign(2*(q2*q3 + q0*q1));
u = q0^2 - q1^2 - q2^2 + q3^2;
l = sqrt(1 - 4*(q1*q3 - q0*q2)^2);
phi = acosd(u/l)*s;
s = sign(2*(q1*q2 + q0*q3));
u = q0^2 + q1^2 - q2^2 - q3^2;
psi = acosd(u/l)*s;
U(i,1) = theta;
U(i,2) = phi;
U(i,3) = psi;
dq0 = -(q1*p(i) + q2*q(i) + q3*r(i))/2;
dq1 = (q0*p(i) + q2*r(i) - q3*q(i))/2;
dq2 = (q0*q(i) + q3*p(i) - q1*r(i))/2;
dq3 = (q0*r(i) + q1*q(i) - q2*p(i))/2;
q0 = q0 + dq0;
q1 = q1 + dq1;
q2 = q2 + dq2;
q3 = q3 + dq3;
end

Математика взята из книги Performance, Stability, Dynamics and Control of Airplanes автора Pamadi
Получаю вот что (задавая разные скорости вращения):
1) Когда угол поворота переваливает за 180 градусов, он дальше становится комплексным и растет в отрицательную сторону,
например, 185 градусов видно как 180 - 5i
2) Углы другие тоже изменяются. Например, если у меня крен 4град*36с = 148град, то курс вместо 54 стал 51.8, а тангаж вместо -20 стал -20.9
3) Когда подставил вектор отсчетов реальных с датчика угловых скоростей (за вычетом zero-rate level), получил сообщение от МАТЛАба, что аргумент арккосинуса должен быть действительным. Это величина l = sqrt(1 - 4*(q1*q3 - q0*q2)^2); становится меньше 0.

Вопросы:
1) правильна ли сама логика, или я в чем-то запутался и что-то не учел?
2) почему изменяются остальные углы
4) почему получается комплексный угол
3) в книге (стр.347) ничего не говорится о каких-то пределах кватернионов, эта формула приведена ничтоже сумняшеся,
и непонятно, у тех, кто тоже занимается кватернионами, q1*q3 - q0*q2 никогда-никогда не бывает > 0.5?
(это чтобы корень стал мнимым).

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
brag
сообщение Jun 29 2012, 18:36
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Если есть угловые скорости, то зачем вам кватернионы? Они предназначены для хранения однозначного положения обьекта, где углы Эйлера вызывают кучу гемора, а хранение ориентации в виде матрицы вращения(3х векторов up,dir,side) жрет слишком много памяти(9 слов против 4):

Вот почитайте введение, дальше можно не читать,если алгебра понятна. http://www.gamedev.ru/articles/?id=30129
Что касается производительности, то не сильно тяжелее матриц. http://en.wikipedia.org/wiki/Quaternions_a...patial_rotation ,см "Performance comparisons with other rotation methods".

Теперь про определение положения по угловым скоростям. Есть 2 понятия угловых скоростей: абсолютная(вращение обьекта вокруг какой-то постоянной оси) и релятивная(называется Euler rates). В случаи с гироскопами именно с ними(Euler rates) приходится работать ибо система из гироскопов дает вектор угловой скорости вокруг оси, зависимой от этого вектора sm.gif) Кроме, как интегрировать их другого способа вроде нету http://answers.unity3d.com/questions/22173...-transform.html
А через что будете вращать обьект, хоть матрицы, хоть кватернионы - разница только в производительности и нумерической стабильности.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Mityan   Вопрос по математике кватернионов   Jun 15 2012, 08:21
- - AndreyVN   Цитата(Mityan @ Jun 15 2012, 12:21) Речь ...   Jun 15 2012, 08:36
- - Mityan   Ну, вообще типа пишут, что при поворотах с использ...   Jun 15 2012, 09:09
- - Aner   Да это так, только учитывайте, что алгебра кватерн...   Jun 15 2012, 09:56
- - Mityan   Данные с датчиков снимаются 50 раз в секунду. Пола...   Jun 15 2012, 10:18
|- - Aner   Цитата(Mityan @ Jun 15 2012, 13:18) Данны...   Jun 15 2012, 12:12
- - Mityan   Вот что я скажу: В другой книжке - Applied Mathem...   Jun 15 2012, 12:03
- - Mityan   Посмотрим. В том коде, который приведен, не вижу о...   Jun 15 2012, 12:44
- - Aner   По вашему я заблуждаюсь, тогда вперед на грабли, в...   Jun 15 2012, 13:17
|- - AndreyVN   Честно скажу, с кватернионами не работал, но довод...   Jun 18 2012, 04:14
- - Mityan   Обнаружил, что даже нормирование кватерниона не да...   Jun 18 2012, 10:29
- - Mityan   В книге Обработка информации в навигационных компл...   Jun 18 2012, 14:19
- - jks   можно посмотреть как сделано здесь: http://autopi...   Jun 19 2012, 08:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016