Логотип Renics
По вашему запросу ничего не найдено =(

Цветные перекрёстки

Cодержание

Теория

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

Таблица 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 единиц. Внутрь этого блока после "Если то" ставим подпрограмму поворота направо, а после "Иначе" ставим подпрограмму проезда вперёд.

В заключении, после последнего "Иначе", ставим подпрограмму езды по линии. Далее всю конструкцию вставляем в блок "Всегда", который присоединяем к блоку "Когда контроллер запущен".

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

4.8
60
Поделиться в социальных сетях

Комментарии0