|
Вопрос по математике кватернионов |
|
|
|
Jun 15 2012, 08:21
|
Частый гость
 
Группа: Участник
Сообщений: 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? (это чтобы корень стал мнимым).
Спасибо.
|
|
|
|
|
 |
Сообщений в этой теме
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 Вот что я скажу:
В другой книжке - 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 brag Если есть угловые скорости, то зачем вам кватернио... Jun 29 2012, 18:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|