12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
1 | |
Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат10.05.2018, 12:30. Показов 5800. Ответов 54
Метки нет (Все метки)
Добрый день! Столкнулся с проблемой понимания применения алгебры кватернионов для решения одной небольшой задачи.
Пишу приложение на С++. Есть несколько связных объектов, каждый из которых имеет собственную систему координат. Координаты каждой из систем рассчитываются относительно глобального нуля. Одна из систем координат изначально "повернута" по оси Y относительно родительского объекта (и, соответственно, его системы коодинат) на константный угол. Необходимо пересчитать координаты точки, лежащей в этой "Повернутой" системе координат при вращении системы относительно оси X. При расчете координат точек внутри систем, перпендикулярных друг другу проблем не возникает: 1. формируется нужный кватернион поворота; 2. происходит локальный поворот точек внутри текущей СКО при помощи сформированного кватерниона; 3. происходит смещение этой СКО в систему ее "Родителя", применяется кватернион родителя и обратный перенос СКО на свое место в пространсве. При расчете же новых координат точек внутри "повернутой" системы координат результат не совпадает с результатами САПР, в котором выстроенна модель из моих связных объектов. Судя по координатам, выдаваемым САПР происходит поворот не только по нужной мне оси, но и еще по какой-то из оставшихся. Возможно я неправильно понимаю как нужно использовать алгебру кватернионов именно в моем случае? Заранее благодарен за Ваши подсказки и советы. К посту для наглядности прикладываю иллюстрацию связе объектов.
0
|
10.05.2018, 12:30 | |
Ответы с готовыми решениями:
54
Преобразование координат точки при повороте системы координат Относительно прямоугольной системы координат даны точки Найти координаты точки векторами базиса и началом системы координат Квартернионы. Расчет координат вектора при смещении одного узла относительно другого |
289 / 337 / 62
Регистрация: 09.06.2015
Сообщений: 1,306
|
|
10.05.2018, 18:26 | 2 |
Например, всю жизнь пользуюсь простыми и понятными углами Эйлера. И ни разу со школы не возникало проблем. Вернее, возникали спотыкания, но только из-за больших перерывов в применении.
А все эти новые словечки от лукавого, потому что суть остаётся той же самой, что и была при дедушке Эйлере. Можно заподозрить, речь о манипуляторе, да?
0
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
10.05.2018, 18:44 [ТС] | 3 |
О нем самом)
Только он крепится к телу, у которого посадочная площадка под углом и находится. Я пользовался всем. Кватернионы в реализации для других узлов оказались проще и понятнее. Здесь же что матрицы поворота/перемешения, что кватернионы не дают верного результата. Что то делаю не так, а что понять вообще не могу. Устраняю поворот этот злосчастный - все работает путем и совпадают результаты.
0
|
289 / 337 / 62
Регистрация: 09.06.2015
Сообщений: 1,306
|
|
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
|
289 / 337 / 62
Регистрация: 09.06.2015
Сообщений: 1,306
|
|
10.05.2018, 19:14 | 6 |
Не знаю, если начальные углы фиксированы и известны, то что ещё нужно?
Тут как-то советовал одному парню завести процедуру для конкретного устройства, чтобы эта процедура по известным изменениям управляющих параметров выдавала координаты любых точек. Могу повторить совет. Ещё могу попробовать ближе к конкретике, но только без специальных технических терминов. Просто рассматриваем отрезки, точки в пространстве…
0
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
10.05.2018, 19:19 [ТС] | 7 |
one man, я сейчас тоже самое делаю) цель - постоянно пересчитывать координаты. Но для этого надо программу научить...ей же что скажешь, то и сделает)
Поэтому буду только ЗА, если без конкретики, но наведете на верное решение задачи....у меня реальная проблема в понимании реализации при таких условиях...
0
|
289 / 337 / 62
Регистрация: 09.06.2015
Сообщений: 1,306
|
|
10.05.2018, 19:25 | 8 |
Первая точка отвечает шаровому креплению? Она смещена? С ней всё ясно?
Вторая точка на конце звена? Начинаем с неё?
0
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
10.05.2018, 19:30 [ТС] | 9 |
Вроде да...
0
|
289 / 337 / 62
Регистрация: 09.06.2015
Сообщений: 1,306
|
|
10.05.2018, 20:01 | 10 |
Вторая точка имеет известные координаты в новой системе или где-либо вообще к этому моменту? Тогда, зная углы изменения местной системы, мы пересчитываем её координаты из местных в глобальные. Формулы известны безо всяких кватернионов.
Добавлено через 16 минут Или, скорее всего, предполагаемые глобальные (без наклона всей системы), в реальные глобальные после наклона. Как угодно можно.
0
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
11.05.2018, 07:12 [ТС] | 11 |
Точка имеет известные координаты до поворота системы, в которой она располагается. Система, к которой она привязана уже осуществила свои перемещения. Т.е. нужно повернуть систему, в которой находится точка и получить новые координаты точки в глобальной системе координат.
А формулы - это перенос систем координат и матрицы вращения? Или я уже поплыл в мат. части?
0
|
289 / 337 / 62
Регистрация: 09.06.2015
Сообщений: 1,306
|
|
11.05.2018, 11:02 | 12 |
Конечно, всё так. Тут только можно напутать с правильным переписыванием-записыванием формул, как мне кажется, но это чисто технический вопрос. Я бы порекомендовал немного потренироваться на простых примерах с точками и с формулами, и чтобы под руной всегда был графический интерфейс для быстрого контроля. Короче, какой-нибудь матпакет, вернее, лучше мощный матпакет. Языки более низкого уровня не для этих задач – только тратить силы и время.
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
11.05.2018, 15:48 | 13 |
Предлагаю на нее забить т.к. она мутновата для смертных =). Она вроде используется для ускорения математики где очень важна скорость расчета железом.
Есть простая и понятная “Матрица поворота вокруг произвольной оси” https://ru.wikipedia.org/wiki/Матрица_поворота Направление поворота там вроде всегда против часовой. Находите матрицу. Множите вектор на матрицу и получаете повернутый вектор. Можно крутить что угодно и как угодно. Может просто сложность проблем школьная? http://www.wikiznanie.ru/wikip... рный_замок Предложены Уильямом Гамильтоном в 1843 году. https://ru.wikipedia.org/wiki/Кватернион Обычно рисуют кинематическую схему с шарнирами. Экспертам хватает и просто фото манипулятора. Тут хватит и GeoGebra, можно слайдерами крутить отрезки и т.п. Если нужны свистоперделки (красивый свет, сложное затенение 3д модели, загрузить 3д модель манипулятора) то тогда wolfram Mathematica. Последовательно повернуть отрезок N раз. Сложность 5 класс =).
0
|
289 / 337 / 62
Регистрация: 09.06.2015
Сообщений: 1,306
|
||||||
11.05.2018, 19:36 | 14 | |||||
DimKaKiber, yе знаю, надеюсь, поможет. Это основной текст программы (Maple), отвечающий за вращение и смещение
L[m][i] – одна из координат i-й точки ломаной, изображающей сердечко, gm – смещение по соответствующей координате. Элементы матрицы вращения и смещения меняют свои значения N раз по кругу. Здесь все точки одновременно получают одно и то же вращение и смещение. Поэтому мы видим движение всего рисунка. Раз он отображается на экране, значит, решена прямая задача – мы по углам поворота и смещению получаем координаты всех точек. Думаю, прямая задача манипулятора не сложнее задачи получения этого рисунка. https://www.cyberforum.ru/atta... 1526056446
0
|
289 / 337 / 62
Регистрация: 09.06.2015
Сообщений: 1,306
|
|
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
|
289 / 337 / 62
Регистрация: 09.06.2015
Сообщений: 1,306
|
|
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
|
12.05.2018, 17:48 | |
12.05.2018, 17:48 | |
Помогаю со студенческими работами здесь
20
Расчет координат точки при смещении узла Определите координаты точки, полученной поворотом вокруг точки в системе координат Ввести координаты точки М и найти ее расстояние от начала координат (радиус - вектор от точки О (0,0)). Даны координаты концов N - мерного отрезка (точки a и b). Найти его длину и наибольшую из координат точки а Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
|
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее:
На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
|
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|