Автор:
Вязовов Сергей Михайлович, заведующий кафедрой информатики МАОУ "Лицей №14 имени Заслуженного учител Российской Федерации А.М.Кузьмина" г.Тамбова
1. ИСПОЛЬЗОВАНИЕ УЛЬТРАЗВУКОВОГО ДАТЧИКА ДЛЯ ОБНАРУЖЕНИЯ ОБЪЕКТОВ
Ультразвуковой датчик часто используется для обнаружения препятствия во время движения.
Для понимания сути вопроса рассмотрим задачу остановки робота в 10 сантиметрах от стены.
Реализация программы:
Настройка блока движения:
Настройка блока ожидания состояния ультразвукового датчика:
В последнем блоке задаётся отключение моторов робота.
Задачи:
- Реализуйте алгоритм работы робота, по которому, достигнув стены он разворачивается на 180°, и едет в течение 5 секунд в противоположном направлении.
- Реализуйте алгоритм работы робота, который движется вокруг коробки высотой 50 см.
Робот-охранник
Задача. Необходимо разработать алгоритм работы робота, охраняющего коробку, находящуюся на расстоянии не более 15 см, в соответствии с которым, как только коробку попытаются унести (расстояние от робота до коробки станет более 15 см), он должен начать издавать звуковой сигнал.
Реализация:
Решение задачи заключается в следующем:
В бесконечном цикле происходит выполнение двух блоков:
- Блок «Wait» (ожидание состояния ультразвукового датчика) с параметром «Until» расстояние до объекта («Distans») больше 15 см.
- Блок «Sound» (звуковой сигнал).
Как только расстояние от робота до коробки превысит 15 см (1), проигрываем звук (2) и снова переходим к ожиданию состояния ультразвукового датчика (1). Если объект на место не вернули, то снова издаём звуковой сигнал (2). И так до «бесконечности».
Задача:
В нашей программе робот охраняет объект, который находит в зоне его видимости. Сконструируйте механизм, который будет вращать ультразвуковой датчик вокруг робота и издавать сигнал при приближении к нему другого объекта.
2. ОРГАНИЗАЦИЯ ДВИЖЕНИЯ РОБОТА ПО ТРАЕКТОРИИ
Движение по прямой
Движение по прямой в течение некоторого периода организуется при помощи блока «Move». За продолжительность движения отвечает параметр «Duration», значение которого может быть задано в градусах, в оборотах мотора вокруг своей оси, и в секундах.
Организация поворота
Если одно колесо робота вращается быстрее другого, то есть смещён ползунок мощности моторов в сторону одного из них, то робот едет не по прямой, а по дуге. Чем больше смещение ползунка мощности мотора, тем меньше радиус дуги. При полном смещении ползунка робот начинает вращаться вокруг одного колеса, что лежит в основе решения задач поворота робота на заданный угол.
Задачи:
- Организуйте движение по окружности (подберите количество оборотов, которое необходимо задать, чтобы робот описал полную окружность).
- Организуйте поворот робота на одном колесе на угол 90 градусов.
- Организуйте движение робота по периметру квадрата.
Движение робота по спирали
Идея движения по спирали заключается в том, что через одинаковые промежутки времени робот начинает двигаться по окружности всё с большим и большим радиусом.
Программное это выглядит следующим образом:
Для каждого блока движения необходимо задать параметры:
- смещение мощности моторов;
- мощность моторов;
- продолжительность движения.
Мощность моторов для всех блоков одинакова, остальные параметры плавно увеличиваются от блока к блоку.
3. ОБНАРУЖЕНИЕ ЧЁРНОЙ ЛИНИИ
Задача заключается в реализации алгоритма движения робота до чёрной линии.
Для организации движения достаточно одного блока управления моторами со значением параметра продолжительности движения «Unlimited».
Следующим блоком в программе будет блок ожидания состояния датчика освещённости (или датчика цвета). Движение будет происходить до тех пор, пока не наступит состояние, задание в параметре «Until». Значение состояния, соответствующего положению датчика над чёрной линии, подбирается экспериментальным путём и зависит от многих факторов, таких как: уровень внешней освещённости, высота датчика над чёрной линией, генерируемый датчиком свет и др.
Если программа запущена с подключенным роботом к компьютеру, то для блока ожидания данных мы сможем наблюдать текущее значение, получаемое сенсором. Это позволит наиболее точнее отладить нашу программу.
Обратите внимание, что после достижения требуемого состояния (в нашем примере – уровень отражённого света стал меньшим 35%, то есть мы достигли чёрного цвета), робот должен перейти к следующему блоку. Если его нет, робот может не остановиться и продолжить движение ещё в течении небольшого времени. Чтобы этого не случилось, можно добавить блок управление движением моторов в режиме «Stop»:
Задачи:
- Робот движется до чёрной линии. После её достижения, он останавливается на 5 секунд, после чего продолжает движение до следующей чёрной линии, затем останавливается.
- Робот движется до чёрной линии. После её достижения он разворачивается на 360̊ и продолжает движение в течении 5 секунд.
4. РАБОТА С ПЕРЕМЕННЫМИ
Создание и удаление переменных
Создать и удалить переменные можно, вызвав диалоговое окно «Edit Variables» пункта меню Edit – Define Variables.
Для использования переменных (для записи в них значения и чтения из них значения для передачи в другой блок) в программе нам понадобятся контейнеры (блок «Variables»). Они расположены в группе блоков «Data».
Передача значений сенсоров в переменную
Для того чтобы передать текущее значение считанное сенсором уровня освещённости (или сенсором цвета, работающего в режиме сенсора освещённости) в переменную EtalonLight нам понадобится блок «Light Sensor» (или «Color Sensor»), расположенные в группе блоков «Sensor» и блок «Variables» с именем переменной EtalonLight.
Для того чтобы передать значение уровня освещенности, необходимо соединить параметр «Intensity» (для Ligth Sensor) или параметр «Detected Color» (для Color Sensor) с входом «Read» блока переменной путем протаскивания мыши.
В программе это выглядит следующим образом:
Для того, чтобы данные с датчика освещённости (или датчика цвета) успели передаться в переменную, часто после блока переменой помещают блок ожидания сенсора касания. На соревнованиях такая кнопка осуществляет старт робота, а все блоки, которые расположены до неё осуществляют калибровку робота под текущие внешние факторы.
Чтение данных из переменной
Очевидно, что данные в переменную можно не только записать (Write), но и считать (Read). Считанные данные из переменной можно передать в другую переменную, передать как параметр в условие или цикл, применить к ним математические или логические операции.
- Производится передача данных (то есть запись) значения ультразвукового датчика в переменную Etalon.
- Значение переменной Etalon считывается (выход «Read») и передаётся в переменную Double (вход «Write»).
- Значение переменной Double считывается (выход «Read») и передаётся в качестве аргумента А блока «Math» с операцией «Addition», осуществляющий сложение с константным значением аргумента B.
- Результат операции сложения (Addition) передаётся, как параметр, в блок Switch.
Значение логической переменной можно использовать в качестве параметра, определяющего время работы цикла.
Рассмотрим пример, в котором цикл завершает свою работу, как только значение ультразвукового датчика становится меньше 10.
- В процессе движения робота в цикле происходит постоянно считывание ультразвуковым датчиком расстояния до объекта, которое передаётся в качестве аргумента А в блок сравнений (Compare).
- Результат сравнения текущего значения ультразвукового датчика (аргумент А) с константным значением (аргумент В) передаётся в логическую переменную Logic1 (вход «Write»).
- Текущее значение логической переменной передаются как параметр в цикл. Если это значение истинно, то цикл завершает свою работу.
Значения переменных можно передавать в значения опций моторов или датчиков.
Рассмотрим пример управления скоростью моторов с помощью переменных, на примере организации равноускоренного движение робота.
- В переменную Power записываем начальное значение, равное 10.
- В бесконечном цикле значение переменной Power передаём (выход «Write») в параметр мощности моторов (вход «Power»).
- Затем значение переменной при помощи операции Addition блока Math к значению переменной Power добавляется константное значение аргумента B, равное 10.
- Через 2 секунды возвращаемся к началу цикла (2).
5. МОДИФИКАЦИЯ АЛГОРИТМА ОБНАРУЖЕНИЯ ЧЁРНОЙ ЛИНИИ
Идея реализации программного решения состоит в том, что робота сначала помещают датчиком освещённости над чёрной линией и берут, так называемую, эталонную пробу. Это позволит избежать конфликта с изменяющимся внешним освещением и необходимостью каждый раз менять программу. А затем уже текущее значение отражённого света сравнивают с эталонной пробой.
Очевидно, что эталонную пробу придётся где-то хранить. Для этого используются переменные.
Таким образом, полная программа движения до чёрной линии с остановкой будет выглядеть таким образом:
Порядок работы программы:
- Робот помещается так, чтобы датчик освещённости был расположен над чёрной линией и запускается программа, первые два блока которой выполняют калибровку робота и значение сохраняется в переменную EtalonColor.
- Робот переносится в место старта и ожидается нажатие кнопки на датчике касания, осуществляющей старт робота.
- В нашей программе старт будет осуществлён с пятисекундной задержкой.
- Движение робота осуществляется в бесконечном цикле. Постоянно считывается текущее показание датчика и оно сравнивается с эталонным. (Блок сравнения, математический блок и блок логических операций расположены в группе блоков «Data»).
- Результаты сравнения в виде логического параметра (истина/ложь) передаются в блок выбора «Switch».
- Если результат сравнения оказался истинным, то есть текущий уровень освещённости меньше эталонного, то мы достигли чёрной линии и нужно остановить моторы.
- В противном случае мы ещё не достигли чёрной линии и нужно продолжить движение.
6. ДВИЖЕНИЕ ВДОЛЬ ЧЁРНОЙ ЛИНИИ
Рассмотрим алгоритмы движения робота вдоль чёрной линии. Эти алгоритмы основаны на понятии регуляторов.
Под регулятором будем понимать некоторое программное решение, которое управляет моторами робота, не позволяя ему покидать чёрную линию. Робот, в процессе своего движения считывает показания датчика освещённости и при их изменении изменяет мощность моторов. В результате робот постоянно поворачивает то в одну, то в другую сторону.
Пусть переменная motor – это первоначальная скорость моторов. При старте робота эта мощность одинаковая для обоих моторов. Переменная UP – это управляющее воздействие на моторы робота. Тогда, для того, чтобы робот начинал поворачивать к чёрной линии или уходить с неё, необходимо на один мотор подать мощность motor + UP, а на другой мотор motor – UP.
В теории управления существует несколько видов регуляторов. Мы рассмотрим два самых простых: релейный регулятор и пропорциональный регулятор.
Для организации любого регулятора нам понадобится правильным способом разместить робота над чёрной линией.
Для начала обратим внимание, что человек и робот видят чёрную линию по-разному. У человека границы чёрной линии и белой чёткие, а у робота размытые.
Поэтому правильным размещением робота над линией является то, когда датчик расположен на границе чёрной и белой линии.
Релейный регулятор
Пусть S – это начальное значение, полученное с датчика при калибровке робота. Если текущее значение уровня отражённого света меньше S, то это означает, что датчик сильнее сместился на чёрную линию и его надо вернуть обратно, то есть робот должен двигаться влево. Если же текущее значение стало меньше S, то робот наоборот сместился ближе к белой линии и его надо вернуть на чёрную линию, то есть он должен двигаться вправо.
Реализация алгоритма выглядит следующим образом:
Настройки блока (1):
Настройки блока (2):
Такой регулятор позволяет роботу пройти по чёрной линии, однако на сильно изогнутой линии (на слаломе в случае «Биатлона») нет плавности движения и робот постоянно теряет скорость. Поэтому данное решение в соревнованиях не применяют.
Пропорциональный регулятор
Данный регулятор позволяет применить к мощностям робота управляющее воздействие, которое вычисляется по формуле:
UP – управляющее воздействие, k – коэффициент управляющего воздействия, S – начальное значение уровня отражённого света (эталон, полученный до старта робота), Light – текущее значение уровня отражённого света.
Задача достижения плавности движения робота на максимально возможной скорости сводится к верному подбору коэффициента k управляющего воздействия.
Управляющее воздействие UP также позволяет роботу поворачивать то влево, то вправо. Если датчик сместился на чёрную линию, то разность
Light – S < 0, а если на белую, то Ligth - S > 0. То есть, мощность одного мотора увеличиваем на UP, а другого уменьшаем.
Таким образом,
motorC = motor + UP
motorB = motor – UP
Реализация алгоритма:
Пропорциональный регулятор для робота с двумя датчиками освещенности.
Управляющее воздействие в случае пропорционального регулятора с использованием двух датчиков вычисляется по формуле:
где S1 – значение левого датчика освещённости, S2 – значение правого датчика освещённости. Напомним, что вместо датчиков освещённости можно использовать датчики цвета, работающие в режиме датчиков освещённости.
Однако, датчики при калибровке могут иметь разные начальные значения, поэтому формулу можно улучшить таким образом:
где Sleft – начальное значение левого датчика, а Sright – начальное значение правого датчика