Три двигателя на одну ногу, а траектория движения считается для пятна контакта ноги с поверхностью. Мне кажется этого мало. Каждый двигатель обладает инертностью, и это нужно учитывать. При этом инертность первого двигателя, что используется для поворота всей конечности — получается максимальной. А вот последнего, что выдвигает лапу от корпуса — минимальной, и его можно существенно ускорить.
Модуль где вся математика — наверное самое интересное. Хотелось-бы увидеть в любом варианте: в виде ссылки, спойлера, или публикации на гитхабе.
Кхм, я рассчитывал увидеть обратное преобразование, а у вас решение в лоб. Плоскость платформы гексапода — как начальная точка отчёта. В таком варианте расчёты значительно упрощаются. :)
Насчёт преодоления сложного рельефа.
Я заметил сохранение точки касания, после чего её высота не меняется. Для разного рельефа эта точка будет находится на разной высоте. То-есть нужен датчик удара о поверхность. Могут быть варианты: контактный, ёмкостный, или датчик ускорения (аксель). Для последнего доступно сразу несколько функций: вертикальное препятствие, высота/пустота, и режим контактного осязания — постройка грубой формы рельефа препятствия. Постройка рельефа — рискованная функция. Есть шанс что гексапод сумеет забуриться туда — откуда его трудно будет достать.
Я не слишком силен в математике, поэтому не стал усложнять всё. Да и зачем, когда есть более простое решение. Возможно по мере усложнения проекта будет усложняться и математика.
На счет сохранения точки касания не совсем понял. На данном этапе разработки датчики касания отсутствуют и все координаты являются константами. Я всё еще думаю как красиво поставить концевые переключатели на ноги, но пока безуспешно.
На счет акселерометра можно поподробнее? Есть много MPU6050 :)
К сожалению чертеж в КОМПАС утерян. Есть только PDF, готовая для лазерной резки. Но тут нужно учитывать, что прорезь соответствует только MG996R и идентичным им. Цифровые приводы туда влезали со скрипом :)
Много MPU6050 — это уже хорошо. Два таких датчика можно использовать на одной шине. Для старта более чем достаточно. Но придётся делать собственную ПП для датчика. Tе что продаются — имеют большие габариты и несовместимость с плоскими шлейфами.
Суть в том что последнее звено лапы нужно сделать чуть более подвижным. Либо на саму лапу прикрепить контактную поверхность с небольшим свободным ходом. И вот уже на неё крепить датчик. Вариантов перехода много: от резиновой трубки, до демпферов с вязким наполнителем.
Движение лапы необходимо просчитать для кординат датчика. У вас получится ещё один массив данных — но уже для датчика. При наличии препятствия — показания акселя будут многократно отличаться от расчётных.
Да, да — совершенно слепой гексапод, который передвигается на ощупь.
Такой способен неожиданно напугать, если его надолго потерять из поля зрения. Я думаю домашние будут в восторге, но немного седые.
Тестировал на своем коте — гексапод его толкает уже лапами в бок, а он просто смотрит на него и всё. Ну хотя, что от кота ожидать — он пылесоса не боится. Люди от неожиданности пугаются :)
MPU6050 лучше всего использовать для стабилизации платформы,
а чтобы корректно работать с конечностями, нужно использовать сервы с обратной связью.
Но это дорого
Да, я очень долго смотрел на такие сервы и облизывался — минимум проводов и полный контроль над всем, но цена даже на Ali довольно высокая, особенно учитывая их требуемое количество.
Так она там и используется. Траектории это один из этапов обработки входных данных до алгоритма обратной кинематики. Сама обратная кинематика рассматривается тут: habr.com/ru/post/436748
Могу добавить про MG996R из личного опыта. Года 3 назад хотел собрать механическую руку, чтобы потом рисовать ею какие-то контуры. Для меня основной проблемой тогда стало то что под нагрузкой серва уже не занимала заданный мне угол а прижималась как бы к крайнему положению. Так же была проблема задания одного и того же угла когда серва поворачивается по направлению действия нагрузки и против направления действия нагрузки. Возможно в вашем случае сервы посильней, а плечо меньше и такой проблемы не возникнет, но то что серва под нагрузкой может принимать не совсем точное положение надо иметь ввиду.
Как видно, шаг импульса для каждого привода отличаются, это было неожиданным для меня открытием.
Кто имеет дело с сервоприводами — об этом знают и везде есть понятие «калибровка» сервоприводов. Указывают крайние точки на которые отклоняется выход сервомашинки и запоминают значения подаваемых импульсов, ну а дальше на основе этих данных масштабируют нужный угол в значения длины импульсов для каждой сервомашинки. Я бы добавил возможность калибровки каждого сервопривода и тогда все будет довольно точно. Вдруг далее захотите заменить сервомашинки на другие и опять таблицу будете делать :)
Калибровка это здорово, но от приводов нет обратной связи и нет датчиков положения конечностей. Довольно сложно (если вообще возможно) откалибровать автоматически без каких-либо данных от приводов. А так да, другие приводы — другая таблица.
Я говорю не про автомат. А про ручную калибровку. Например входим в режим калибровки: 1 сервопривод отклоняем в одну сторону и кнопками + и — устанавливаем отклонение на контрольную метку, потом 1 привод отклоняем в другую сторону и кнопками совмещаем вторую метку. Можно еще выставлять среднюю метку (края и середина, но обычно сервоприводы линейны в обе стороны). Таким образом запоминаем мин и макс значения импульс когда сервоприводы откланяются на заданный угол согласно меток, ну а дальше вычисляем коэффициент и смещение центра. И так все остальные приводы. Да, долго — но зато универсально.
Разработка hexapod с нуля (часть 4) — математика траекторий и последовательности