Плавное движение по черной линии ev3. Lego EV3. Движение по черной линии. Датчик цвета - режим "Яркость внешнего освещения"

Внутренняя

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

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

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

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

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

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

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

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

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

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

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

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

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

Результат.

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

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

Решение.

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

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

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

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

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

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

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

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

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

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

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

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

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

Так видит линию человек:

Так видит её робот:


Вот эту особенность мы и будем использовать при конструировании и программировании робота для категории соревнований «Траектория».

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

Я хочу рассказать о способе программирования, который освоят даже дети 2-3 классов. В этом возрасте им гораздо легче дается сборка конструкций по инструкциям, а программирование робота - для них сложная задача. Но этот способ позволит ребенку запрограммировать робота на любой маршрут трассы за 15-30 минут (с учетом поэтапной проверки и подгонки некоторых особенностей траектории).

Данный способ был проверен на муниципальных и региональных соревнованиях по робототехнике в Сургутском районе и ХМАО-Югре и принес нашей школе первые места. Там же я убедился, что эта тема весьма актуальна для многих команд.

Ну, приступим.

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

Рассмотрим вариант робота с двумя датчиками света, так как он более понятен ученикам младших классов.

Датчики освещенности подключены ко 2 и 3 портам. Моторы к портам В и С.
Датчики выставлены по краям линии (попробуйте поэкспериментировать, располагая датчики на разном расстоянии друг от друга и на разной высоте).
Важный момент. Для лучшей работы такой схемы пару датчиков желательно подобрать по параметрам. Иначе, необходимо будет вводить блок корректировки значений датчиков.
Установка датчиков на шасси по классической схеме (треугольник), примерно, как на рисунке.

Программа будет состоять из небольшого количества блоков:


1. Два блока датчика освещенности;
2. Четыре блока «Математики»;
3. Двух блоков моторов.

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

Теперь разберёмся, как соединить все блоки, настроить программу и что будет в ней происходить.
Выставим два датчика освещенности и назначим им порты 2 и 3.
Берем блок математики и выберем «Вычитание».
Подключим датчики освещенности с выходов «Интенсивность» шинами к блоку математики ко входам «А» и «В».
Если датчики робота установлены симметрично от центра линии трассы, то значения обоих датчиков будет равными. После вычитания мы получим значение – 0.
Следующий блок математики будет использован в качестве коэффициента и в нем нужно выставить «Умножение».
Для вычисления коэффициента вам необходимо измерить с помощью блока NXT уровень «белого» и «черного».
Предположим: белый -70, черный -50.
Далее считаем: 70-50=20 (разница между белым и черным), 50/20=2,5 (среднее значение мощности при движении по прямой в блоках математики мы выставили в 50. Это значение плюс добавленная мощность при корректировки движения должна быть равна 100)
Попробуйте выставить значение 2,5 по входу «А», а потом подберете более точно.
Ко входу «В» блока математики «Умножение» подключите выход «Результат» предыдущего блока математики «Вычитание».
Далее идет пара – блок математики (Сложение) и мотор В.
Настройка блока математики:
По входу «А» выставлено значение 50 (половина мощности мотора).
Выход блока «Результат» соединен шиной с входом «Мощность» мотора В.
Следом пара – блок математики (Вычитание) и мотор С.
Настройка блока математики:
По входу «А» выставлено значение 50.
Вход «В» соединен шиной с выходом «Результат» блока математики «Умножение».
Выход блока «Результат» соединен шиной с входом «Мощность» мотора С.

В результате всех этих действий вы получите такую программу:

Так как это все будет работать в цикле, то добавляем «Цикл», выделяем и переносим это все в «Цикл».

Теперь давайте попробуем разобраться, как будет работать программа и как ее настроить.


Пока робот едет по прямой линии значения датчиков совпадают, значит, на выходе блока «Вычитание» будет значение 0. Выход блока «Умножение» дает тоже значение 0. Это значение подается параллельно на пару управления моторами. Так как в этих блоках выставлено значение 50, то прибавление или вычитание 0 не влияет на мощность моторов. Оба мотора работают с одинаковой мощностью 50, и робот катит по прямой.

Предположим, что трасса делает поворот или робот отклоняется от прямой. Что будет происходить?

По рисунку видно, что освещенность датчика, подключенного к порту 2 (далее по тексту –датчики 2 и 3) увеличивается, так как он съезжает на белое поле, а освещенность датчика 3 уменьшается. Предположим, значения этих датчиков становятся: датчик 2 – 55 единиц, а датчик 3 – 45 единиц.
Блок «Вычитания» определит разницу между значениями двух датчиков (10) и подаст его в блок коррекции (умножение на коэффициент(10*2,5=25)) и далее в блоки управления
моторами.
В блоке математики (Сложение) управления мотором В к значению средней скорости 50
добавится 25 и значение мощности 75 будет подано на мотор В.
В блоке математики (Вычитание) управления мотором С от значения средней скорости 50 будет вычтено 25 и значение мощности 25 будет подано на мотор С.
Таким образом, будет скорректировано отклонение от прямой линии.

Если трасса резко поворачивает в сторону и датчик 2, оказывается на белом, а датчик 3 на черном. Значения освещенности этих датчиков становятся: датчик 2 – 70 единиц, а датчик 3 – 50 единиц.
Блок «Вычитания» определит разницу между значениями двух датчиков (20) и подаст ее в блок коррекции (20*2,5=50) и далее в блоки управления моторами.
Теперь в блоке математики (Сложение) управления мотором В значение мощности 50 +50 =100 будет подано на мотор В.
В блоке математики (Вычитание) управления мотором С значение мощности 50 – 50 = 0 будет подано на мотор С.
И робот выполнит крутой разворот.

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

Теперь создадим новый блок и будем его использовать для движения робота по любой трассе.
Выделим цикл, далее в меню «Правка» выберем команду «Создать мой блок».

В диалоговом окне «Конструктор блоков» дадим название нашему блоку, например, «Go», выберем иконку для блока и нажмем «ГОТОВО».

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

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

Общая теория и конкретные примеры создания программы описаны на сайте wroboto.ru

Опишу, каким образом мы это реализуем в среде EV3, поскольку есть отличия.

Первое, что необходимо знать роботу – значение “идеальной точки”, расположенной на границе черного и белого.

Расположение красной точки на рисунке как раз соответствует этой позиции.

Идеальный вариант расчета – измерить значение черного и белого и взять среднее арифметическое.

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

Значит, можно заставить это делать робота.

В ходе экспериментов мы выяснили, что измерять и черное, и белое необязательно. Можно измерить только белое. А значение идеальной точки рассчитывается как значение белого, деленное на 1,2 (1,15), в зависимости от ширины черной линии и скорости движения робота.

Рассчитанное значение нужно записать в переменную, чтобы потом обращаться к нему.

Расчет “идеальной точки”

Следующий параметр, участвующий в движении – коэффициент поворота. Чем он больше, тем резче робот реагирует на изменение освещенности. Но слишком большое значение приведет к “вилянию” робота. Значение подбирается экспериментально индивидуально для каждой конструкции робота.

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

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

Коэффициент поворота и базовая мощность

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

Для этого высчитываем два числа – значение мощности каждого из моторов В и С по отдельности.

В виде формул это выглядит так:

Где Isens – значение показаний датчика освещенности.

Наконец, реализация в EV3. Удобнее всего оформить в виде отдельного блока.

Реализация алгоритма

Именно такой алгоритм был реализован в роботе для средней категории WRO 2015

Алгоритмы управления мобильным 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, для движения по черной линии, с одним и двумя датчиками цвета