Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кватернион в углы Эйлера 
:(
    Опции темы
GreyBeholder
Дата 19.5.2012, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Ищу алгоритм перехода от кватерниона к углам Эйлера.
Первое что пришлось попробовать - http://en.wikipedia.org/wiki/Conversion_be...gles#Conversion
 и это пробовал (по сути тоже самое)  - http://www.euclideanspace.com/maths/geomet...Euler/index.htm
Формулы там такие:

atan2 (2*(q1*q2+q3*q4),1-2*(q2*q2+q3*q3))
asin (2*(q1*q3-q4*q2))
atan2 (2*(q1*q4+q2*q3),1-2*(q3*q3+q4*q4))

Это все работает хорошо в пределах углов 0-90 а дальше или знак.
Проблему можно решить, но как понять по кватерниону [q1,q2,q3,q4] в какой момент необходимо менять формулу расчета ??

Для примера прикрепил графики расчета 3х углов по этим формулам, углы кватерниона меняются линейно от 1 до 360, а после пересчета - см. вложения.

Помогите пжлст. алгоритмом/методом/статьей как по 4м значениям кватерниона определить изменение ситуации (ведь угол мы еще не знаем).
Спасибо.

http://s2.ipicture.ru/uploads/20120519/0Cy57Fm8.jpg
http://s2.ipicture.ru/uploads/20120519/WxLL5jSN.jpg
http://s2.ipicture.ru/uploads/20120519/MWaFUiNn.jpg

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  pics.zip 32,39 Kb
PM MAIL   Вверх
baldina
Дата 19.5.2012, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



что мешает полученные углы преобразовать в диапазон 0..360?

Это сообщение отредактировал(а) baldina - 19.5.2012, 23:54
PM MAIL   Вверх
GreyBeholder
Дата 20.5.2012, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(baldina @ 19.5.2012,  23:49)
что мешает полученные углы преобразовать в диапазон 0..360?

Они и так в этом диапазоне. Но угол в кватернионе изменяется линейно, т.е. если этим кватернионом поворачивать объект, то он, поворачивается плавно, равномерно, в одну сторону (на угол 360). После преобразования в углы эйлера, результат получается совершенно не тот (см. вложение). Углы курса и крена движутся от 0 до 180, а потом  от -180 до 0 (ось ординат) в то время как угол кватерниона изменяется от 0 до 360, ось абсцисс.

Менять условия пересчета проблем не составляет, т.е. в нужный момент считать (Х+360), только как этот момент вычислить по четырем значениям кватерниона ?
PM MAIL   Вверх
volatile
Дата 20.5.2012, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



GreyBeholder, вы придумали себе проблему, которой нет.

Если вам от этого будет легче, сделайте так:
if (result<0)
   result += 360;

Хотя смысла в этом нет абсолютно. Так как a == (a+360),  где а - угол.

В общем у вас все правильно. Не морочьте себе и окружающим голову. smile 

PM MAIL   Вверх
GreyBeholder
Дата 20.5.2012, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(volatile @ 20.5.2012,  10:41)
GreyBeholder, вы придумали себе проблему, которой нет.

Если вам от этого будет легче, сделайте так:
if (result<0)
   result += 360;

Хотя смысла в этом нет абсолютно. Так как a == (a+360),  где а - угол.

В общем у вас все правильно. Не морочьте себе и окружающим голову. smile

Что же здесь правильного ? Каждый угол является функцией 3х переменных (это углы на которые поворачивает объект данный кватернион) и в зависимости от них выдает абсолютно непредсказуемые результаты.
Если кватернион поворачивает объект по одной оси на полный оборот 0-360 (при этом остальные угля <90) я могу применить result += 360;
Но ситуация меняется если один из других углов становится больше 90. Результат становится совершенно другим (к примеру: угол крена начинает меняться от -180 до 180).
А если один из углов становится больше 270 то мы имеем 3ю ситуацию....  smile 

Вот я пытаюсь как-то прийти к решению -> "скормил" кватернион в функцию и на выходе имею правильные углы в полном диапазоне.
Если кто-нибудь делал подобное, буду очень благодарен за помощь. 
Спасибо.
PM MAIL   Вверх
volatile
Дата 20.5.2012, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(GreyBeholder @  20.5.2012,  21:05 Найти цитируемый пост)
 Результат становится совершенно другим (к примеру: угол крена начинает меняться от -180 до 180).

if (угол крена < 0)
   угол крена += 360;
smile 
?
PM MAIL   Вверх
GreyBeholder
Дата 20.5.2012, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(volatile @ 20.5.2012,  23:19)
Цитата(GreyBeholder @  20.5.2012,  21:05 Найти цитируемый пост)
 Результат становится совершенно другим (к примеру: угол крена начинает меняться от -180 до 180).

if (угол крена < 0)
   угол крена += 360;
smile 
?

-180+360=180
180 + 360 = 540
Диапазон = 180-540.

В одном случае имеем:
if (угол крена < 0)
   угол крена += 360;

В другом случае имеем:
if (угол крена < 0)
   угол крена += 180;

В 3м случае имеем.... (еще что-то имеем)

внимание вопрос. Как по четырем значения кватерниона определить случай ????

Напр кватернион углов      (10,15,20) -> [ 0.9746    0.0625    0.1431    0.1603]
Переводим обратно в углы [ 0.9746    0.0625    0.1431    0.1603] -> ( 9.9999   14.9999   19.9999) все правильно

Кватернион углов (10,170,250) -> [ 0.0213   -0.8173   -0.5630    0.1209]
Переводим обратно в углы  [ 0.0213   -0.8173   -0.5630    0.1209] -> [9.9999   10.0030   69.9965] 
случай 180 - угол крена. 180+угол тангажа. Как по этому " 0.0213   -0.8173   -0.5630    0.1209" идентифицировать именно этот случай

Кватернион углов (190,0,0) -> [  -0.0871    0.9962         0         0]
Переводим обратно в углы  [ -0.0871    0.9962         0         0] -> [ 9.9969         0         0] 
.
.
.
.
И т.д.
Примерно так работают эти формулы.


PM MAIL   Вверх
volatile
Дата 20.5.2012, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(GreyBeholder @  20.5.2012,  23:42 Найти цитируемый пост)
-180+360=180
180 + 360 = 540
Диапазон = 180-540.


Батенька, вы что?  smile 
вы там заметили if или как?

Диапазон = 0-360.




Это сообщение отредактировал(а) volatile - 20.5.2012, 23:56
PM MAIL   Вверх
GreyBeholder
Дата 21.5.2012, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(volatile @ 20.5.2012,  23:54)
Цитата(GreyBeholder @  20.5.2012,  23:42 Найти цитируемый пост)
-180+360=180
180 + 360 = 540
Диапазон = 180-540.


Батенька, вы что?  smile 
вы там заметили if или как?

Диапазон = 0-360.

Верно if не заметил  smile  извините.
Но от этого не легче.

Это - 
if (угол крена < 0)
   угол крена += 360;

Не работает. Просто меняет случаи/ситуации/диапазоны, местами.

PM MAIL   Вверх
volatile
Дата 21.5.2012, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



GreyBeholder, Вы на каком языке пишите?
Скинтье программу, я посмотрю.

PM MAIL   Вверх
GreyBeholder
Дата 21.5.2012, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(volatile @ 21.5.2012,  00:37)
GreyBeholder, Вы на каком языке пишите?
Скинтье программу, я посмотрю.

Пишу на "С"+VerilogHDL
проблему с кватернионом решил разобрать в matlab
В общем алгоритме кватернион получается путем интегрирования угловых скоростей (с этим нет проблем).
Проблемы появились при пересчете кватерниона в угол. Поэтому, в Матлабе я сделал 2е функции:
1я получает кватернион по 3м углам.
2я преобразует кватернион обратно в углы.
Потом все это в цикле, переменная цикла меняется от 0 до 360, она же идет в 1ю функцию и в график (ось абсцисс). На оси ординат наблюдаю результат неправильной работы.
Код во вложении.
При исследовании одного угла, меняйте два остальных (ставьте разные константы).


Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  Quaternions.zip 0,86 Kb
PM MAIL   Вверх
baldina
Дата 21.5.2012, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



теперь понятно...
Ваша проблема в том, что для совпадения вам нужен другой ("правильный") отсчет, не 0..360, а -180...180
почитайте в википедии раздел Angle signs and ranges

Добавлено через 1 минуту и 33 секунды
если хотите пользоваться 0..360, сначала преобразуйте его в -180...180, потом уже скармливайте вашим алгоритмам

Это сообщение отредактировал(а) baldina - 21.5.2012, 09:36
PM MAIL   Вверх
volatile
Дата 21.5.2012, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(baldina @  21.5.2012,  09:36 Найти цитируемый пост)
теперь понятно...

а я даже и скачивать не буду, поскольку полностью доверяю мнению baldina
Тем более что подоозревал это с самого начала.

Цитата(baldina @  21.5.2012,  09:36 Найти цитируемый пост)
преобразуйте его в -180...180,

 К сожалению, у меня сложилось впечатление, что ТС вообще не понимает что такое приведение углов к нужному диапазону.

PM MAIL   Вверх
GreyBeholder
Дата 22.5.2012, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(volatile @ 21.5.2012,  23:04)
Цитата(baldina @  21.5.2012,  09:36 Найти цитируемый пост)
теперь понятно...

а я даже и скачивать не буду, поскольку полностью доверяю мнению baldina
Тем более что подоозревал это с самого начала.

Цитата(baldina @  21.5.2012,  09:36 Найти цитируемый пост)
преобразуйте его в -180...180,

 К сожалению, у меня сложилось впечатление, что ТС вообще не понимает что такое приведение углов к нужному диапазону.

Можете конечно не скачивать, но результат  не изменился.

PM MAIL   Вверх
baldina
Дата 22.5.2012, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



а отчего он должен измениться?

PM MAIL   Вверх
GreyBeholder
Дата 22.5.2012, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(baldina @ 22.5.2012,  18:13)
а отчего он должен измениться?

от изменения входного диапазона на -180 - 180
PM MAIL   Вверх
baldina
Дата 22.5.2012, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



поглядите http://codepad.org/vSwYh8I4
может наведет на мысли smile

Добавлено через 5 минут и 26 секунд
кстати, прост любопытно: зачем вам углы эйлера? ось поворота+угол вроде удобнее
PM MAIL   Вверх
GreyBeholder
Дата 23.5.2012, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(baldina @ 22.5.2012,  23:17)
поглядите http://codepad.org/vSwYh8I4
может наведет на мысли smile

Добавлено @ 23:23
кстати, прост любопытно: зачем вам углы эйлера? ось поворота+угол вроде удобнее

Всеравно потом искать 3 угла поврота вокруг XYZ.
Это связано с особенностями расположния приводов в манипуляторе.

Все работает если углы в диапазонах:
x - -180...180
y - -90...90
z - -180...180
В том числе и это  - http://codepad.org/vSwYh8I4
Как только хоть один выскакивает из диапазона, 2 остальных тоже переворачиваются.
Думаю теперь что делать с диапазонами, а точнее с "У" т.к. он -90...90 (маловато).

PM MAIL   Вверх
baldina
Дата 23.5.2012, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(GreyBeholder @  23.5.2012,  18:04 Найти цитируемый пост)
Думаю теперь что делать с диапазонами, а точнее с "У" т.к. он -90...90 (маловато).

таков арксинус)))

Добавлено через 32 секунды
Цитата(GreyBeholder @  23.5.2012,  18:04 Найти цитируемый пост)
Как только хоть один выскакивает из диапазона, 2 остальных тоже переворачиваются

так сделайте что б не "выскакивал"
данный вам пример ведь работает

Добавлено через 54 секунды
причем входные углы 0..360, как вы и хотели
PM MAIL   Вверх
GreyBeholder
Дата 23.5.2012, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(baldina @ 23.5.2012,  18:29)
Цитата(GreyBeholder @  23.5.2012,  18:04 Найти цитируемый пост)
Думаю теперь что делать с диапазонами, а точнее с "У" т.к. он -90...90 (маловато).

таков арксинус)))

Добавлено @ 18:30
Цитата(GreyBeholder @  23.5.2012,  18:04 Найти цитируемый пост)
Как только хоть один выскакивает из диапазона, 2 остальных тоже переворачиваются

так сделайте что б не "выскакивал"
данный вам пример ведь работает

Добавлено @ 18:30
причем входные углы 0..360, как вы и хотели

Пример, так же как и мой код, работает в тех же диапазонах (ниче удивительного). сдвинуть диапазон - не проблема.
Вся путаница была во влиянии одного угла на другой, ну и в диапазонах.
PM MAIL   Вверх
baldina
Дата 23.5.2012, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(GreyBeholder @  23.5.2012,  20:31 Найти цитируемый пост)
Вся путаница была во влиянии одного угла на другой

они влияют, конечно. по определению. и есть такой забавный эффект - gimbal lock
PM MAIL   Вверх
tn17
Дата 2.10.2013, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.10.2013

Репутация: нет
Всего: нет



Всех приветствую!

Уважаемые, а что делать, если тангаж +- 90 градусов?

Формулы 
atan2 (2*(q1*q2+q3*q4),1-2*(q2*q2+q3*q3))
asin (2*(q1*q3-q4*q2))
atan2 (2*(q1*q4+q2*q3),1-2*(q3*q3+q4*q4))

тогда не работают - atan2 начинают делить случайные (из-за ошибок вычислений) малые числа и результат (крен и курс) непредсказуем? На индикацию что выводить? А ситуация вполне реальна: ракета стартует или самолет мертвую петлю делает...


И еще один вопрос: эти формулы для какой системы координат? У русских принято: ось Х - вперед (в нос), Y - вверх, Z - вправо. Тут так?
PM MAIL   Вверх
baldina
Дата 2.10.2013, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(tn17 @  2.10.2013,  11:00 Найти цитируемый пост)
У русских принято

это в математике принято  smile 

Цитата(tn17 @  2.10.2013,  11:00 Найти цитируемый пост)
atan2 начинают делить случайные (из-за ошибок вычислений) малые числа

