12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
1

Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат

10.05.2018, 12:30. Показов 4760. Ответов 54
Метки нет (Все метки)

Добрый день! Столкнулся с проблемой понимания применения алгебры кватернионов для решения одной небольшой задачи.
Пишу приложение на С++. Есть несколько связных объектов, каждый из которых имеет собственную систему координат. Координаты каждой из систем рассчитываются относительно глобального нуля.
Одна из систем координат изначально "повернута" по оси Y относительно родительского объекта (и, соответственно, его системы коодинат) на константный угол. Необходимо пересчитать координаты точки, лежащей в этой "Повернутой" системе координат при вращении системы относительно оси X.

При расчете координат точек внутри систем, перпендикулярных друг другу проблем не возникает:
1. формируется нужный кватернион поворота;
2. происходит локальный поворот точек внутри текущей СКО при помощи сформированного кватерниона;
3. происходит смещение этой СКО в систему ее "Родителя", применяется кватернион родителя и обратный перенос СКО на свое место в пространсве.

При расчете же новых координат точек внутри "повернутой" системы координат результат не совпадает с результатами САПР, в котором выстроенна модель из моих связных объектов. Судя по координатам, выдаваемым САПР происходит поворот не только по нужной мне оси, но и еще по какой-то из оставшихся.

Возможно я неправильно понимаю как нужно использовать алгебру кватернионов именно в моем случае?
Заранее благодарен за Ваши подсказки и советы.

К посту для наглядности прикладываю иллюстрацию связе объектов.
Миниатюры
Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2018, 12:30
Ответы с готовыми решениями:

Преобразование координат точки при повороте системы координат
Здравствуйте! Не могу понять, из чего получается формула преобразования координат точки при...

Относительно прямоугольной системы координат даны точки
Относительно прямоугольной системы координат даны точки A(\sqrt{8}; -\frac{1}{\sqrt{2}}) и M(x, y)....

Найти координаты точки векторами базиса и началом системы координат
Не знаю как найти координаты точки Д. Вроде как вектора вывел но коряво. Дайти толчок плиз. С чего...

Квартернионы. Расчет координат вектора при смещении одного узла относительно другого
Добрый день! Помогите, пожалуйста, решить задачу. Есть три связанных между собой узла. Один узел...

54
183 / 266 / 47
Регистрация: 09.06.2015
Сообщений: 936
10.05.2018, 18:26 2
Например, всю жизнь пользуюсь простыми и понятными углами Эйлера. И ни разу со школы не возникало проблем. Вернее, возникали спотыкания, но только из-за больших перерывов в применении.
А все эти новые словечки от лукавого, потому что суть остаётся той же самой, что и была при дедушке Эйлере.
Можно заподозрить, речь о манипуляторе, да?
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
10.05.2018, 18:44  [ТС] 3
О нем самом)
Только он крепится к телу, у которого посадочная площадка под углом и находится. Я пользовался всем. Кватернионы в реализации для других узлов оказались проще и понятнее.
Здесь же что матрицы поворота/перемешения, что кватернионы не дают верного результата. Что то делаю не так, а что понять вообще не могу. Устраняю поворот этот злосчастный - все работает путем и совпадают результаты.
0
183 / 266 / 47
Регистрация: 09.06.2015
Сообщений: 936
10.05.2018, 18:56 4
Ну, наклонилось тело, повернулось, сместилось … к телу привязана система координат – то же самое произошло с ней. Координаты второй точки первого звена, если они первые по очереди, вычисляются автоматически. И далее все остальные.
Это же прямая задача?
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
10.05.2018, 19:01  [ТС] 5
one man, да, прямая.С обратной проще....получил координаты, углы рассчитал
Только начальные координаты точки уже сразу под этим углом крепления у меня. Других не дано.
В мурзилках таких случаев не встретил - сплошные Пумы, да стендфорский манипулятор. Решение простым должно быть и на поверхности где то(

Хочу попробовать завтра (сейчас нет лоступа к коду) вот такое решение https://www.cyberforum.ru/post10744507.html только пока не определился какие координаты в качестве А и В использовать для крайнего узла.
0
183 / 266 / 47
Регистрация: 09.06.2015
Сообщений: 936
10.05.2018, 19:14 6
Не знаю, если начальные углы фиксированы и известны, то что ещё нужно?
Тут как-то советовал одному парню завести процедуру для конкретного устройства, чтобы эта процедура по известным изменениям управляющих параметров выдавала координаты любых точек. Могу повторить совет. Ещё могу попробовать ближе к конкретике, но только без специальных технических терминов. Просто рассматриваем отрезки, точки в пространстве…
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
10.05.2018, 19:19  [ТС] 7
one man, я сейчас тоже самое делаю) цель - постоянно пересчитывать координаты. Но для этого надо программу научить...ей же что скажешь, то и сделает)

