6+
Соревновательная робототехника. Программирование робота Lego «Перевозчик»

Бесплатный фрагмент - Соревновательная робототехника. Программирование робота Lego «Перевозчик»

Объем: 104 бумажных стр.

Формат: epub, fb2, pdfRead, mobi

Подробнее

Введение

Соревновательная робототехника одно из увлекательных направлений в мире детского технического творчества. Спортивный азарт побуждает находить различные пути для победы в состязании. Однако практика показала, что современные дети, как правило, как быстро зажигаются, так и быстро теряют интерес к решению задачи, особенно, когда «перестает получаться». И здесь непременно нужна помощь наставника, но надо не перестараться.

Среди различных масштабных соревновательных мероприятий по школьной робототехнике фестиваль Робофест является одним из наиболее известных, где, кроме прочих, присутствуют регламенты соревнований только для начинающих юных робототехников. Это направление «Hello, Robot». Согласно общим положениям [1], до участия в этом направлении допускаются школьники, не принимавшие участие в соревнованиях по робототехнике ранее. Таким образом, все добросовестные участники находятся более или менее в одной «весовой категории», что немаловажно.

Принимая участие в таких мероприятиях, даже на Всероссийском уровне, часто приходилось наблюдать картину, когда подавляющее большинство команд не может набрать достойных баллов во время заездов. И это лучшие команды из регионов! При этом нельзя не отметить тот факт, что были и очень сильные команды, но их мало, и, зачастую, борьба за победу идет только между ними.

Конечно, когда команда начинает конкурировать среди «чемпионов по штрафным баллам», такое не лучшим образом сказывается на спортивном духе участников и дальнейшем желании бороться и заниматься робототехникой.

Причин тому много, но одна из главных — практически нет вузовских образовательных программ для педагогов по школьной робототехнике. Педагогам, особенно начинающим, не хватает знаний, навыков, отсюда страдает должная подготовка ребят. И очень мало литературы с «ценными рецептами» от победителей.

В этой книге хотелось бы поделиться тем практическим опытом, который удалось накопить во время занятий по робототехнике в детском технопарке Стерлитамакского филиала БашГУ. Авторами в свое время были подготовлены команды, которые принимали участие в соревнованиях по направлению «Hello, Robot» Lego — Перевозчик. Ребята стали победителями на Региональном робототехническом Фестивале Робофест-Стерлитамак Республика Башкортостан и на III Окружном робототехническом Фестивале Робофест-Самара в 2018 г. Именно решению этого задания посвящен материал книги. Надеемся, что полученные знания будут читателю полезны.

I. Описание задания

Условия соревнований, в рамках направления «Hello, Robot! Lego», для старшей группы (школьники 5—6 класс) определены регламентом Всероссийского робототехнического фестиваля Робофест-2018 «Перевозчик» [1]. Ниже приведены выдержки из этого регламента.

Задача для робота: за минимальное время робот должен переместить кубики на базу в определенном порядке. Соревновательное поле представляет собой холст размерами 2400х1200 мм с белым основание и черной линией шириной 18 — 25 мм, определяющей траекторию движения робота (рис.1.1). На поле размещены две зоны. Зона «Старт» размером 250х250 мм — стартовая позиция робота, и зона «База» размером 200х200 мм предназначена для размещения перемещенных кубиков. Кубик имеет размеры 50±5мм, Вес — 50±5 гр. На двух смежных сторонах имеется цветная метка размером 40х40 мм. Цвет метки — красный, синий, зеленый, желтый, черный, белый. Также на поле вдоль траектории движения расположены 10 отметок: квадрат со стороной 55 мм для установки кубика.

Цвета меток кубика и порядок перемещения определяются в день соревнований на основе жеребьевки. Количество кубиков каждого цвета, а также их расстановка на отметках определяется Главным судьей соревнований перед началом заезда, после сдачи роботов в карантин.

Требования к роботу. Робот должен быть автономным. Размер робота на старте не превышает 250х250х250 мм. Робот стартует из зоны «Старт». До старта никакая часть робота не может выступать из зоны «Старт».

Положение цветных меток кубика относительно линии устанавливается на усмотрение участников команды. Робот должен двигаться строго по линии, перемещая кубики в зону «База». Порядок перемещения кубиков определен жеребьевкой цветов, таким образом, в первую очередь перемещаются все кубики первого цвета, затем все кубики второго цвета и т. д.

Рис.1.1. Соревновательное поле «Перевозчик»

Робот может перемещать одновременно не более двух кубиков одного цвета. При перемещении более двух кубиков одного цвета баллы не начисляются. За одновременное перемещение кубиков разного цвета, начисляется минимальный балл за каждый кубик, перемещаемый в несоответствующем жеребьевке порядке.

Время выполнения задания 120 секунд.

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

Если во время попытки робот съезжает с черной линии, т.е. оказывается всеми колесами с одной стороны линии, то он завершает свою попытку с фиксированием времени в 120 секунд и суммой набранных баллов.

В зачет принимаются суммарные результаты попыток: сумма баллов и сумма времени. Финиш робота фиксируется только после перемещения всех кубиков в зону «База» в соответствующем жеребьевке порядке.

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

Из условия можно сделать вывод, что решение этого задания не столь очевидно, как кажется на первый взгляд. Поэтому для его решения и ему подобных заданий воспользуемся методом «от простого к сложному». Пока у нас конструкция робота неизвестна, начнем решение задания с простых подзадач. Для их решения будем использовать алгоритмы, которые назовем базовыми.

II. Базовые алгоритмы

Анализ задания робота

Чтобы понять, как должно выполняться задание соревновательного регламента, воспользуемся приемом, который применяют для изучения и понимания сложных процессов. Когда логика и структура исследуемого процесса неочевидна, то его разбивают на совокупность более простых функций, а функции, в свою очередь, — на простейшие операции или работы. Такой метод называется декомпозиция.

Разобьем процесс выполнения роботом основного задания на простейшие функции. Каждая такая функция предполагает выполнение роботом одной-двух операций. Анализируя соревновательное поле (рис.1), получаем следующий список:

а) движение из зоны Старт на основную линию (основной линией будем считать кольцевую черную линию, вдоль которой расположены поля-метки для кубиков)

б) движение по основной линии

— до обнаружения кубика/кубика нужного цвета

— до перекрестка

в) движение в зону/из зоны База (если этого требует конструкция робота)

г) загрузка/выгрузка кубика

В скобках указаны дополнительные условия выполнения вышеперечисленных функций. Разберем каждую функцию более подробно.

Движение из зоны Старт на основную линию. Для реализации этой функции, необходимо выполнить две операции: сместиться с текущей позиции в зоне Старт до основной линии; выполнить поворот корпуса робота на 90 градусов влево (в нашем случае мы будем рассматривать алгоритм движение робота по траектории против часовой стрелки).

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

Движение в зону/из зоны База. Реализация данной функции зависит от конструкции робота. Если устройство выгрузки кубиков робота позволяет выполнить выгрузку непосредственно в зону База, то робот реализует эту функцию одной операцией: выгрузить кубик (и) (в нашей конструкции используется устройство выгрузки непосредственно в зону База). В противном случае количество операций увеличивается, например, один из вариантов: поворот корпусом в стону зоны База, сместиться с текущей позиции в сторону зоны База, выгрузить кубики, разворот в сторону основной линии, сместиться с текущей позиции до основной линии; выполнить поворот корпуса робота на 90 градусов вправо.

Загрузка/выгрузка кубика. Данные функции, как правило, представляют собой простейшие операции, связанные с однократным включением сервопривода устройства загрузки и/или выгрузки.

Таким образом, можно выделить следующие базовые алгоритмы, которые послужат основой для будущей программы робота «Перевозчика»:

а) прямолинейное движение робота на заданное расстояние;

б) поворот корпусом вокруг центра оси;

в) движение вдоль линии по датчикам освещенности;

г) включение среднего мотора.

Прямолинейное движение робота на заданное расстояние

Данный алгоритм позволит реализовать функции, в которых роботу необходимо преодолеть прямолинейный отрезок пути известной длины передним или задним ходом.

Известно, при прямолинейном движении за каждый оборот колеса, робот преодолевает путь, равный длине окружности колеса. Длина окружности колеса определяется по формуле S=π*D, π — постоянная, равная 3,14, D — диаметр колеса. В базовом наборе Lego EV3 45544 диаметр колеса составляет 56 мм. Тогда, длина окружности этого колеса будет 56*3,14≈176 мм. Для колеса другого диаметра длина его окружности вычисляется аналогично. Следовательно, чтобы робот преодолел отрезок пути длиной Х мм, требуется совершить (Х/S) число оборотов колес.

Составление программы начинаем с использования блока Математика в режиме Разделить. В блоке Математика делим длину отрезка пути в мм на длину окружности колеса в мм, результат отправляем на блок управления моторами, включенными в режиме Число оборотов (Рис.2.1).

Рис.2.1. Программа для движения прямо вперед/назад
на указанное расстояние

Здесь следует сразу отметить, что при программировании важным является умение структурировать программу. И учиться этому надо изначально. В данной графической среде для этих целей хорошим инструментом является Конструктор моего блока — аналог процедур и функций в традиционных языках программирования. С помощью собственных блоков диаграмму программы можно сделать компактной, функционально понятной и удобочитаемой. Поэтому с помощью пункта меню Инструменты — Конструктор моего блока создаем собственный блок для движения робота прямолинейно на указанное расстояние вперед/назад с установленной скоростью (Рис.2.2).

Для обеспечения большей точности движения, необходимо добавить блок Рулевое управление в режиме Выключить мотор. Первый параметр блока указывает расстояние в миллиметрах, второй — скорость движения. Для движения назад необходимо один из параметров ввести со знаком «–». Более подробно можно посмотреть здесь [2].

Рис. 2.2. Сборка собственного блока для прямолинейного движения
вперед/назад с установленной скоростью

Поворот корпуса робота вокруг центра осевой линии ведущих колес

Данный алгоритм поможет нам решать задачи, в которых роботу необходимо совершить произвольный поворот корпусом вокруг центральной оси. Чтобы наш робот совершил поворот на произвольный угол, надо рассчитать число оборотов, которое должны совершить большие моторы, вращая колеса робота. За каждый оборот робота вокруг своей оси, его колеса преодолевают путь, равный длине окружности, диаметром которой является колея робота. Колеей будем называть поперечное расстояние между серединами колес, закрепленных на одной оси (рис.2.3).

Рис.2.3. Определение колеи колес

При совершении роботом полного оборота вокруг своей оси (360 градусов), каждое его колесо проходит путь, равный S1=π*K, π — постоянная, равная 3,14, K — колея робота. Таким образом, чтобы найти количество оборотов, совершаемых колесами, необходимо этот путь разделить на длину окружности колеса, тогда получим: n= (π*K) / (π*D) =K/D, где D — диаметр колеса. При повороте на произвольный угол А, колеса совершают обороты равные nA= K/D*A/360.

Используя блок Математика в режиме Дополнения, составим программу для поворота корпуса робота. В параметр a впишем колею робота, b — диаметр колеса, с — значение 360. В строке формулы впишем выражение a/b/c*d, а выход блока Математика подадим на вход Обороты блока Рулевое управление как на рисунке ниже (рис.2.4). В параметр d вписываем значение угла в градусах, на который требуется совершить поворот корпусом робота.

Следует обратить внимание на следующие факторы. Точность поворота зависит от скорости, чем выше скорость, тем ниже точность. Поскольку ширина колес робота отлична от нуля, то при совершении маневра, «пятно» контакта колес с поверхностью может меняться, а измеренная «идеальная» колея может отличаться от реальной. Поэтому при тестировании значение в параметре a требуется подкорректировать исходя из эксперимента.

Рис.2.4. Программа для поворота корпуса робота вокруг центра осевой линии ведущих колес на указанный угол

Для удобства использования, будет предпочтительнее для данного действия создать собственный программный блок (рис.2.5). Более подробное описание изложено в [3].

Рис.2.5. Сборка собственного блока для поворота робота направо/налево на указанный угол в градусах с установленной скоростью

Движение вдоль черной линии по двум датчикам освещенности

В различных источниках описано много различных программных решений для реализации данной функции. На наш взгляд наиболее предпочтительным будет воспользоваться пропорциональным регулятором. Это автоматический регулятор, который позволяет задавать управляющие воздействия на моторы (тормозить один мотор и ускорять второй мотор) с силой, пропорциональной величине отклонения робота от следуемой линии. Разность скоростей моторов рассчитывается как разность требуемого и текущего положения, умноженная на неотрицательный коэффициент. Чем больший коэффициент буден задан, тем быстрее будет происходить возвращение робота на требуемую траекторию, но движения при этом станут более резкими и зигзагообразными.

Пропорциональный регулятор прост и понятен в программном исполнении. С помощью него можно легко добиться ровного, «без мотаний» движения робота. К тому же школьникам нетрудно разобраться в принципе его действия, а это важно. От релейных алгоритмов сразу откажемся, поскольку с помощью них трудно обеспечить стабильно ровное движение вдоль черной линии. ПИД-регулятор (пропорционально-интегрально-дифференциальный) в этой книге мы описывать не будем, так как категория, которую мы рассматриваем, для детей, начинающих изучать робототехнику. Поэтому авторы считают, что изложение на данном этапе смысла и значения интегральной и дифференциальной составляющей излишне. А поскольку соревнование для детей, то и используемые алгоритмы должны быть доступны пониманию ребенка данного возраста.

Рассмотрим кратко работу пропорционального регулятора для нашей задачи. Ниже приведен один из его программных вариантов для движения вдоль черной линии по двум датчикам освещенности (рис.2.6). Считывая в процессе движения показания датчиков освещенности, робот вычисляет разность их показаний. Эта разность называется ошибкой. Если ошибка нулевая: датчики показывают одинаковые значения, то робот движется прямо. Если ошибка положительная или отрицательная, это значит, что робот наезжает одним из датчиков на черную линию, то полученное значение ошибки выправляет траекторию движения робота, воздействуя через параметр Рулевое управление. Чтобы можно было регулировать силу управляющего воздействия, ошибку умножают на некоторый коэффициент с ≠ 0, значение которого подбирается экспериментально. Следует отметить, что мощность в блоке Рулевое управление также подбираются экспериментально. Значения управляемого коэффициента и мощности должны быть такими, чтобы робот уверенно «держал линию» с максимально возможной скоростью на тестируемом участке траектории.

Рис.2.6. Программа движения вдоль черной линии по двум датчикам освещенности (пропорциональный регулятор)

На практике часто бывает, что используемые в конструкции робота датчики, при одинаковых условиях, показывают разные значения. Иногда расхождение может достигать 40%. Робот в таком случае, выполняя движение вдоль черной линии, одним датчиком будет постоянно наезжать на черную линию, тем самым компенсируя излишнюю яркость отраженного света. Несмотря на то, что движение робота будет ровным, при виражах в одну из сторон, робот будет норовить «слетать с линии», так как управляющего воздействия в этой ситуации может не хватить. Обычно в литературе [4] в таких случаях советуют выравнивать показатели датчиков путем введения дополнительного слагаемого, компенсирующего разницу показаний. Формула в блоке Математика (рис.2.6) в этом случае запишется следующим образом:

(a+t-b) *c или (a- (t+b)) *c,

где t — разность показаний датчиков освещенности на белом поле.

На взгляд авторов, это не совсем правильный подход, особенно если разница будет большой. При «наезде» обоими датчиками на черную линию, компенсирующее слагаемое никуда не денется, а существенно отличная от нуля разница может возникнуть и робот в этой ситуации может заложить вираж. Логичнее в этом случае использовать не слагаемое, а компенсирующий множитель больше единицы (рис.2.7). С помощью этого множителя, «менее яркий» датчик можно подтянуть к значениям «более яркого» датчика.

Значение множителя определяется как отношение показаний «более яркого» датчика к «менее яркому» датчику. Теперь при одинаковых условиях для датчиков, управляющее воздействие будет более симметричным по отношению к траектории черной линии.

Рис.2.7. Модифицированная программа движения вдоль черной линии по двум датчикам освещенности (пропорциональный регулятор)

Настройка и калибровка датчиков

Стабильная работа программы движения вдоль черной линии, сильно зависит от условий внешнего освещения. Часто на практике хорошо настроенная программа в «домашних условиях» дает сбои на соревновательных мероприятиях. Как правило, проблема в том, что при различных условиях внешнего освещения, датчики освещенности получают разную засветку и показывают, соответственно, отличающиеся от «домашних условий», значения параметров, которые используются для движения вдоль черной линии. В свою очередь, это проявляется в новых «виражах» робота, потери линии и т.д., что оказывает негативное воздействие на выполнении основного задания робота. В результате приходится заниматься трудоемкой и долговременной настройкой всей программы робота, путем подбора множества частных параметров.

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

Первое, на что надо обратить внимание, это высота установки датчиков и расстояние между ними. Расстояние, в нашем случае, будет определяться шириной черной линии. Высота определяется конструктивными особенностями крепления датчиков к корпусу робота и должна соответствовать расстоянию 10—15 мм от поверхности поля. При этом желательно сохранить ориентацию датчиков к поверхности поля под прямым углом.

Рис.2.8. Выбор режима отображения показаний датчиков освещенности во вкладке «Просмотр портов»

Второе заключается в проверке показаний датчиков света в режиме «Яркость отраженного света». Робот устанавливается на поле так, чтобы под датчиками находился участок с белым покрытием. Затем, на «Странице аппаратных средств» среды программирования во вкладке «Просмотр портов», выбираем режим отображения показаний датчиков, как на рисунке 2.8. Обычно этот режим включен по умолчанию при первом включении контроллера EV3.

Изучив показания датчиков, можно заметить их значения могут значительно отличаться друг от друга. Если разница показаний значительно больше 10%, при наличии в распоряжение других датчиков, желательно подобрать пару, которая будет отображать близкие по значениям показания. Добившись наилучшего результата, запускаем программу калибровки по верхней границе, приведенной на рис. 2.9.

Рис.2.9. Программа калибровки датчиков освещенности
по верхней границе

После калибровки самый яркий датчик будет показывать значение близкое к 100. Для второго, если его значения заметно меньше, подбираем компенсирующий множитель. Например, для датчиков с показаниями 100 и 80, компенсирующий множитель для менее яркого будет 100/80=1,25.

Таким образом, если программа робота была «дома» отлажена после калибровки датчиков, значит в «гостях», а там условия освещения будут другие, после калибровки под новые условия и материал покрытия поля, программа в теории должна работать как дома. Экспериментально авторами это тоже подтвердилось.

III. Программирование мобильной платформы

Выбор и сборка мобильной платформы

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

Прежде чем приступить к разработке программы для робота «Перевозчика», необходимо сначала провести конструирование и сборку мобильной платформы. Основа мобильной платформы в дальнейшем может послужить для разработки будущей конструкции «Перевозчика». Для начала на мобильной платформе будем тестировать и реализовывать работу отдельных функций робота.

Мобильную платформу предпочтительнее строить на колесном приводе. В качестве примера может послужить робоплатформа из базового набора Lego EV3 или любая другая. На рис. 3.1 представлены альтернативные варианты мобильных платформ.

При конструировании мобильной платформы рекомендуется придерживаться следующие критериев:

— привод колесный;

— основной вес распределен на ведущие колеса;

— крепление датчиков света для движения по линии должно допускать некоторую регулировку по вертикали и горизонтали (по ходу движения робота).

Рис.3.1. Варианты мобильных платформ EV3 и NXT

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

После сборки мобильной платформы можно протестировать работу программ, которые мы рассмотрели выше.

Программирование мобильных функций робота

В разделе Базовые алгоритмы мы привели и описали список простейших функций робота «Перевозчика», которые необходимы для выполнения основного задания. Опираясь на Базовые блоки, которые были составлены в том же разделе, рассмотрим реализацию каждой функции. Сразу следует отметить, что вариант реализации, представленный в данной книге не единственный. Рассмотрим один из вариантов программной реализации функций робота «Перевозчика».

Итак, для выполнения движение из зоны Старт на основную линию воспользуемся последовательностью из двух собственных блоков Move и Rotate. Необходимо подобрать параметры скорость, расстояние и угол поворота таким образом, чтобы при выполнении этой программы корпус робота был ориентирован вдоль основной линии движения. При это линия должна находиться между датчиками света. Для компактности программного кода с помощью пункта меню Инструменты — Конструктор моего блока создаем собственный блок для выезда из зоны Старт (Рис. 3.2).

Рис.3.2. Пример сборки собственного блока для выезда
из зоны Старт на основную линию

Реализация функции движения по основной линии не так очевидна, как кажется на первый взгляд. При попытке запустить робота по алгоритму пропорциональный регулятор обнаружится, что робот не всегда может пройти повороты под прямым углом. Увеличение же значения управляющего коэффициента приводит к осцилляции робота на прямом участке линии, что для нашей задачи недопустимо. Одно из решений — это установка третьего датчика, с помощью которого можно отследить повороты. Такой подход оказался преобладающим у многих участников соревнований. Мы предлагаем несколько иное решение, которое не требует использование дополнительных датчиков и позволит один датчик сэкономить.

Итак, для уверенного движения вдоль линии (движемся против часовой стрелки) рекомендуется трассу разбить на три участка. Два первых протяженных участка — это движение с текущей позиции робота (например, между зонами Старт и База) до поворота под прямым углом. Таких поворотов два и для движения на обоих участках будем использовать одинаковый программный код. Третий участок — это движение от второго поворота до перекрестка с линией «Старт-База».

Рис.3.3. Пример сборки собственного блока для движения вдоль
черной линии до поворота под прямым углом

На рис.3.3. представлен пример программного кода для движения вдоль линии до поворота под прямым углом. Поскольку мы используем только два датчика освещенности, то простое прерывание цикла по показаниям левого датчика (в нашем случае датчик на 2-м порту) к стабильному выполнению роботом данной функции не приведет. Робот будет время от времени ошибаться на криволинейных участках трассы и «думать», что там поворот. Чтобы избежать таких ошибок, мы эту проверку отсрочим до нужного нам времени. Для этого запустим вместе с циклом движения параллельную ветку. Поставим в ней блок задержки по времени, чтобы исключить ложное срабатывание условия выхода из цикла «02». Время задержки определяем экспериментально, граничное значение которого наступает, когда робот находится на прямолинейном участке трассы на малом расстоянии до прямоугольного поворота. Таким образом, робот не замечает криволинейных участков трассы проходит их без ошибок.

Если скорость движения робота изменилась, время задержки вновь подбирается экспериментально, оно необходимо, чтобы робот прошел криволинейный участок трассы, не запуская работу цикла «02». Вместо параметра времени можно также выставить задержку по датчику вращения оборотов большого сервопривода, не забыв перед этим сделать сброс датчика оборотов. После того как отработает блок задержки, запустится цикл «02», где условием выхода будет резкое изменение показание левого датчика освещенности. Затем блок безусловного прерывания цикла остановит цикл «01» — движение вдоль черной линии прекратится.

В результате мы получаем программный код, который позволяет нам добиться от робота уверенного и ровного движения вдоль черной линии до нужного поворота. Используя конструктор собственных блоков, создадим свой блок для проезда данного участка трассы. Первый параметр является множитель, компенсирующим разницу показаний датчиков, второй — скорость движения, третий — полуторакратное показание левого датчика освещенности на черной линии (определяется экспериментально). В нашем случае это значение равно 10, так как на черной линии датчик давал значения от 5 до 7. Так как участок трассы до второго поворота с алгоритмической точки зрения принципиально ничем не отличается, то для движения робота по нему можно использовать полученный ранее блок.

Заключительный участок трассы от второго поворота до перекрестка с линией «Старт-База» отработаем с помощью программы, представленной на рис. 3.4. Движение робота вдоль черной линии по двум датчикам освещенности до перекрестка в этом случае будет прерываться при одновременном провале показаний яркости отраженного света. Параметр с в блоке Математика в основном цикле регулятора подбирается экспериментально. В конструкте собственного блока формируем два входящих параметра: первый определяет порог яркости отраженного света датчиков на черной линии, второй — скорость движения вдоль линии.

Рис.3.4. Пример сборки собственного блока для движения
вдоль черной линии до перекрестка

Таким образом, используя полученные блоки, мы можем отладить на соревновательном поле любую мобильную платформу, которая станет основой для робота «Перевозчика». Окончательный вариант программы для проезда роботом всей трассы по кругу можно составить, собрав блоки в последовательности, представленной на рис. 3.5.

Первые три блока дублируются для проезда вдоль линии до поворота под прямым углом углового, последний блок — вдоль линии до перекрестка. Несложно добавить сюда блок выезда из зоны Старт и протестировать движение выбранной робоплатформы в полном объеме.

Рис.3.5. Сборка блоков для проезда трассы по кругу

Отдельно рассматривать алгоритм движения робота в/из зоны База не будем, так как принципиально нового в нем ничего нет. В дальнейшем, программа будет строиться исходя из конструкции робота, позволяющей осуществить выгрузку кубиков в зону База при нахождении робота на основной линии. При необходимости, читатель сможет самостоятельно, используя приведенные выше блоки, реализовать программу для движения робота к зоне и из зоны База.

IV. Конструктивные особенности робота «Перевозчика»

Общие положения и требования к роботу

Согласно регламенту соревнований [1] конструкция робота ограничена размерами 250х250х250 мм и наличием только одного контроллера. Анализируя вышеописанный список функций робота, несложно предположить, что в конструкции нам потребуются следующие минимальный набор модулей:

1) большие сервоприводы — 2 ед. для реализации мобильных функций робота;

2) средний мотор — минимум 1 ед. для устройства загрузки/выгрузки кубиков;

3) датчик освещенности — 2 ед. для управления движением вдоль черной линии, 1 ед. для обнаружения кубика и определения цвета метки.

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

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

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

И последнее, на что требуется обратить внимание — это распределение веса конструкции между опорными колесами. Робот может получиться асимметричным, и чтобы он лучше управлялся в ходе движения, желательно, чтобы ведущие колеса были нагружены примерно одинаково. Не стоит также излишним весом нагружать ведомое колесо (обычно это опорный шарик), так как при совершении поворотов ведущие колеса будут проскальзывать, а корпус робота будет совершать неточные повороты. Естественно это, в свою очередь, приведет на каком-либо этапе к ошибкам исполнения задания.

Проектирование и сборка устройства захвата кубика

Для выполнения основной задачи по транспортировке кубиков в зону База на робоплатформу необходимо установить устройство захвата, удержания и выгрузки кубика. Прежде чем приступить к конструированию и сборке, стоит определиться с функционалом устройства.

Во-первых, насколько позволяет конструкция робоплатформы выполнить захват, транспортировку и выгрузку одного или двух кубиков. Насколько усложнится конструкция робота при транспортировке двух кубиков? Возможно, потребуются дополнительно конструктивные решения по размещению кубиков на момент погрузки второго кубика, транспортировке одновременно двух кубиков и т. д.

Во-вторых, каким образом будет реализован алгоритм погрузки кубиков: в движении или с остановкой робота? Погрузка в движении будет более сложной в настройке и программировании, зато на нее будет меньше тратиться времени. Исходя из принятого решения, будет определяться конструкционная схема устройства захвата кубика.

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

Рассмотрим пару конструкционных схем, в зависимости от количества одновременно транспортируемых кубиков и алгоритма погрузки кубика.

Транспортировка одного кубика, функция захвата кубика выполняется с остановкой движения робота. Упрощенный алгоритм работы робота по шагам можно записать следующим образом:

Рис.4.1. Конструкционная схема 1

— Привести устройство захвата в положение «Готов к захвату»;

— Двигаться вдоль линии до кубика нужного цвета;

— Остановиться;

— Привести в действие устройство захвата в положение «Осуществил захват»;

— Двигаться до зоны База;

— Выгрузить кубик

— Повторить, пока не будут вывезены все кубики данного цвета

Учитывая ограничения по размерам робота, конструкция в стартовой зоне не должна выходить за габариты 250 мм. Для реализации такого алгоритма может быть использовано, например, следующее схематическое решение, представленное на рис.4.1. Работу данной конструкционной схемы можно посмотреть здесь [5].

Транспортировка одного кубика, функция захвата кубика осуществляется в движении. Упрощенный алгоритм работы представлен ниже:

Рис.4.2. Конструкционная схема 2

— Двигаться вдоль линии до кубика нужного цвета;

— При обнаружении кубика привести устройство захвата в положение «Готов к захвату»;

— Привести в действие устройство захвата в положение «Осуществил захват»;

— Двигаться до зоны База;

— Выгрузить кубик

— Повторить, пока не будут вывезены все кубики данного цвета

Поскольку функцию загрузки кубика необходимо произвести в движении, то здесь к геометрической точности обнаружения кубика требования выше, иначе в случае ошибки, устройство захвата может сработать некорректно. Схема механики робота для данного алгоритма на рис.4.2. Робот с данным конструкционным решением представлен в [6].

В данной работе, в Приложении 2 представлена схема сборки робота «Перевозчика», отвечающего конструкционной схеме 1 (рис.4.1.). Данный робот перевозит кубики по одному. Основной вес робота распределен на ведущие колеса. При этом робот обладает достаточно большой колеей, что позволяет более точно выполнять повороты корпусом. Дальнейшее изложение по программированию робота «Перевозчика» будет проводиться с опорой на данную конструкцию.

V. Разработка программы

Построение алгоритма выполнения задания робота «Перевозчика»

Прежде чем приступить к дальнейшей разработке программы робота «Перевозчика», необходимо иметь некоторое формальное представление алгоритма, по которому робот будет выполнять задание. Для формальной записи алгоритма можно воспользоваться любым удобным и понятным способом. Это может быть произвольная графическая нотация или текстовое изложение. Ниже предложен один из алгоритмов в текстовом изложении. Авторы посчитали, что использование общепринятых графических нотаций для учащихся 5—6 классов преждевременно и требует от учащихся дополнительных знаний.

Опираясь на перечень функций, который мы привели в разделе Базовые алгоритмы, построим алгоритм выполнения задания нашим роботом. Согласно формулировке задания [1], сначала составим логическую последовательность из функций для перевозки одного кубика. Робот находится в зоне Старт, получаем следующее:

1. движение из зоны Старт на основную линию

2. движение по основной линии до обнаружения кубика нужного цвета

3. загрузка кубика

4. движение по основной линии до перекрестка

5. движение в зону База (если этого требует конструкция робота)

6. выгрузка кубика

7. движение из зоны База (если этого требует конструкция робота)

Нетрудно заметить, что перевозка n-кубиков потребует повторения п.п. 2—7 в алгоритме n раз. Поскольку изначально программе робота неизвестно, сколько кубиков каждого цвета необходимо перевезти, следует предусмотреть способ подсчета и хранения текущего числа кубиков. В этом случае функцию «движение по основной линии до перекрестка» преобразуем в функцию «движение по основной линии до перекрестка с обнаружением и подсчетом кубиков нужного цвета». И последней строчкой добавится логическая функция:

8. Уменьшить число кубиков на 1. Если число кубиков больше 0, повторить п.п.2—7.

Далее, разбивая каждую функцию на отдельные операции с учетом условий их выполнения, формируем уточненный алгоритм задания робота «Перевозчика». Ниже приведен текст этого алгоритма.


Начало

{выезд из зоны Старт}

Двигаться на расстояние

Поворот на 90 влево

{модуль перевозки кубиков меткой Цвет1}

Метка=Цвет1 // метке присваиваем номер цвета

Цикл 1 // запускаем цикл по кубикам с меткой Цвет1

K=0 // число кубиков

Цикл2 Двигаться по линии

Если1 кубик // если обнаружили кубик

Если2 Метка=Цвет1 // Проверка Цвета

Если3 k <1 //если едем без кубика

// для погрузки 2-х кубиков, условие k <2

Погрузить кубик

Inc (k) // увеличиваем число кубиков на 1

Иначе3

Inc (k) // считаем число кубиков

Конец Если3

Конец Если2

Конец Если1

Конец Цикл 2 Двигаться по линии // прекращение поиска кубиков

Двигаться по линии до перекрестка База // движение до перекрестка Старт-

Выгрузить кубик

Dec (k) // Уменьшить число кубиков на 1

// для 2-х кубиков k=k-2

Если4 k=0 // если кубики кончились

// для 2-х кубиков условие k <=0

Прервать Цикл 1

Иначе4

k=0

Конец Если4

Конец Цикл1

{модуль перевозки кубиков меткой Цвет2}

Метка=Цвет2 // метке присваиваем номер цвета

Цикл 1 // запускаем цикл по кубикам с меткой Цвет2

Конец Цикл1

Конец


Таким образом, получаем простой и понятный в использовании алгоритм. Для того чтобы настроить порядок перевозки кубиков, достаточно продублировать модули перевозки кубиков, задав в качестве параметра цвета меток кубиков в требуемой очередности. Алгоритм легко трансформируется для перевозки кубиков по два за один круг. Стоит отметить, что приведенный выше алгоритм не единственный, с помощью которого робот может выполнить перевозку кубиков.

Программирование основных функций робота

В разделе Программирование мобильной платформы мы рассмотрели возможности программной реализации функций робота, связанных с задачами движения по соревновательному полю. Чтобы приступить к программированию и отладке основных функций робота, необходимо иметь под рукой его конструкцию. Для дальнейшего ознакомления с материалом, авторы предлагают выполнить сборку робота по инструкции в Приложении 2, либо использовать свою аналогичную конструкцию.

Рассмотрим задачу по обнаружению кубика. При этом пока не будем ставить задачу с определением цвета метки кубика. Исходя из алгоритма, представленного выше, функция по обнаружению кубика должна быть реализована совместно с функций движения робота вдоль черной линии (рис.3.3).

Для обнаружения кубика будем использовать дополнительный датчик освещенности, подключенный к порту №1 в режиме определения цвета. Если в зоне видимости датчика кубика нет, то датчик как правило возвращает черный цвет — код «1» или неопределенный цвет — код «0». На рис.5.1. представлен программный блок searchCube, при работе которого робот будет издавать серию звуковых сигналов, пока датчик освещенности будет облучать обращенную к нему грань кубика.

Бесплатный фрагмент закончился.

Купите книгу, чтобы продолжить чтение.