atan2(0,x) даёт 0
atan2(x,0) даёт pi/2 или -pi/2 в зависимости от знака x.
так что его результат корректен и предсказуем, даже когда значения q1*q2+q3*q4 малы.

если же дело в погрешности вычислений, надо разбираться с кодом, где эти погрешности накапливаются, а не с углами.
PM MAIL   Вверх
tn17
  Дата 3.10.2013, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.10.2013

Репутация: нет
Всего: нет



1. к сожалению - нет. Полно источников, где ось Z направлена вверх или вниз. Еще в англоязычном источнике (в этой теме на стр.1) курс измеряется от оси Z против часовой стрелки...  smile  

2. при Тангаже=+-90 +-1 градус, не только q1*q2+q3*q4 ~ 0, но и 1-2*(q2*q2+q3*q3)~ 0, и 1-2*(q3*q3+q4*q4)~ 0, и q1*q4+q2*q3 ~ 0, т.ч. речь идет о ситуации ~0 / ~0,  где эти ~0 - порядка ошибки вычисления sin и cos.
Переход к long double особо ситуацию не спасает...
 Пока делаю так: если и числитель, и знаменатель по абс. величине больше 0.001, то считаю курс и крен 
через atan2. Иначе просто выдаю на индикацию последние вычисленные значения курса и крена.

3. По поводу http://codepad.org/vSwYh8I4. Не понял следующего: угол Эйлера Х - это курс или крен? По формулам из кода: угол Y  - это Тангаж. Правильно? Тогда логично предположить, что угол Х - курс.  
PM MAIL   Вверх
baldina
Дата 3.10.2013, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



логично smile
PM MAIL   Вверх
Pavia
Дата 3.10.2013, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Цитата(tn17 @  3.10.2013,  11:08 Найти цитируемый пост)
 угол Эйлера Х - это курс или крен?

Курс, крен и тангаж это углы поворот для летательного аппарата и с углами Эйлера они не имеют ничего общего. Удивительно, что многие их путают.

Это сообщение отредактировал(а) Pavia - 3.10.2013, 14:01
PM MAIL   Вверх
tn17
Дата 3.10.2013, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.10.2013

Репутация: нет
Всего: нет



Цитата(baldina @ 3.10.2013,  13:25)
логично smile

я так понял, что по п.2 возражений нет?

Добавлено через 8 минут и 59 секунд
Цитата(Pavia @ 3.10.2013,  13:45)
Цитата(tn17 @  3.10.2013,  11:08 Найти цитируемый пост)
 угол Эйлера Х - это курс или крен?

Курс, крен и тангаж это углы поворот для летательного аппарата и с углами Эйлера они не имеют ничего общего. Удивительно, что многие их путают.

Это написано в русских ;-) учебниках по динамике полета и по навигации... Про поворот связанной СК относительно нормальной земной (ось Х - на север, Z - на восток, Y  - по нормали вверх).

А в чем собственно отличие и как  это сказывается на записи компонент кватерниона через эти углы "Эйлера" (курс, тангаж, крен) ?

Как вариант: может есть книга про кватернионы в приложении к навигации по русским стандартам - см. выше?

