Некоторое время назад я сделал маленького робота-гусеничного робота, у которого было две ноги с двумя степенями свободы каждая, итого 4 сервопривода RC. Когда я программировал движение ног, я заметил, что они двигались довольно жестко. Имеет смысл, что внутренний контроллер RC-сервопривода будет очень быстро реагировать на команды позиционирования, но я хотел, чтобы мой гусеничный ход двигался так, чтобы он казался немного более плавным и реалистичным.
Моим решением было создать кубическую функцию времени, которая описывает путь сервоприводов, а затем установить их положение с небольшими приращениями времени, что привело к более плавному движению. По сути, я решил коэффициенты в кубическом уравнении, используя временной интервал, начальную и конечную позиции сервопривода, а также начальную и конечную скорости, по которым сервопривод должен двигаться (что является производной от позиции):
Решите для , a_1 , a_2 и a_3 :a 1 a 2 a 3
r a t e ( t ) = p o s i t i o n ′ ( t ) = a 1 + 2 a 2 т + 3 a 3 т
Дано: , , ,
Я установил скорость сервопривода между парой движений равной нулю, если движения были в противоположных направлениях, и положительной или отрицательной, если движения были в положительном или отрицательном направлении, соответственно.
Это работало довольно хорошо, но это решение ограничено несколькими способами. С одной стороны, трудно решить, какими именно должны быть скорости между движениями в одном направлении. Я использовал среднее значение уклонов впереди и сзади определенной позиции между движениями, но мне не ясно, что является оптимальным. Во-вторых, кубические кривые могут привести сервопривод в положение вне диапазона положений в начале и в конце движения, что может быть нежелательным. Например, в некоторой точке в течение временного интервала кривая может заставить сервопривод выйти за пределы второй позиции или ниже первой позиции. В-третьих, генерация кривой здесь не учитывает максимальную скорость, которую может разворачивать сервопривод, поэтому кривая может иметь сервопривод, движущийся со скоростью, которая нереальна. С этим,
Пренебрегая этой последней проблемой, эти проблемы могут быть решены путем увеличения степени полинома и добавления ограничений для решения коэффициентов, но теперь я начинаю задумываться ...
Есть ли лучший способ сделать серво движение более плавным и более реалистичным?
Ответы:
Генерация профиля движения
В прошлом я использовал генератор профилей движения для решения этой проблемы. Чтобы использовать его, вам понадобятся желаемое целевое положение (заданное значение), максимальная скорость и значения ускорения, связанные с вашими двигателями. Он работает путем интегрирования трапециевидной кривой скорости, чтобы получить плавный профиль положения. S-образная кривая может использоваться, если движение должно быть еще более плавным. Ссылка на статью, объясняющую профилирование движения .
Предварительная фильтрация заданного значения
Помимо маршрута профилирования движения, вы можете попробовать просто пропустить низкочастотную фильтрацию команды к сервоприводам. Этот тип фильтрации заданных значений замедлит ваш ответ, но также сгладит его, и его легко реализовать. Частоту среза нужно будет выбирать так, чтобы она поддерживала полосу пропускания вашей системы (чтобы она не отфильтровывала желаемое движение). Реализация простого фильтра нижних частот в C
источник
Я думаю, что вопрос касается такого рода устройства: RC сервопривод
Обычно это не очень высокая производительность, поэтому они не смогут хорошо отслеживать сгенерированный профиль движения. Большинство коммерческих систем управления двигателем используют S-кривую для движения точка-точка (см. Ответ @ ddevaz), которые создают кусочный профиль, где каждый сегмент использует свое уравнение. Ваша проблема заключается в том, что для того, чтобы ваш двигатель отслеживал сгенерированный профиль, у вас, вероятно, будет очень «медленный» профиль. В противном случае в профиле, который вы пробуете и подаете команду на устройство, будет большая ошибка положения по сравнению с фактическим положением устройства.
В идеале вам понадобится какая-то обратная связь, на которую вы можете смотреть во время выполнения движения, чтобы вы могли видеть, насколько хорошо устройство отслеживает команду. С практической точки зрения, если вы хотите значительно лучшего движения, вам могут потребоваться разные двигатели и другое управление двигателем.
источник