Привет. Я хочу рассказать о конструкции и программировании системы управления конечностями в гексаподе, построенном Space Engineers. Забегая вперед, скажу, что все, что касается программирования в Space Engineer, будет в следующей статье.
В этом я расскажу об обратной кинематике и покажу прототип на HTML Canvas, в котором я отлаживал алгоритмы.
Предыстория и постановка проблемы.
Первоначально было построено шарнирно-сочлененное шасси, а затем на нем построили землеройный агрегат. Такая конфигурация обеспечивала контакт всех колес с поверхностью на больших неровностях, в том числе при скручивании.
Что-то вроде этого
Но я столкнулся с невозможностью точно разместить его на поле, так как колеса часто буксовали (проблема физики - большинство блоков (в том числе и колеса) имеют слишком низкий коэффициент трения).
Колесная платформа с цельноповоротными колесными модулями оказалась слишком громоздкой и страдала от периодических физических взрывов.
В результате было решено построить шагающего робота, а именно гексапода, как наиболее устойчивую шагающую платформу.
Как нормальный человек начнет строить гексапод? Вероятно, он зайдет в игру и начнет строить тело робота с конечностями, а потом будет думать, как это все анимировать.
Но это не наш метод (тс)
я начал с теории
Для строения ножки была выбрана следующая схема: Внутренний сустав – внутренний сустав, качающийся по оси рыскания (рыскания) Средний шарнир и внешний шарнир — это внешние шарниры, которые качаются вдоль оси тангажа.Ориентировочное направление — от основания ноги до конца ноги.
Угол 0 для всех суставов означает, что нога полностью выпрямлена (прямую ногу будет легче построить в игре).
Задача — найти для заданной целевой точки такие углы поворота суставов, чтобы конец ноги оказался в данной точке.
Вот и пришло время вспомнить о тригонометрии.
Угол внутреннего шарнира можно найти через арктангенс горизонтальных координат цели.
Два других сустава сложнее.const yawRad = Math.atan2(esimatedLegPosition.x, esimatedLegPosition.y);
У нас есть длина всех суставов.
Вы можете найти угол к горизонтали и расстояние между средним суставом и землей, а также расстояние до целевой точки.
Далее, используя теорему косинусов, нужно найти углы треугольника, используя известные стороны.
→ Решение треугольников
Вот как это выглядит в коде: getLegAngles(esimatedLegPosition) {
Теги: #игры #Игры и игровые приставки #Сделай сам или Сделай сам #программирование #Робототехника #JavaScript #робототехника своими руками #обратная кинематика
-
Если Оба Компьютера На Ноутбуке
19 Oct, 24 -
Хабр - Подкасты = Любовь
19 Oct, 24 -
Сообщение - Вопрос
19 Oct, 24 -
Развитие Бизнеса В Стартапах
19 Oct, 24 -
Всегда Ли Клиент Прав?
19 Oct, 24