С кватернионами вообще много "непоняток", например, часто скаляный компонент Qw записывают через квад. корень. А то, что это верно с точностью до знака не пишут.
PM MAIL   Вверх
baldina
Дата 4.10.2013, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(tn17 @  3.10.2013,  17:28 Найти цитируемый пост)
А в чем собственно отличие 

навигация это повороты в локальной системе координат, углы эйлера - в глобальной.

Цитата(tn17 @  3.10.2013,  17:28 Найти цитируемый пост)
как  это сказывается

никаких тонкостей и проблем вычисления углов эйлера по кватерниону и наоборот нет. 
сложности возникают при ошибочном выборе инструмента.

Цитата(tn17 @  3.10.2013,  17:28 Найти цитируемый пост)
может есть книга про кватернионы в приложении к навигации по русским стандартам

подозреваю, что в данном вопросе  "навигация по русским стандартам" сводится к определению понятий "тангаж", "крен", "рыскание" (их определение в локальной системе координат тривиально), а теория кватернионов - к формулам преобразования оси и угла поворота к кватерниону и обратно.
какая задача решается и в чем затруднения?
PM MAIL   Вверх
tn17
  Дата 4.10.2013, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.10.2013

Репутация: нет
Всего: нет



Цитата(baldina @ 4.10.2013,  00:48)
Цитата(tn17 @  3.10.2013,  17:28 Найти цитируемый пост)
А в чем собственно отличие 

навигация это повороты в локальной системе координат, углы эйлера - в глобальной.

Цитата(tn17 @  3.10.2013,  17:28 Найти цитируемый пост)
как  это сказывается

никаких тонкостей и проблем вычисления углов эйлера по кватерниону и наоборот нет. 
сложности возникают при ошибочном выборе инструмента.

Цитата(tn17 @  3.10.2013,  17:28 Найти цитируемый пост)
может есть книга про кватернионы в приложении к навигации по русским стандартам

подозреваю, что в данном вопросе  "навигация по русским стандартам" сводится к определению понятий "тангаж", "крен", "рыскание" (их определение в локальной системе координат тривиально), а теория кватернионов - к формулам преобразования оси и угла поворота к кватерниону и обратно.
какая задача решается и в чем затруднения?

1.  с моей точки зрения - углы Эйлера это углы поворота локальной СК (связанной с ЛА) относительно глобальной (связанной с Землей), что вполне соответствует учебникам по навигации. При этом "глобальная" СК может быть мегаглобальной  smile (Гаусса-Крюгера, например), а может  - просто глобальной (с нулем в точке старта).  Я хочу определять углы "Эйлера" относительно стартовой прямоугольной правой СК.

2. О проблемах я уже писал: проблема в том, что существует множество вариантов записи начального кватерниона (qw, qx, qy, qz) ориентации (начального его значения) через углы Эйлера. Есть вариант с записью qw через квад. корень, с последующим делением на 4*qw (при вычислении qx, qy, qz). Есть варианты (разные ?!) с записью через sin и cos половинных углов - это, скорее всего, связано с использованием разных СК, у кого левая, у других правая и т.д. 
Сейчас сижу и привожу все эти варианты к "русской" (математической  smile см. выше) СК. И все равно, начальный кватернион получается разным  smile  в зависимости от выбранного варианта! Например, у некоторых qw = cos Курс/2 * cos Тангаж/2 *  cos Крен/2 + sin Курс/2 * sin Тангаж/2 *  sin Крен/2, а у других qw = cos Курс/2 * cos Тангаж/2 *  cos Крен/2 - sin Курс/2 * sin Тангаж/2 *  sin Крен/2. При этом в обоих случаях это правая СК  smile 

3. Инструмент С++ (фактически С),  переменные типа long double. Ситуации типа ~0 / ~0 перехватываю так, как описано выше.

4. Задача - вычислять текущую ориентацию ЛА при известных начальных углах (Курс, Тангаж, Крен) относительно стартовой прямоугольной правой СК и при известных текущих угловых скоростях (Wx, Wy, Wz) в связанной правой СК, путем их интегрирования. 

5. Лучшее, что удалось пока получить - объект вращается правильно, но вокруг другой оси  smile , т.е. Wx!=0, Wy=0, Wz=0, а крутимся  вокруг оси Z.  В общем smile интегрирования вращения ЛА при "русских" (математических  smile ) соглашениях об осях, углах, направлениях ...
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0803 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.