Цветные перекрёстки
Теория
Сегодня мы рассмотрим с вами задачу с цветными перекрёстками. Условие: робот должен проехать по линии, но на перекрёстках, помеченных разными цветами, он должен повернуть в направлении соответствующем цвету перекрёстка. Рассмотрим пример с двумя цветами, красный - поворот налево, зелёный поворот направо. Для решения этой задачи нам нужно вспомнить диапазоны красного и зелёного цветов для датчика цвета:
Таблица 1.
Цвет |
Код цвета |
R |
G |
B |
Красный |
3028 |
160 |
60 |
60 |
Зелёный |
6037 |
60 |
120 |
70 |
Алгоритм движения по линии на меканум колёсах, не сильно отличается от алгоритма движения на двух стандартных колёсах. Исключением является лишь количество моторов и направления их вращения. Для решения задачи езды по линии мы также будем замедлять моторы с одной из сторон, когда сенсор на этой стороне будет видеть линию. Для замедления моторов составим такое - же уравнение как и для стандартных колес “(y - x) / 200”, где x - крайний сенсор, y - центральный сенсор, 200 - коэффициент для ограничения максимальной скорости.
Так же нужно решить ещё две задачи, нахождение перекрёстка и определение цвета. Чтобы найти перекрёсток, нам нужно сравнить значения со всех 3 сенсоров на датчике линии, если оно будет примерно равно, значит робот находится на перекрёстке. После заезда на перекрёсток, определяем цвет и совершаем поворот.
Практика
Разобьём задачу на несколько подзадач. Первой подзадачей, будет движение по линии. Для составления программы нам понадобятся следующие блоки:
Раздел “Модули”
- “Блок управления на 1 порту” х1
- “Вращать мотор со скоростью 50 об/мин” х4
Раздел “Сенсоры”
- “Значение s1 с датчика линии на 1 порту” х8
Раздел “Операторы”
- “ - ” х4
- “ / ” х4
Сначала составим составим уравнения для управления моторами. Общий вид уравнения представлен в теории: “(y - x) / 200”. Для 2 и 3 моторов нужно поменять направление вращения, поэтому, в их уравнении делим на -200. Для левых моторов (1 и 2) уравнение имеет вид “(s2 - s1) / 200” и “(s2-s1) / -200”. Чтобы составить это уравнения нужно взять блок “Значение s1 с датчика линии на 1 порту” вставить его в блок “ - ” в качестве первого аргумента и заменить s1 на s2, также не забыть указать порт. В качестве второго аргумента ставим такой же блок, но оставляем параметр s1. Далее блок “ - ” вставляем в качестве первого аргумента в блок “ / ”, вторым аргументом вписываем значение 200. Для правых моторов (3 и 4), копируем две получившиеся конструкции и заменяем второй аргумент блока " - " на s3.
Далее устанавливаем блоки "Вращать мотор 1 со скоростью 50 об/мин" внутрь блока "Блок управления на 1 порту", меняем номера моторов с 1 до 4, а порт блока управления на тот к которому подключен блок стабилизатора. В качестве скоростей ставим конструкции составленные ранее, для 1 мотора “(s2 - s1) / 200”, для 2 мотора “(s2 - s1) / -200”, для 3 мотора “(s2 - s3) / -200”, для 4 мотора “(s2 - s3) / 200”.
Далее составим программу для поворота направо, эта программа будет вращать два мотора с одной стороны, на заданный градус, таким образом будет осуществляться поворот. Для этой программы, нам понадобятся следующие блоки:
Раздел “Модули”
- “Блок управления на 1 порту” х1
- “Вращать 1 мотор со скоростью 50 об/мин” х2
- “Мотор 1 повернуть на 360 градусов со скоростью 50 об/мин” х2
- “Ждать остановки 1 мотора на 1 порту” х2
Внутрь блока "Блок управления на 1 порту", ставим два блока “Вращать 1 мотор со скоростью 50 об/мин” и два блока “Мотор 1 повернуть на 360 градусов со скоростью 50 об/мин”. У блоков “Вращать 1 мотор со скоростью 50 об/мин”, ставим 1 и 2 моторы, и скорость равной 0. У блоков “Мотор 1 повернуть на 360 градусов со скоростью 50 об/мин”, ставим 3 и 4 моторы, для 3 мотора ставим -615 градусов и скорость -10 об/мин, а для 4 мотора 450 градусов и скорость 10 об/мин. Подробнее о значениях градуса поворота, можно изучить в статье "Лабиринт".
Аналогичную программу составляем для поворота налево. Но для поворота налево нужно внести некоторые изменения. Нам нужно поменять местами 2 и 3 моторы и 1 и 4 моторы.
Далее составим программу для короткого проезда вперед. Данная программа необходима в том случае, если перекрёсток не красного и не зелёного цвета, в таком случае, робот должен проехать небольшое расстояние вперед, после чего продолжить движение по линии. Для этой программы, нам нужно поставить 4 блока "Мотор 1 повернуть на 360 градусов со скоростью 50 об/мин", внутрь блока "Блок управления на 1 порту". В блоках "Мотор 1 повернуть на 360 градусов со скоростью 50 об/мин" изменить мотора на 1-4 соответственно, и изменить значение градуса на 180 и скорости на 10 для 1 и 4 моторов, и -180 и скорость -10 для 2 и 3 моторов.
Теперь составим сам алгоритм для выполнения той или иной подпрограммы. Для составления данной программы нам понадобятся следующие блоки:
Раздел “События”
- “Когда контроллер запущен” х1
Раздел “Управление”
- “Всегда” х1
- “Если то Иначе” х3
Раздел “Сенсоры”
- “Проверить диапазоны порт 1 R 0 256 G 0 256 B 0 256” х2
- “Значение s1 с датчика линии на 1 порту” х4
Раздел “Операторы”
- “ < 50” х2
- “ - ” х2
- “абсолютное значение ” х2
- “ и ” х2
Начнем с условия для проверки наличия перекрёстка. При заезде на перекрёсток, значения на всех трёх сенсорах будет одинаковое, с небольшой погрешностью. Составим уравнение для проверки этого условия: "(абсолютная величина(s2-s1) < 200) и (абсолютная величина(s2-s3) < 200)". Для этого внутрь блока " - " в качестве первого аргумента ставим блок "Значение s1 с датчика линии на 1 порту", заменяя s1 на s2, а в качестве второго аргумента ставим тот же блок со значением s1. Эту конструкцию ставим внутрь блока "абсолютная величина". Далее копируем полученную конструкцию, и меняем значение второго аргумента блока " - ", с s1 на s3. После чего две эти конструкции ставим в два блока " < 50" в качестве первого аргумента. Блоки " < 50" ставим внутрь блоки " и " в качестве первого и второго аргумента, заменяя значение 50 на 200.
Далее вставляем условие для определение перекрёстка в блок "Если то Иначе". После "Если то" вставляем блок "Если то Иначе", с условием "Проверить диапазон порт 1 R 0 256 G 0 256 B 0 256", заменив диапазоны цветов в соответствии с таблицей 1, для красного цвета, с погрешностью +-10 единиц. Внутрь этого блока, после "Если то" ставим подпрограмму поворота налево.
После "Иначе", внутри второго блока 'Если то Иначе", ставим еще один блок "Если то Иначе", с условием "Проверить диапазон порт 1 R 0 256 G 0 256 B 0 256", заменив диапазоны цветов в соответствии с таблицей 1, для зелёного цвета, с погрешностью +-10 единиц. Внутрь этого блока после "Если то" ставим подпрограмму поворота направо, а после "Иначе" ставим подпрограмму проезда вперёд.
В заключении, после последнего "Иначе", ставим подпрограмму езды по линии. Далее всю конструкцию вставляем в блок "Всегда", который присоединяем к блоку "Когда контроллер запущен".
Программа для проезда цветных перекрёстков готова. В этом уроке мы научились составлять программу управления роботом на меканум колёсах для езды по линии, а также научили определять перекрёсток и его цвет, для определения направления поворота после перекрёстка.