Направляя робота по пути - PullRequest
11 голосов
/ 25 мая 2010

У меня есть поле, заполненное препятствиями, я знаю, где они расположены, и я знаю положение робота. Используя алгоритм поиска пути, я вычисляю путь для робота.

Теперь моя проблема в том, что я направляю робота из сетки в сетку, но это создает не очень плавное движение. Я начинаю с А, поворачиваю нос в точку В, двигаюсь прямо до точки В, ополаскиваю и повторяю, пока не будет достигнута последняя точка.

Итак, мой вопрос: какие методы используются для навигации в такой среде, чтобы я мог получить плавное движение?

У робота два колеса и два мотора. Я меняю направление двигателя, поворачивая двигатели в обратном направлении.

РЕДАКТИРОВАТЬ: я могу варьировать скорость двигателей, в основном робот является Arduino плюс Ardumoto, я могу поставить значения от 0 до 255 для двигателей в любом направлении.

Ответы [ 4 ]

8 голосов
/ 25 мая 2010

Вам нужна линеаризация обратной связи для робота с дифференциальным управлением. Этот документ объясняет это в разделе 2.2. Я включил соответствующие части ниже:

Имитируемый робот, необходимый для Проект - это робот дифференциального привода с ограниченной скоростью. поскольку дифференциальные приводные роботы студентам рекомендуется использовать линеаризацию обратной связи для преобразовать кинематический выходной сигнал управления от их алгоритмов для управления дифференциальные приводные роботы. преобразование следует:

Transformation

где v, ω, x , y - линейные, угловые и кинематические скорости. L заданная длина, пропорциональная Размер колесной базы робота.

5 голосов
/ 18 июня 2010

Один алгоритм управления, с которым у меня были довольно хорошие результаты, это чистое преследование . По сути, робот пытается переместиться в точку вдоль пути на фиксированное расстояние впереди робота. Так как робот движется по пути, точка движения вперед также продвигается вперед. Алгоритм компенсирует неголономные ограничения, моделируя возможные пути как дуги.

Увеличение расстояния вперед при взгляде создаст более плавное движение. Однако большие расстояния при взгляде вперед заставят робота срезать углы, что может привести к столкновению с препятствиями. Вы можете решить эту проблему, реализовав идеи из алгоритма реактивного управления, называемого векторной гистограммой поля (VFH). VFH в основном отталкивает робота от тесных стен. Хотя обычно для этого используется какой-либо датчик определения дальности, вы можете экстраполировать относительные местоположения препятствий, поскольку вы знаете позу робота и местоположение препятствий.

1 голос
/ 25 мая 2010

Мои первые мысли по этому поводу (я на работе, поэтому не могу тратить слишком много времени):

Это зависит от того, насколько сильно вы хотите или нуждаетесь в поворотах (что будет зависеть от того, какое расстояние от препятствий отведет ваш искатель пути)

Учитывая ширину робота, вы можете рассчитать радиус поворота, учитывая скорости для каждого колеса. Предполагая, что вы хотите ехать максимально быстро, и что занос не является проблемой, вы всегда будете держать внешнее колесо на 255 и уменьшать внутреннее колесо до скорости, которая дает вам необходимый радиус поворота.

Учитывая угол для любого конкретного поворота на вашем пути и радиус поворота, который вы будете использовать, вы можете определить расстояние от этого узла, где вы замедляете внутреннее колесо.

0 голосов
/ 24 января 2013

Подход к оптимизации - очень общий способ справиться с этим.

Используйте ваш рассчитанный путь в качестве входных данных для общего алгоритма нелинейной оптимизации (на ваш выбор!) С функцией стоимости, состоящей из близости траектории ответа к входной траектории, а также соблюдения неголономных ограничений и любых другие ограничения, которые вы хотите применить (например, избегать препятствий). Алгоритм оптимизации также можно инициализировать траекторией, построенной из исходной траектории.

Замечания Марка Туссена по робототехнике являются хорошим источником для такого подхода. Смотрите, в частности, лекцию 7: http://userpage.fu -berlin.de / mtoussai / обучение / 10-робототехника /

...