Некоторое время назад я сделал маленького робота-гусеничного робота, у которого было две ноги с двумя степенями свободы каждая, итого 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 т
Дано: , , ,
Я установил скорость сервопривода между парой движений равной нулю, если движения были в противоположных направлениях, и положительной или отрицательной, если движения были в положительном или отрицательном направлении, соответственно.
Это работало довольно хорошо, но это решение ограничено несколькими способами. С одной стороны, трудно решить, какими именно должны быть скорости между движениями в одном направлении. Я использовал среднее значение уклонов впереди и сзади определенной позиции между движениями, но мне не ясно, что является оптимальным. Во-вторых, кубические кривые могут привести сервопривод в положение вне диапазона положений в начале и в конце движения, что может быть нежелательным. Например, в некоторой точке в течение временного интервала кривая может заставить сервопривод выйти за пределы второй позиции или ниже первой позиции. В-третьих, генерация кривой здесь не учитывает максимальную скорость, которую может разворачивать сервопривод, поэтому кривая может иметь сервопривод, движущийся со скоростью, которая нереальна. С этим,
Пренебрегая этой последней проблемой, эти проблемы могут быть решены путем увеличения степени полинома и добавления ограничений для решения коэффициентов, но теперь я начинаю задумываться ...
Есть ли лучший способ сделать серво движение более плавным и более реалистичным?