Поэтому буду только ЗА, если без конкретики, но наведете на верное решение задачи....у меня реальная проблема в понимании реализации при таких условиях...
0
183 / 266 / 47
Регистрация: 09.06.2015
Сообщений: 936
10.05.2018, 19:25 8
Первая точка отвечает шаровому креплению? Она смещена? С ней всё ясно?
Вторая точка на конце звена? Начинаем с неё?
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
10.05.2018, 19:30  [ТС] 9
Вроде да...
0
183 / 266 / 47
Регистрация: 09.06.2015
Сообщений: 936
10.05.2018, 20:01 10
Вторая точка имеет известные координаты в новой системе или где-либо вообще к этому моменту? Тогда, зная углы изменения местной системы, мы пересчитываем её координаты из местных в глобальные. Формулы известны безо всяких кватернионов.

Добавлено через 16 минут
Или, скорее всего, предполагаемые глобальные (без наклона всей системы), в реальные глобальные после наклона. Как угодно можно.
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
11.05.2018, 07:12  [ТС] 11
Точка имеет известные координаты до поворота системы, в которой она располагается. Система, к которой она привязана уже осуществила свои перемещения. Т.е. нужно повернуть систему, в которой находится точка и получить новые координаты точки в глобальной системе координат.
А формулы - это перенос систем координат и матрицы вращения? Или я уже поплыл в мат. части?
0
183 / 266 / 47
Регистрация: 09.06.2015
Сообщений: 936
11.05.2018, 11:02 12
Конечно, всё так. Тут только можно напутать с правильным переписыванием-записыванием формул, как мне кажется, но это чисто технический вопрос. Я бы порекомендовал немного потренироваться на простых примерах с точками и с формулами, и чтобы под руной всегда был графический интерфейс для быстрого контроля. Короче, какой-нибудь матпакет, вернее, лучше мощный матпакет. Языки более низкого уровня не для этих задач – только тратить силы и время.
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.05.2018, 15:48 13
Цитата Сообщение от DimKaKiber Посмотреть сообщение
как нужно использовать алгебру кватернионов
Предлагаю на нее забить т.к. она мутновата для смертных =). Она вроде используется для ускорения математики где очень важна скорость расчета железом.

Есть простая и понятная “Матрица поворота вокруг произвольной оси”
https://ru.wikipedia.org/wiki/Матрица_поворота
Направление поворота там вроде всегда против часовой. Находите матрицу. Множите вектор на матрицу и получаете повернутый вектор. Можно крутить что угодно и как угодно.
Цитата Сообщение от one man Посмотреть сообщение
И ни разу со школы не возникало проблем
Может просто сложность проблем школьная?
http://www.wikiznanie.ru/wikip... рный_замок

Цитата Сообщение от one man Посмотреть сообщение
все эти новые словечки от лукавого,
Предложены Уильямом Гамильтоном в 1843 году.
https://ru.wikipedia.org/wiki/Кватернион

Цитата Сообщение от DimKaKiber Посмотреть сообщение
для наглядности прикладываю иллюстрацию связе объектов.
Обычно рисуют кинематическую схему с шарнирами. Экспертам хватает и просто фото манипулятора.
Цитата Сообщение от one man Посмотреть сообщение
Короче, какой-нибудь матпакет, вернее, лучше мощный матпакет.
Тут хватит и GeoGebra, можно слайдерами крутить отрезки и т.п. Если нужны свистоперделки (красивый свет, сложное затенение 3д модели, загрузить 3д модель манипулятора) то тогда wolfram Mathematica.

Цитата Сообщение от DimKaKiber Посмотреть сообщение
Система, к которой она привязана уже осуществила свои перемещения.
Последовательно повернуть отрезок N раз. Сложность 5 класс =).
0
183 / 266 / 47
Регистрация: 09.06.2015
Сообщений: 936
11.05.2018, 19:36 14
DimKaKiber, yе знаю, надеюсь, поможет. Это основной текст программы (Maple), отвечающий за вращение и смещение
Matlab M
1
2
3
4
5
6
7
FACE1 := seq(plottools[polygon]([seq([
 
m[1, 0]*L[1][i]+m[1, 1]*L[2][i]+m[1, 2]*L[3][i]+g1, 
m[2, 0]*L[1][i]+m[2, 1]*L[2][i]+m[2, 2]*L[3][i]+g2,
m[0, 0]*L[1][i]+m[0, 1]*L[2][i]+m[0, 2]*L[3][i]+g3
 
], i = 1 .. mm)], color = red, transparency = .5, style = patchnogrid), k = 1 .. N);
m[к, n] – элемент обычной матрицы поворота, например, из Википедии,
L[m][i] – одна из координат i-й точки ломаной, изображающей сердечко,
gm – смещение по соответствующей координате.
Элементы матрицы вращения и смещения меняют свои значения N раз по кругу.
Здесь все точки одновременно получают одно и то же вращение и смещение. Поэтому мы видим движение всего рисунка. Раз он отображается на экране, значит, решена прямая задача – мы по углам поворота и смещению получаем координаты всех точек.
Думаю, прямая задача манипулятора не сложнее задачи получения этого рисунка.
https://www.cyberforum.ru/atta... 1526056446
Миниатюры
Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат  
0
183 / 266 / 47
Регистрация: 09.06.2015
Сообщений: 936
11.05.2018, 20:01 15
Не совсем удачно выбрал букву для m[к, n], пусть будет m[j, n], где j,n от 0 до 2.
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.05.2018, 20:07 16
Вот это троллинг .
То чувство когда думаешь что будет в мат пакете что-то такое
Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат

А тебе показывает сердечко
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
12.05.2018, 06:44  [ТС] 17
Да хоть палки, скрепленные чем то не совсем приличным))))) Так что сердечко это еще норм)))

Я тут понял, что как то неправильно владею матрицами поворота - сижу теперь от простого все начинаю) Как в школе, действительно)))
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.05.2018, 07:47 18
Почему не взяли готовые функций которые крутят вектора?

Берите матрицу поворота вокруг произвольной оси, она интуитивно понятна, 90% матрицы одно и тоже. Ось она же по аналогии с валом...очень толково.
0
183 / 266 / 47
Регистрация: 09.06.2015
Сообщений: 936
12.05.2018, 09:07 19
DimKaKiber, специально в коде соединил строки 3,4,5. Они по очереди соответствуют новым координатам x,y,z текущей точки i с координатами L[1][i], L[2][i], L[3][i]. Просто под рукой другого текста не было, а суть та же самая, только в звене расстояние постоянное, а здесь расстояния g переменные (под рисунок). А при постоянной длине каждая g равна соответствующей проекции этой длины звена.
http://vmk.ugatu.ac.ru/labkg51.htm
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
12.05.2018, 17:48  [ТС] 20
Excalibur921, К сожалению опыт работы с уже готовыми функциями и библиотеками у меня печальный - сколько раз не брался - получается совсем нето, что задумываешь. Поэтому всегда стараюсь понять как оно работает и что должно делать для решения именно моей задачи. + В последнее время ставятся такие задачи, для которых важна именно производительность на самом слабом железе (контроллер, смартфон, ПК). Поэтому всегда нужно знать как исправить внутренность функций для оптимизации и ускорения алгоритмов, которые мне же самому и приходится придумывать, обсчитывать и тестировать. Конкретно здесь - стоит задача обсчета прямой кинематики механизма, решение которой должно осуществляться в срок не более 0.5-1 миллисекунды в потоковом режиме для механизма имеющего в своем составе 59 взаимоувязанных узлов + их ориентация в пространстве (крен, тангаж, рысканье).
Недавно сделал такую схему + обратную для механизма с чуть меньшим количеством узлов с применением как раз алгебры кватернионов, что устроило по результатам (погрешность на уровне накопления ошибки для вычислений чисел типа float в микрометрах) и по быстродействию (от 0 до 1 миллисекунды, если замерять в целых числах по тикам процессора).
И поэтому вызвало недоумение невозможность получения новых координат теми же способами для манипуляторов нового механизма.
one man, Спасибо большое! Буду разбираться. День просто суматошный выдался - часто в разъездах приходится бывать.

Задачка то, действительно, школьного уровня, но зараза, пока понимание не прийдет - до конца не решится.

Добавлено через 1 час 56 минут
Неправильно домножал координаты на матрицу поворота как оказалось.....Надо было матрицу на вктор-столбец, а я наоборот фигачил.......Это к вопросы про обычные матрицы и единичный поворот вектора

А матрицу поворота вокруг произвольной оси таким же макаром задавать? Или ее надо сначала на направляющий вектор домножить, а потом на вектор, координаты которого пересчитываю? Как в ней ось поворота задается?

Ага, разобрался....Те же яйца, только в профиль. Просто матрицу надо составлять с использованием значений единичного вектора, который направление определяет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2018, 17:48
Помогаю со студенческими работами здесь

Расчет координат точки при смещении узла
Добрый день! Хотелось бы посоветоваться о решении новой для меня задачи. У меня имеется...

Определите координаты точки, полученной поворотом вокруг точки в системе координат
В системе координат XOY задана точка A (25, 45). Определите координаты точки B, полученной...

Ввести координаты точки М и найти ее расстояние от начала координат (радиус - вектор от точки О (0,0)).
Ввести координаты точки М и найти ее расстояние от начала координат (радиус - вектор от точки О...

Даны координаты концов N - мерного отрезка (точки a и b). Найти его длину и наибольшую из координат точки а
Пропустил пары и теперь не знаю, как составить программу:boredom:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru