Как я осваивала Quad RGB Sensor в mBlock5: от первого знакомства до точной настройки цветов

Когда впервые сталкиваешься с программированием движения по линии, кажется, что самое сложное — это написать алгоритм. Но на практике всё начинается гораздо раньше: с понимания того, как вообще работает датчик, какие блоки за него отвечают и почему робот иногда ведёт себя совершенно не так, как ожидаешь. Именно с этого я и решила начать — с изучения расширения Quad RGB Sensor в среде mBlock5.

Это расширение доступно для устройств mBot2 и CyberPi. Чтобы его подключить, нужно выбрать необходимое устройство, нажать кнопку «+Расширения», затем в разделе расширений для устройств найти Quad RGB Sensor и добавить его. После этого в рабочей области появляется целый набор новых команд, которые открывают доступ к возможностям четырёхканального датчика.

Первое, что я сделала, — внимательно изучила, какие именно блоки появились. Оказалось, что датчик умеет распознавать не только конкретные цвета, но и оттенки серого. Если с названиями цветов из выпадающего списка всё более-менее понятно, то для работы с оттенками серого нужно выбрать режим «линия» или «фон». Это различие стало для меня важным моментом: датчик не просто «видит» цвет, а интерпретирует его в зависимости от контекста — находится ли он над линией или над фоновым покрытием.

Первая программа: остановка на красном цвете

Чтобы проверить базовые возможности, я собрала несложную программу. Идея была такой: робот движется вперёд, пока оба центральных датчика L1 и R1 не обнаружат красный цвет. Как только оба выдают значение 1, робот должен остановиться. Никаких сложных условий — просто проверка на совпадение двух сигналов.

Важный нюанс: цифра 1 в блоке «датчик QUAD RGB» обозначает номер датчика, подключённого к контроллеру. Поскольку таких датчиков к роботу можно подключить несколько, номер позволяет выбрать, какой именно из них мы программируем в данный момент. Это удобно, когда нужно развести задачи между разными сенсорами.

После загрузки программы в контроллер я установила робота на комплектное поле с цветными вставками, выставила его на линию и запустила кнопкой А. Если робот был поставлен ровно и смог добраться до красной полосы, он действительно останавливался. Я пробовала запускать его несколько раз, в том числе перпендикулярно красной линии, чтобы понять, насколько стабильно срабатывает детекция.

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

Например, можно собрать условие, при котором достаточно сигнала от одного из двух датчиков:

А если присмотреться к вариантам блоков, можно найти ещё более простое решение, которое делает код лаконичнее и понятнее.

Неожиданное поведение с розовым цветом

В ходе экспериментов я решила проверить, как робот отреагирует на разные оттенки красного. Оказалось, что на одни он реагирует уверенно, а на другие — нет. Например, пазлы с линиями, которые визуально можно было бы назвать красноватыми, робот красными считать отказался. И действительно, если присмотреться, они скорее розовые, чем красные. Это наглядно показало, что восприятие цвета датчиком отличается от человеческого.

Датчик способен обнаруживать цвета независимо от цвета подсветки. Тем не менее, ради интереса я попробовала поиграть с заполняющим цветом — это можно сделать либо через специальный блок, либо длинным нажатием на кнопку самого датчика. Однако в случае с розовым пазлом этот трюк не помог, и робот по-прежнему его игнорировал.

Возник закономерный вопрос: что делать дальше? Я решила пойти от данных — получить значения, которые датчик выдаёт на конкретном цвете, и уже отталкиваться от них.

Получение значений датчика и поиск нужного цвета

RGB-датчик умеет выводить числовые значения на основе обнаруженного цвета или оттенков серого. Для этого используются блоки-отчёты. В интерактивном режиме я выводила значение с датчика в виде переменной и наблюдала за изменениями. Например, на красной линии датчик выдавал значение 6.

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

Однако в моём случае и голубой фон пазла, и розовый давали одно и то же значение — 15. Это означало, что простым числовым значением обойтись не получится. Нужно было искать другой способ, который позволил бы выделить именно розовый цвет.

Среди блоков я нашла вариант определения цвета по RGB-значениям. Он позволяет задать конкретные параметры и, что особенно важно, указать чувствительность — то есть допуск, в пределах которого значения будут считаться подходящими.

Для красного цвета, например, можно задать определённые RGB-координаты:

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

Стало ясно, что подбор значений вручную — дело небыстрое. Конечно, можно поручить эту задачу ученику в рамках проекта: предложить автоматизировать или упростить процедуру подбора параметров для пользовательского цвета. Но для себя я выбрала более практичный путь — использовать графический редактор, который показывает RGB-цвета на фотографии.

Я сфотографировала поле, перенесла снимок в редактор и с помощью инструмента «пипетка» определила точные значения цвета для розового фона.

Подставила полученные значения в блок — и результат не заставил себя ждать.

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

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

Комментарии

?
9 + 16 = ?