Программа робота ev3 движение линии. Старт в науке

Алгоритмы управления мобильным LEGO-роботом. Движение по линии с двумя датчиками освещенности

Педагог дополнительного образования

Казакова Любовь Александровна


Движение по линии

  • Два датчика освещения
  • Пропорциональный регулятор (П-регулятор)

Алгоритм движения вдоль черной линии без пропорционального регулятора

  • Оба мотора крутятся с одинаковой мощностью
  • Если правый датчик освещенности попадает на черную линию, то мощность левого мотора (например В) снижается или происходит остановка
  • Если левый датчик освещенности попадает на черную линию, то мощность другого из моторов (например С) снижается (осуществляется возврат на линию) снижается или происходит остановка
  • Если оба датчика на белом или черном, то происходит прямолинейное движение

Движение организовано с помощью изменения мощности одно из моторов


Пример программы движения вдоль черной линии без П-регулятора

Движение организовано с помощью изменения угла поворота


  • Пропорциональный регулятор (П-регулятор) позволяет регулировать поведение робота в зависимости от того, на сколько его поведение отличается от желаемого.
  • Чем больше робот откланяется от цели, тем больше нужно приложить сил, что бы к ней вернуться.

  • П-регулятор используется для удержания робота в определенном состоянии:
  • Удержание положения манипулятора Движение по линии (датчик освещенности) Движение вдоль стены (датчик расстояния)
  • Удержание положения манипулятора
  • Движение по линии (датчик освещенности)
  • Движение вдоль стены (датчик расстояния)

Движение по линии с одним датчиком

  • Цель – движение по границе «белый-черный»
  • Человек может различить границу белого и черного цвета. Робот не может.
  • Цель для робота – находится на сером цвете

Проезд перекрестков

При использовании двух датчиков освещенности возможна организация движения по более сложным трассам



Алгоритм движения по трассе с перекрестками

  • Оба датчика на белом – робот едет прямолинейно (оба мотора крутятся с одинаковой мощностью)
  • Если правый датчик освещенности попадает на черную линию, а левый на белом то происходит поворот направо
  • Если левый датчик освещенности попадает на черную линию, а правый на белом то происходит поворот на лево
  • Если оба датчика на черном, то происходит прямолинейное движение. Можно вести подсчет перекрестков или выполнять какие либо действия


Принцип работы П-регулятора

Положение датчиков

О=О1-О2


Алгоритм движения вдоль черной линии с пропорциональным регулятором

УВ = К*(Ц-Т)

  • Ц - целевые значения (снять показания с датчика освещенности на белом и черном, рассчитать среднее)
  • Т - текущее значение - получаем с датчика
  • К - коэффициент чувствительности. Чем больше, тем выше чувствительность



Чтобы посмотреть презентацию с картинками, оформлением и слайдами, скачайте ее файл и откройте в PowerPoint на своем компьютере.
Текстовое содержимое слайдов презентации:
“Алгоритм движения по черной линии с одним датчиком цвета”Кружок по «Робототехнике»Педагог до Езидов Ахмед ЭлиевичПри МБУ ДО «Шелковской ЦТТ» Для изучения алгоритма движения по черной линии, будет использоваться робот Lego Mindstorms EV3 с одним датчиком цвета Датчик цветаДатчик цвета различает 7 цветов и может определить отсутствие цвета. Как и в NXT, он может работать как датчик освещенности.Поле для соревнований роботов "Линия S"Предлагаемый полигон с трассой в форме буквы "S" позволит вам провести еще одно интересное тестирование созданных роботов на скорость и реакцию. Рассмотрим простейший алгоритм движения по черной линии на одном датчике цвета на EV3.Данный алгоритм является самым медленным, но самым стабильным.Робот будет двигаться не строго по черной линии, а по ее границе, подворачивая то влево, то вправо и постепенно перемещаясь впередАлгоритм очень простой: если датчик видит черный цвет, то робот поворачивает в одну сторону, если белый - в другую. Движение по линии в режиме яркости отраженного светас двумя датчикамиИногда датчик цвета недостаточно эффективно может различить черный и белый цвета. Решение этой проблемы заключается в использовании датчика не в режиме определения цвета, а в режиме определения яркости отраженного света. В этом режиме мы, зная значения датчика на темной и светлой поверхности, самостоятельно можем говорить, что будет считаться белым, а что черным. Теперь определим значения яркости на белой и черной поверхностях. Для этого в меню блока EV3 находим вкладку «Приложения модуля»Теперь вы находитесь в окне просмотра портов и можете увидеть показания всех датчиков на текущий момент. наши датчики должны подсветиться красным, что означает, что они работают в режиме определения яркости отраженного света. Если же они светят синим – в окне просмотра портов на нужном порте нажимаем центральную кнопку и выбираем режим COL-REFLECT.Теперь поставим робота так, чтобы оба датчика располагались над белой поверхностью. Смотрим на цифры в портах 1 и 4.В нашем случае, значения 66 и 71 соответственно. Это и будут значения белого у датчиков. Теперь поставим робота так, чтобы датчики располагались над черной поверхностью. Снова посмотрим значения портов 1 и 4.У нас 5 и 6 соответственно. Это – значения черного. Дальше, мы изменим предыдущую программу. А именно – изменим настройки переключателей. Пока у них установлено Датчик цвета -> Измерение -> Цвет. Нам же требуется установить Датчик цвета -> Сравнение -> Яркость отраженного светаТеперь мы должны установить «тип сравнения» и «пороговое значение». Пороговое значение – это значение некоторого «серого», значения меньше которого мы будем считать черным, а больше – белым. Для первого приближения удобно использовать среднее значение между белым и черным каждого датчика. Таким образом, пороговое значение первого датчика (порт №1) будет (66+5)/2=35.5. Округлим до 35.Пороговое значение второго датчика (порт №4): (71+6)/2 = 38.5. Округлим до 38.Теперь выставляем эти значения в каждом переключателе соответственно.Вот и все, блоки с движениями остаются на своих местах без изменений, так как, если мы ставим в «типе сравнения» знак «<», то все, что сверху (под галочкой) будет считаться черным, а снизу (под крестиком) – белым, как и было в предыдущей программе.Старайтесь ставить датчики так, чтобы разница между белым и черным была как можно больше. Если разница меньше 30 - ставьте датчики ниже. Это было краткое руководство по программированию робота Lego ev3, для движения по черной линии, с одним и двумя датчиками цвета

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

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

