![]() |
|
|
![]()
|
|
| GreyBeholder |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 28.11.2011 Репутация: нет Всего: нет |
от изменения входного диапазона на -180 - 180 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
поглядите http://codepad.org/vSwYh8I4
может наведет на мысли Добавлено через 5 минут и 26 секунд кстати, прост любопытно: зачем вам углы эйлера? ось поворота+угол вроде удобнее |
|||
|
||||
| GreyBeholder |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 28.11.2011 Репутация: нет Всего: нет |
Всеравно потом искать 3 угла поврота вокруг XYZ. Это связано с особенностями расположния приводов в манипуляторе. Все работает если углы в диапазонах: x - -180...180 y - -90...90 z - -180...180 В том числе и это - http://codepad.org/vSwYh8I4 Как только хоть один выскакивает из диапазона, 2 остальных тоже переворачиваются. Думаю теперь что делать с диапазонами, а точнее с "У" т.к. он -90...90 (маловато). |
|||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
таков арксинус))) Добавлено через 32 секунды
так сделайте что б не "выскакивал" данный вам пример ведь работает Добавлено через 54 секунды причем входные углы 0..360, как вы и хотели |
||||
|
|||||
| GreyBeholder |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 28.11.2011 Репутация: нет Всего: нет |
Пример, так же как и мой код, работает в тех же диапазонах (ниче удивительного). сдвинуть диапазон - не проблема. Вся путаница была во влиянии одного угла на другой, ну и в диапазонах. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
||||
|
||||
| tn17 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 - вправо. Тут так? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
это в математике принято
atan2(0,x) даёт 0 atan2(x,0) даёт pi/2 или -pi/2 в зависимости от знака x. так что его результат корректен и предсказуем, даже когда значения q1*q2+q3*q4 малы. если же дело в погрешности вычислений, надо разбираться с кодом, где эти погрешности накапливаются, а не с углами. |
|||
|
||||
| tn17 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.10.2013 Репутация: нет Всего: нет |
1. к сожалению - нет. Полно источников, где ось Z направлена вверх или вниз. Еще в англоязычном источнике (в этой теме на стр.1) курс измеряется от оси Z против часовой стрелки...
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 - это Тангаж. Правильно? Тогда логично предположить, что угол Х - курс. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
логично
|
|||
|
||||
| Pavia |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
||||
|
||||
| tn17 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.10.2013 Репутация: нет Всего: нет |
я так понял, что по п.2 возражений нет? Добавлено через 8 минут и 59 секунд
Это написано в русских ;-) учебниках по динамике полета и по навигации... Про поворот связанной СК относительно нормальной земной (ось Х - на север, Z - на восток, Y - по нормали вверх). А в чем собственно отличие и как это сказывается на записи компонент кватерниона через эти углы "Эйлера" (курс, тангаж, крен) ? Как вариант: может есть книга про кватернионы в приложении к навигации по русским стандартам - см. выше? С кватернионами вообще много "непоняток", например, часто скаляный компонент Qw записывают через квад. корень. А то, что это верно с точностью до знака не пишут. |
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
навигация это повороты в локальной системе координат, углы эйлера - в глобальной. никаких тонкостей и проблем вычисления углов эйлера по кватерниону и наоборот нет. сложности возникают при ошибочном выборе инструмента.
подозреваю, что в данном вопросе "навигация по русским стандартам" сводится к определению понятий "тангаж", "крен", "рыскание" (их определение в локальной системе координат тривиально), а теория кватернионов - к формулам преобразования оси и угла поворота к кватерниону и обратно. какая задача решается и в чем затруднения? |
|||
|
||||
| tn17 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.10.2013 Репутация: нет Всего: нет |
1. с моей точки зрения - углы Эйлера это углы поворота локальной СК (связанной с ЛА) относительно глобальной (связанной с Землей), что вполне соответствует учебникам по навигации. При этом "глобальная" СК может быть мегаглобальной 2. О проблемах я уже писал: проблема в том, что существует множество вариантов записи начального кватерниона (qw, qx, qy, qz) ориентации (начального его значения) через углы Эйлера. Есть вариант с записью qw через квад. корень, с последующим делением на 4*qw (при вычислении qx, qy, qz). Есть варианты (разные ?!) с записью через sin и cos половинных углов - это, скорее всего, связано с использованием разных СК, у кого левая, у других правая и т.д. Сейчас сижу и привожу все эти варианты к "русской" (математической 3. Инструмент С++ (фактически С), переменные типа long double. Ситуации типа ~0 / ~0 перехватываю так, как описано выше. 4. Задача - вычислять текущую ориентацию ЛА при известных начальных углах (Курс, Тангаж, Крен) относительно стартовой прямоугольной правой СК и при известных текущих угловых скоростях (Wx, Wy, Wz) в связанной правой СК, путем их интегрирования. 5. Лучшее, что удалось пока получить - объект вращается правильно, но вокруг другой оси |
||||
|
|||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |