Как запрограммировать робота EV3 для движения по черной линии. Какие существуют алгоритмы следования по линии. Как использовать один или два датчика цвета для отслеживания линии. Какие регуляторы применяются в программах движения по линии.
Основные алгоритмы движения робота по черной линии
Движение робота по линии — одна из базовых задач в робототехнике. Существует несколько основных алгоритмов решения этой задачи:
- Движение с одним датчиком цвета
- Движение с двумя датчиками цвета
- Использование П-регулятора
- Использование ПД-регулятора
Выбор конкретного алгоритма зависит от конструкции робота, количества и расположения датчиков, а также требуемой точности и скорости движения.
Алгоритм движения с одним датчиком цвета
Это самый простой, но при этом достаточно надежный алгоритм. Принцип его работы:
- Датчик устанавливается так, чтобы отслеживать границу черной линии и белого поля
- Если датчик видит черный цвет — робот поворачивает в одну сторону
- Если датчик видит белый цвет — робот поворачивает в другую сторону
Таким образом, робот движется зигзагообразно, постоянно корректируя свое положение относительно линии. Как реализовать этот алгоритм в EV3?
Программа движения по линии с одним датчиком на EV3
Вот пример простой программы на EV3 для движения по линии с одним датчиком:
«`text Цикл { Если (Датчик цвета 1 = Черный) { Мотор B = 30 Мотор C = -30 } Иначе { Мотор B = -30 Мотор C = 30 } } «`Основные моменты программы:
- Используется бесконечный цикл для постоянного выполнения
- Проверяется цвет, определяемый датчиком
- В зависимости от цвета задается разное направление вращения моторов
Этот алгоритм прост в реализации, но имеет недостатки — низкую скорость движения и «дерганый» характер движения робота.
Алгоритм движения с двумя датчиками цвета
Использование двух датчиков позволяет сделать движение робота более плавным и быстрым. Принцип работы:- Два датчика устанавливаются по обе стороны от линии
- Если оба датчика видят белый — робот едет прямо
- Если левый датчик видит черный — робот поворачивает влево
- Если правый датчик видит черный — робот поворачивает вправо
Давайте рассмотрим пример программы для этого алгоритма.
Программа движения по линии с двумя датчиками на EV3
«`text Цикл { Если (Датчик цвета 1 = Белый И Датчик цвета 2 = Белый) { Мотор B = 50 Мотор C = 50 } Иначе если (Датчик цвета 1 = Черный) { Мотор B = -30 Мотор C = 30 } Иначе если (Датчик цвета 2 = Черный) { Мотор B = 30 Мотор C = -30 } } «`Ключевые моменты программы:
- Проверяются показания обоих датчиков цвета
- В зависимости от комбинации цветов задается разное движение
- Прямолинейное движение осуществляется на большей скорости
Этот алгоритм обеспечивает более плавное и быстрое движение по сравнению с однодатчиковым вариантом.
Использование П-регулятора для движения по линии
Для еще более точного и плавного движения можно использовать пропорциональный (П) регулятор. Его принцип работы:
- Определяется целевое значение датчика на границе линии (например, 50)
- Вычисляется отклонение текущего значения датчика от целевого
- Скорость поворота робота задается пропорционально этому отклонению
Рассмотрим пример программы с П-регулятором.
Программа движения по линии с П-регулятором на EV3
«`text Целевое = 50 Кр = 1.5 Цикл { Отклонение = Датчик цвета 1 — Целевое Поворот = Отклонение * Кр Мотор B = 50 + Поворот Мотор C = 50 — Поворот } «`Основные моменты программы:
- Задается целевое значение датчика и коэффициент пропорциональности
- Вычисляется отклонение от цели
- Значение поворота рассчитывается умножением отклонения на коэффициент
- Скорость моторов корректируется на величину поворота
П-регулятор обеспечивает более плавное движение, так как величина поворота пропорциональна отклонению от линии.
Использование ПД-регулятора для движения по линии
Для еще более точного управления можно добавить дифференциальную составляющую, получив ПД-регулятор. Его преимущества:
- Учитывает скорость изменения отклонения
- Позволяет прогнозировать поведение робота
- Обеспечивает более быструю реакцию на резкие повороты
Давайте рассмотрим пример программы с ПД-регулятором.
Программа движения по линии с ПД-регулятором на EV3
«`text Целевое = 50 Кр = 1.5 Кд = 5 Предыдущее_отклонение = 0 Цикл { Отклонение = Датчик цвета 1 — Целевое Дельта = Отклонение — Предыдущее_отклонение Поворот = Отклонение * Кр + Дельта * Кд Мотор B = 50 + Поворот Мотор C = 50 — Поворот Предыдущее_отклонение = Отклонение } «`- Добавляется коэффициент дифференциальной составляющей Кд
- Рассчитывается изменение отклонения (дельта)
- Значение поворота включает пропорциональную и дифференциальную части
- Сохраняется предыдущее отклонение для следующей итерации
ПД-регулятор позволяет роботу двигаться еще более плавно и точно, особенно на сложных участках трассы с резкими поворотами.
Как выбрать оптимальный алгоритм движения по линии?
Выбор алгоритма зависит от нескольких факторов:
- Конструкция робота и расположение датчиков
- Сложность трассы (наличие резких поворотов, перекрестков)
- Требуемая скорость и точность движения
- Опыт программиста и сложность реализации
Для начинающих рекомендуется начать с простого алгоритма на одном датчике. По мере освоения можно переходить к более сложным вариантам с двумя датчиками и регуляторами.
Советы по оптимизации движения робота по линии
Чтобы улучшить работу вашего робота, следуйте этим рекомендациям:
- Тщательно откалибруйте датчики цвета перед стартом
- Экспериментируйте с коэффициентами регуляторов для поиска оптимальных значений
- Учитывайте инерцию робота при расчете поворотов
- Используйте плавное изменение скорости для снижения рывков
- Добавьте обработку особых ситуаций (перекрестки, препятствия)
Помните, что идеальный алгоритм движения по линии часто требует тонкой настройки под конкретную задачу и робота.
Заключение
Движение робота по линии — это фундаментальная задача в робототехнике, которая позволяет освоить базовые принципы управления роботом. Начиная с простых алгоритмов и постепенно переходя к более сложным, вы сможете создавать эффективные программы для различных соревнований и практических задач.
Экспериментируйте с разными подходами, анализируйте их преимущества и недостатки. Это поможет вам глубже понять принципы работы роботов и развить навыки программирования и оптимизации алгоритмов.
Движение по черной линии роботов Lego Mindstorms EV3
Содержание
- Движение по линии
- Алгоритмы движения робота
- Зрение робота EV3
- Калибровка датчика цвета
- Ручной режим калибровки датчика цвета EV3
- Автоматическая калибровка датчика цвета
- Движение по тонкой линии Arduino
Одним из часто встречающихся видов соревнований является соревнование “Движение робота вдоль черной линии”. В последнее время активно развивается робототехника, открывается множество кружков. Как следствие проводится множество соревнований и конкурсов по робототехнике различного уровня. Это направление называется соревновательная робототехника.
Это соревнование проводится в разных номинациях и категориях. Есть движение по широкой линии (5 см), по узкой линии (1,5 см), включают в движение по линии участки с прерывистой линией. Часто еще используется объезд роботом препятствий (например объезд кирпича) или преодоление препятствий (например, качающийся мост). После преодоления препятствий робот должен вернуться на линию и успешно финишировать.
Так как сейчас есть много типов робототехнических конструкторов, то соревнования также разделяют по категориям. Т.е. движение по линии Lego EV3, отдельно движение по линии Arduino и т.д. Побеждает робот, преодолевший дистанцию за минимальное время не потеряв трассу.
Алгоритмы движения робота
Есть несколько основных алгоритмов движения робота вдоль черной линии с использованием различных типов регуляторов:
- Релейный регулятор
- Пропорциональный регулятор
- Пропорциональный дифференциальный регулятор
- Кубический регулятор
- Пропорциональный интегральный регулятор
- Пропорциональный интегральный дифференциальный регулятор
Можно использовать эти алгоритмы с применением одного, двух, трех и даже четырех датчиков цвета. Количество применяемых датчиков зависит от сложности соревнований и каждый раз подбирается индивидуально..
Зрение робота EV3
Робот EV3 не обладает зрением и может воспринимать информацию о линии при помощи датчика цвета EV3.
Робот и человек по разному видят черную линию. У человека границы черного и белого четко различимы. Робот же видит размытую картину границы черного и белого. Для того, чтобы более точно определить линию, датчик робота должен быть расположен на границе черной линии и белого поля посередине.
При этом высота расположения датчика над линией должна быть около 1 см. Но это рекомендуемая высота. На соревнованиях встречаются различные варианты расположения датчика и подбираются они участниками индивидуально.
Калибровка датчика цвета
Для того, чтобы применить указанные алгоритмы нужно откалибровать датчик цвета на реальном поле. Есть два способа калибровки:
- ручной способ — все вычисления проводятся самостоятельно
- автоматическая калибровка — вычисления производятся при помощи блоков операций с данными
Датчик работает в режиме отраженного света. Суть метода состоит в том, что мы находим пороговое значение белого и черного цвета.
На практике нужно измерить значение белого цвета, затем черного цвета, суммировать их и разделить на два. Т.е. если обозначить пороговое значение буквой C, значение белого цвета буквой A и значение черного цвета буквой B, то формула будет выглядеть следующим образом:
С = ( A + B ) / 2
Измерить значение белого и черного цвета можно просто поочередно расположив датчик над белой и черной линией и записать значения.
Ручной режим калибровки датчика цвета EV3
В ручном режиме делается это просто, при помощи меню, расположенном на экране блока Lego EV3. Для этого нужно на экране блока EV3 зайти в третью вкладку и открыть первое приложение из пяти. Это приложение называется представление порта.
Здесь можно быстро посмотреть к какому порту присоединены датчики или сервомоторы. При помощи кнопок управления микроконтроллером EV3 нужно перейти к любому из занятых портов, и тогда можно посмотреть текущие показания, которые в данный момент получены с сенсоров или сервомоторов.
Чтобы посмотреть или изменить текущие настройки для установленных сервомоторов и сенсоров нужно нажать центральную кнопку. Нажатие кнопки «Назад» возвращает нас в основное окно приложений.
Для примера установлю датчик цвета в порт под номером 3 и сниму показания на белом поле.
На экране блока EV3 отобразилось показание в 43 условных единицы. Таким же образом определяем показания датчика на черной линии. Например показания будут 3 условных единицы. Подставляем эти значения в формулу.
С = ( A + B ) / 2 = (43 + 3) / 2 = 46 / 2 = 23
В результате получаем пороговое значение 23 условных единицы.
Автоматическая калибровка датчика цвета
Таким же точно образом измеряем пороговое значение (его еще называют значение серого) при автоматической калибровке, но на этот раз значение записывается в переменную. Назовем переменную, например, porog. В среде программирования Lego EV3 пишем программу для калибровки.
В первой части программы нужно расположить датчик над белым фоном. Датчик касания расположен в 1 порту. В программе используется блок ожидания действия с датчиком касания. В данном случае установлен параметр “щелчок” — цифра 2 в нижней части блока ожидания. Т.е. нужно нажать и отпустить кнопку датчика.
После этого датчик цвета в режиме отраженного света измеряет значение белого цвета и значение записывается в переменную A.
Во второй части программы нужно расположить датчик над черной линией и также нажать на кнопку датчика касания. Значения черного цвета записываются в переменную B.
В третьей части программы мы считываем значения датчиков из переменной A и B и передаем их значения в блок математики, который находится в режиме “Дополнения”. В этом блоке происходит вычисление по формуле С = ( A + B ) / 2 ирезультат вычисления записывается в переменную С.
Теперь значение переменной С можно использовать в качестве порогового значения серого для дальнейшего использования в алгоритмах движения по линии.
Движение по тонкой линии Arduino
Фрагмент соревнований по робототехнике «Движение по тонкой линии». Также это соревнование называют «Тонкий Триал». Этот очень быстрый робот в номинации роботов Arduino является победителем региональных соревнований.
По условиям соревнований робот Arduino должен совершить объезд кирпича и преодолеть качающийся мост. После преодоления препятствий робот должен вернуться на линию и финишировать не сойдя с трассы. Тонкий триал есть и в категории Lego EV3 роботов.
15.01.2012, 18:51 До сих пор в статьях о алгоритмах, использующихся при движении вдоль линии,
рассматривался такой способ, когда датчик освещенности как бы следил за левой
или правой ее границей: чуть робот съедет на белую часть поля — регулятор
возвращал робота на границу, начнет датчик перемещаться вглубь черной линии —
регулятор выправлял его обратно. Теперь необходимо определить, как такое изменение конструкции скажется на программе. Для простоты опять следует начать с простейшего релейного регулятора и поэтому, в первую очередь, интересуют возможные положения датчиков относительно линии: На самом деле, можно выделить еще одно допустимое состояние — на сложных трассах
это будет пересечение перекрестка или какого-то утолщения на пути.
На схеме выше сразу же показано, как конкретно в программе должно меняться поведение моторов.Теперь, написание программы не должно составить большого труда.Начать стоит с того, чтобы выбрать какой датчик будет опрашиваться первым. Это не имеет большого значения, поэтому пусть будет левый. Необходимо определить, над светлой или над темной он поверхностью: Это действие еще не позволяет сказать в какую сторону роботу надо ехать. Но оно разделит состояния, перечисленные выше, на две группы: (I, II) для верхней ветви и (III, IV) для нижней. В каждой из групп теперь по два состояния, поэтому необходимо выбрать какое-то из них. Если внимательно посмотреть на первые два состояния I и II, то они отличаются положением правого датчика — в одном случае он над светлой поверхностью, в другом — над темной. Именно это и определит выбор, какое действие предпринять: Теперь можно вставить блоки, определяющие поведение моторов согласно таблицам выше: верхняя ветвь вложенного условия определяет комбинацию «оба датчика на светлом», верхняя — «левый на светлом, правый на темном»: Нижняя ветка основного условия отвечает за другую группу состояний III и IV. Эти два состояния также отличаются друг от друга уровнем освещенности, который улавливает правый датчик. Значит, он будет определять выбор каждого из них: Получившиеся две ветви наполняются блоками движения. Верхняя ветвь отвечает за за состояние «левый на темном, правый на светлом», а нижняя — за «оба датчика на темном». Следует отметить, что данная конструкция всего лишь определяет, как включить моторы в зависимости от показаний сенсоров в определенном месте поля, естественно через мгновение программа должна проверить не изменились ли показания, чтобы соответствующим образом подправить поведение моторов, а через мгновение еще раз, еще и т. д. Поэтому она должна быть помещена в цикл, который будет обеспечивать такую повторяющуюся проверку: Такая довольно простая программа будет обеспечивать довольно высокую скорость передвижения робота вдоль линии без вылета за ее пределы, если правильным образом настроить максимальную скорость при движении в состояниях I и IV, а также задать оптимальный способ торможения в состояниях II и III — чем круче повороты на трассе, тем «жестче» должно быть торможение — скорость должна сбрасываться быстрее, и наоборот — при плавных поворотах вполне можно применять торможение через выключение энергии или даже вообще через незначительный сброс скорости. По размещению датчиков на роботе тоже следует сказать несколько отдельных слов. Очевидно, что по расположению этих двух датчиков относительно колес будут действовать те же самые рекомендации, что и для одного датчика, только за вершину треугольника при этом берется середина отрезка соединяющий два датчика. Само же расстояние между датчика тоже должно выбираться из характеристик трассы: чем ближе датчики будут расположены друг к другу, тем чаще робот будет выравниваться (выполнять относительно медленные развороты), но если разнести датчики достаточно широко, то есть риск вылета с трассы, поэтому придется выполнять более «жесткие» повороты и уменьшать скорость передвижения на прямых участках. |
Следование по линии
Введение
Заставьте своего робота LEGO® MINDSTORMS® Education EV3 следовать по линии, используя режим интенсивности отраженного света датчика цвета.
Шаг 1
В ||логика:Логика||
Ящик Toolbox в разделе Conditionals вытащите ||логика: If then else||
в Workspace и поместите его в ||loops:forever||
петля.
навсегда (функция () { если правда) { } еще { } })
Шаг 2
Откройте ||логика:Логика||
Снова ящик ящика для инструментов. Из раздела Comparison вытащите ||logic:0 < 0|| Блок сравнения
и поместите его в блок ||логика:если то еще|| Блок
, заменяющий истинным
.
навсегда (функция () { если (0 < 0) { } еще { } })
Шаг 3
Откройте ||датчики:Датчики||
Ящик для инструментов. Вытащите ||сенсоры:датчик цвета света||
и поместите его во второй слот блока ||логика:0 < 0|| Блок сравнения
, заменяющий второй 0
.
навсегда (функция () { if (0 < sensor.color3.light (LightIntensityMode.Reflected)) { } еще { } })
Шаг 4
Если значение отраженного света больше 40% (белый или очень светлый), наш робот находится за линией, поэтому двигайтесь влево. В ||логика: 0 < 0|| Блок сравнения
изменить первое сравниваемое значение с 0
до 40
.
навсегда (функция () { if (40 < sensor.color3.light(LightIntensityMode.Reflected)) { } еще { } })
Шаг 5
Откройте ||двигатели:Двигатели||
Ящик для инструментов. Вытащить 2 ||двигатели:резервуарные двигатели||
блоков и поместите один из них в ||logic:if||
часть, а другая в ||логика:еще||
часть ||логика: если то еще|| Блок
.
навсегда (функция () { if (40 < sensor.color3.light(LightIntensityMode.Reflected)) { моторы.большойBC.бак(50, 50) } еще { моторы.большойBC.бак(50, 50) } })
Шаг 6
В первом ||двигатели:резервуарные двигатели||
блок в ||логика:если|| Пункт
, измените значения скорости двигателей с 50%
, 50%
на 5%
, 15%
. Это замедляет робота и направляет его влево (потому что 9Двигатель 0013 C вращается быстрее, чем двигатель B ).
навсегда (функция () { if (40 < sensor.color3.light(LightIntensityMode.Reflected)) { моторы.большойBC.бак(5, 15) } еще { моторы.большойBC.бак(50, 50) } })
Шаг 7
Во втором ||двигатели:резервуарные двигатели||
блок в ||логика:еще|| Пункт
, изменить значения скорости двигателей с 50%
, 50%
на 15%
, 5%
. Это замедляет робота и направляет его вправо (поскольку двигатель B вращается быстрее, чем двигатель C ).
навсегда (функция () { if (40 < sensor.color3.light(LightIntensityMode.Reflected)) { моторы.большойBC.бак(5, 15) } еще { моторы.большойBC.бак(15, 5) } })
Шаг 8
Используйте симулятор EV3, чтобы опробовать свой код.
Переместите ползунок под датчиком цвета, чтобы изменить интенсивность отраженного света и убедиться, что двигатели работают так, как вы ожидаете.
Шаг 9
Подключите модуль EV3 к компьютеру с помощью USB-кабеля и нажмите кнопку Download внизу экрана. Следуйте инструкциям, чтобы сохранить программу на модуль EV3.
Прикрепите датчик цвета к порту 3 модуля EV3 и прикрепите модуль к приводной базе с большими двигателями, подключенными к портам B и C. См. инструкции по сборке приводной базы с датчиком цвета в нижнем положении . Проверьте свою программу, поместив робота справа от темной толстой линии, а затем дайте ему поехать!
Изменить эту страницу на GitHub
Изменить шаблон этой страницы на GitHub
Изменить шаблон этой страницы на GitHub
Отслеживание строки и пропорциональные элементы управления (EV3) — LEGO Engineering
Целью этого задания является создание транспортного средства-робота, которое движется по прямой и избегает столкновений с препятствиями, в том числе с другими транспортными средствами!
Конструкция робота
Простой следящий за линией EV3Все, что вам нужно для простейшей версии этой задачи, — это простой двухколесный робот, такой как модель робота-педагога с датчиком цвета (называемая и используемая как световой индикатор). датчик на этом посте), расположен в передней части робота и направлен вниз.
Инструкции для модели Robot Educator находятся в буклете, который поставляется с базовым набором, и в программном обеспечении EV3.
Теория управления
Теория управления — это область техники и математики, которая особенно важна в робототехнике. Он касается того, как динамическая система с входными данными (например, робот) реагирует на обратную связь, чтобы изменить свое поведение.
Это задание представляет собой очень базовое введение в элементы управления , включая простые релейный контроль и пропорциональный контроль .
Идеи для задач
Вот подборка идей для задач и примеры решений…
1. Мягкая остановка
Можете ли вы создать робота, который плавно останавливается при виде препятствия?
Образец раствора для плавной остановки2. Безопасное расстояние следования
Что делать, если вы хотите, чтобы робот остановился перед препятствием (или следовал за другим транспортным средством на безопасном расстоянии)?
Безопасное расстояние следования – пример решенияПримечание. Множитель «2» в этом примере является пропорциональным усилением. Вам нужно будет поэкспериментировать с этим значением. Если установить слишком маленькое значение, робот не будет последовательно достигать целевого расстояния (из-за трения и/или остановки двигателей при малой мощности). Слишком высоко, и робот промахнется мимо цели и может в конечном итоге колебаться на целевом расстоянии.
Как только вы заработаете, будет весело, когда роботы будут следовать друг за другом…
Понятно, что роботы на самом деле не следуют друг за другом, и вскоре они начинают ломать строй. Особенно это заметно ближе к концу клипа.
Что нам действительно нужно, так это лучший способ удерживать роботов на линии…
3. Базовое движение по линии
Как заставить робота двигаться по линии с помощью одного светового датчика?
Вот пример программы для одного датчика освещенности с использованием импульсного управления .
Идея состоит в том, что робот будет следовать за краем линии, намеренно съезжая с него в одну сторону, а затем возвращаясь на нее в другую сторону.
Базовая строка соответствует коду образцаПримечания:
- Переключатель установлен в положение Датчик цвета > Сравнить > Интенсивность отраженного света. Почему?
- Возможно, вам потребуется настроить пороговое значение переключателя, чтобы найти значение между светлым фоном и темной линией. Используйте Port View на блоке или в программном обеспечении EV3, чтобы помочь в этом.
- Если ваш робот с трудом проходит самые крутые повороты, как вы можете настроить параметры «Перемещение бака» > «Мощность влево» / «Мощность вправо», чтобы делать еще более крутые повороты?
4. Плавное движение по линии
Как насчет более плавного движения робота по линии?
Вот пример программы для одного датчика освещенности с использованием пропорционального управления .
Гладкое следование по линии – пример решенияПримечания:
- Эта программа использует блок датчика цвета, для которого установлено значение «Измерение» > «Интенсивность отраженного света», для получения показаний освещенности, а затем передает это значение в математические блоки.
- Математические блоки настроены на вычисление следующих формул:
- Левый двигатель = a + b x (c – d)
- Правый мотор = a – b x (c – d)
- a = мощность двигателя по умолчанию
- б = усиление
- с = целевое значение
- d = показания датчика
- Разница между целевым значением и показаниями датчика (c – d) в нашей формуле называется ошибкой.
5. Интеллектуальное шоссе
Можете ли вы изменить пропорциональный робот, следующий по линии, чтобы он сохранял безопасное расстояние позади робота впереди него?
Вот пример, который сочетает в себе подход «внезапно», чтобы предотвратить наезд на препятствие, с пропорциональным движением по линии. Однако также возможно комбинировать два пропорциональных регулятора.
Интеллектуальное шоссе – пример решенияРезультат примерно такой…
Оценка
Вот возможный подход к оценке этой задачи.