В нашем примере будет разобрано три примера робота на основе основной учебной модели Robot Educator.

Для начала, собираем базовую модель учебного робота Robot Educator, для этого можно использовать инструкцию в программном обеспечении MINDSTORMS EV3.

Так же, для примеров нам понадобятся, датчики света-цвета EV3. Эти датчики света, как никакие другие, наилучшим образом подходят для нашей задачи, при работе с ними, нам не придётся забоится о интенсивности окружающего света. Для этого датчика, в программах мы будем использовать режим отражённого света, при котором оценивается количество отражённого света красной подсветки датчика. Границы показаний датчика 0 - 100 единиц, для «отсутствия отражения» и «полного отражения» соответственно.

Для примера мы разберём 3 примера программ для движения по чёрной траектории изображённой на ровном, светлом фоне:

· Один датчик, с П регулятором.

· Один датчик, с ПK регулятором.

· Два датчика.

Пример 1. Один датчик, с П регулятором.

Конструкция

Датчик света устанавливается на балку, удобно расположенную на модели.


Алгоритм

Действие алгоритма основано на том, что в зависимости от степени перекрытия, пучка подсветки датчика чёрной линией, возвращаемые датчиком показания градиентно варьируются. Робот сохраняет положение датчика света на границе чёрной линии. Преобразовывая входные данные от датчика света, система управления формирует значение скорости поворота робота.


Так как на реальной траектории датчик формирует значения во всём своём рабочем диапазоне (0-100), то значением к которому стремиться робот, выбрано 50. В этом случае значения передаваемые функции поворота формируются в диапазоне -50 - 50, но этих значений недостаточно для крутого поворота траектории. По этому следует расширить диапазон в полтора раза до -75 - 75.

В итоге, в программе, функция калькулятора является простым пропорциональным регулятором. Функция которого ((a-50)*1.5 ) в рабочем диапазоне датчика света формирует значения поворота в соответствии с графиком:

Пример работы алгоритма

Пример 2. Один датчик, с ПK регулятором.

Этот пример составлен на той же конструкции.

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

К нашему пропорциональному регулятору мы добавляем ещё и простой кубический регулятор, который добавит изгиб в функции регулятора. Это позволит уменьшить раскачивание робота рядом нужной границей траектории, а так же совершать более сильные рывки при сильном удалении от неё

15.01.2012, 18:51

До сих пор в статьях о алгоритмах, использующихся при движении вдоль линии, рассматривался такой способ, когда датчик освещенности как бы следил за левой или правой ее границей: чуть робот съедет на белую часть поля - регулятор возвращал робота на границу, начнет датчик перемещаться вглубь черной линии - регулятор выправлял его обратно.
Не смотря на то, что картинка выше приведена для релейного регулятора, общий принцип движения пропорционального (П-регулятора) будет такой-же. Как уже говорилось, средняя скорость такого перемещения не очень высокая и было сделано несколько попыток увеличить ее за счет незначительного усложнения алгоритма: в одном случае использовалось "мягкое" торможение, в другом, помимо поворотов, вводилось движение вперед.
Для того, чтобы позволить роботу на некоторых участках двигаться вперед, в диапазоне значений выдаваемых датчиком освещенности выделялся узкий участок, который условно можно было назвать "датчик находится на границе линии".
У данного подхода есть небольшой недостаток - если робот "следит" за левой границей линии, то на правых поворотах он как бы не сразу определяет искривления траектории и, как следствие, тратит большее время на поиск линии и поворот. Причем, можно с уверенностью сказать, что чем, круче поворот, тем дольше по времени происходит этот поиск.
На следующем рисунке видно, что если бы датчик находился не с левой стороны от границы, а с правой, то он уже обнаружил искривление траектории и начал бы совершать маневры по повороту.

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

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

