Движение робота по линии с поворотами

aptem91
Offline
Зарегистрирован: 09.02.2016

Подскажите как можно реализовать движение робота по определенной траектории то есть поворачивал на Т образных перекрестках куда нужно

Не где не смог найти такую тему если кто подскажет ссылку буду очень рад.

Есть 4 датчика линии.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Достаточно трех датчиков для определения перекрестков и не только Т-образных но и Х. Один датчик (№2) ставится на линию, а два сбоку (№1,3).

У меня ребенок сам "родил" примерно такой код:

повторять в loop():

0. Если все три датчика видят линию - перекресток, пропуск (нам надо только прямо)

1. Если датчик №2 видит линию (черное), то:
  1.1. Если датчик №1 (левый) видит белое (препятствие), то:
           левый движок поднимаем скорость на четверть
      , иначе:
           снижаем его скорость в 2 раза;

  1.2. Если датчик №3 (правый) видит белое, то:
           поднимаем скрость правого движка на четверть
      , иначе:
           снижаем его скорость в 2 раза;

, иначе (датчик №2 сошел с линии):
  2.1 Если датчик №1 на линии, то:
      выключаем левый двигатель (разворот влево на одном движке)

  2.2. Если датчик №3 на линии, то:
      выключаем правый двигатель (разворот вправо на одном движке)

Собственно все. При том что опрос датчика и изменение скорости аппаратным ШИМ это 1-2 команды процессора, весь скетч крутится настолько часто, что машинка даже 1 мм не успевает проехать за цикл, при том что макс. скорость по прямой развивается до 2 метров в сек.

aptem91
Offline
Зарегистрирован: 09.02.2016

спасибо но робот при таком коде будет ехать только прямо в плане он на перекрестке на право и на лево повернуть не сможет 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

Далее, "всё просто": обнаруживаете Т перекресток парой датчиков и принимаете решение на поворот. Сам поворот потребует усложнения алгоритма, поскольку в процессе поворота робот легко может съехать с линии, но при этом он должен "помнить" про режим поворота. то есть надо завершить поворот, а только потом снова искать линию. Где искать - абсолютно понятно из конструкции и её маневренности и движения в поворотах.

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

Я бы в таком случае сам поворот выполнял методом разворота, когда одна сторона крутит "вперед", а другая "назад", чтобы уменьшить вылет за линию после поворота. Но тут тоже надо смотреть на конструкцию: как далеко вперед вынесены датчики, находятся ли они на одной линии (центральный можно вынести вперед/назад по отношению к крайним, какова маневренность тележки в целом и т.д.

В целом, без тренировочных экспериментов вам все равно не обойтись. Мы тоже, пока строили тележку напридумывали кучу сложных алгоритмов управления на линии, а оказалось все донельзя примитивно.

aptem91
Offline
Зарегистрирован: 09.02.2016

Спасибо буду пробовать