На схеме выше сразу же показано, как конкретно в программе должно меняться поведение моторов.Теперь, написание программы не должно составить большого труда.Начать стоит с того, чтобы выбрать какой датчик будет опрашиваться первым. Это не имеет большого значения, поэтому пусть будет левый. Необходимо определить, над светлой или над темной он поверхностью:
Это действие еще не позволяет сказать в какую сторону роботу надо ехать. Но оно разделит состояния, перечисленные выше, на две группы: (I, II) для верхней ветви и (III, IV) для нижней. В каждой из групп теперь по два состояния, поэтому необходимо выбрать какое-то из них. Если внимательно посмотреть на первые два состояния I и II, то они отличаются положением правого датчика - в одном случае он над светлой поверхностью, в другом - над темной. Именно это и определит выбор, какое действие предпринять:
Теперь можно вставить блоки, определяющие поведение моторов согласно таблицам выше: верхняя ветвь вложенного условия определяет комбинацию "оба датчика на светлом", верхняя - "левый на светлом, правый на темном":
Нижняя ветка основного условия отвечает за другую группу состояний III и IV. Эти два состояния также отличаются друг от друга уровнем освещенности, который улавливает правый датчик. Значит, он будет определять выбор каждого из них:
Получившиеся две ветви наполняются блоками движения. Верхняя ветвь отвечает за за состояние "левый на темном, правый на светлом", а нижняя - за "оба датчика на темном".
Следует отметить, что данная конструкция всего лишь определяет, как включить моторы в зависимости от показаний сенсоров в определенном месте поля, естественно через мгновение программа должна проверить не изменились ли показания, чтобы соответствующим образом подправить поведение моторов, а через мгновение еще раз, еще и т.д. Поэтому она должна быть помещена в цикл, который будет обеспечивать такую повторяющуюся проверку:

Такая довольно простая программа будет обеспечивать довольно высокую скорость передвижения робота вдоль линии без вылета за ее пределы, если правильным образом настроить максимальную скорость при движении в состояниях I и IV, а также задать оптимальный способ торможения в состояниях II и III - чем круче повороты на трассе, тем "жестче" должно быть торможение - скорость должна сбрасываться быстрее, и наоборот - при плавных поворотах вполне можно применять торможение через выключение энергии или даже вообще через незначительный сброс скорости.

По размещению датчиков на роботе тоже следует сказать несколько отдельных слов. Очевидно, что по расположению этих двух датчиков относительно колес будут действовать те же самые рекомендации, что и для одного датчика, только за вершину треугольника при этом берется середина отрезка соединяющий два датчика. Само же расстояние между датчика тоже должно выбираться из характеристик трассы: чем ближе датчики будут расположены друг к другу, тем чаще робот будет выравниваться (выполнять относительно медленные развороты), но если разнести датчики достаточно широко, то есть риск вылета с трассы, поэтому придется выполнять более "жесткие" повороты и уменьшать скорость передвижения на прямых участках.



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

Человек видит черную линию и ее четкую границу. Датчик освещенности работает несколько иначе.

Именно это свойство датчика освещенности – невозможность четко различить границу белого и черного – мы и будем использовать для расчета скорости движения.

Во-первых, введем понятие “Идеальная точка траектории”.

Показания датчика освещенности колеблются в диапазоне от 20 до 80, чаще всего на белом цвете показания равны примерно 65, на черном порядка 40.

Идеальная точка – условная точка примерно посередине белого и черного цветов, следуя которой робот будет перемещаться вдоль черной линии.

Здесь принципиально расположение точки – между белым и черным. Задать ее точно на белом или черном не получится по математическим причинам, почему – будет ясно позднее.

Эмпирическим путем мы вычислили, что идеальную точку можно высчитать по следующей формуле:

Робот должен двигаться строго по идеальной точке. Если случается отклонение в какую-либо сторону, робот должен вернуться к этой точке.

Составим математическое описание задачи.

Исходные данные.

Идеальная точка.

Текущие показания датчика освещенности.

Результат.

Мощность вращения мотора В.

Мощность вращения мотора С.

Решение.

Рассмотрим две ситуации. Первая: робот отклонился от черной линии в сторону белого.

В этом случае робот должен увеличить мощность вращение мотора В и уменьшить мощность мотора С.

В ситуации, когда робот заезжает на черную линию, все наоборот.

Чем сильнее робот отклоняется от идеальной точки, тем быстрее ему надо к ней вернуться.

Но создание такого регулятора – задача довольно непростая, да и не всегда он требуется в целом виде.

Поэтому мы решили ограничиться только П-регулятором, адекватно реагирующем на отклонение от черной линии.

На языке математики это будет записано так:

где Hb и Hc – итоговые мощности моторов B и C соответственно,

Hбазовая – некая базовая мощность моторов, определяющая скорость движения робота. Подбирается экспериментально, в зависимости от конструкции робота и резкости поворотов.

Iтек – текущие показания датчика освещенности.

I ид – рассчитанная идеальная точка.

k – коэффициент пропорциональности, подбирается экспериментально.

В третьей части рассмотрим, как это запрограммировать в среде NXT-G.

error: