Упражнения. Питание. Диеты. Тренировки. Спорт

Чемпионат россии по робо-сумо. Международные состязания роботов — Правила — Свободная категория — Свободная категория

Привет, Geektimes!

Вступление

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

Немного о нашей команде

Существуем мы с 2014 года. Победители и призеры большинства соревнований Робофинист, Робофест, Спартакиады МФТИ и более мелких турниров, а также являемся абсолютными чемпионами России на 2016-2017 год в номинации мини-сумо.

Кто такие вообще эти роботы сумоисты?

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

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

Бывает их 4 вида:

1. Мега-сумоист
2. Мини-сумоист
3. Микро-сумоист
4. Нано-сумоист

Все отличаются не только внешне, но и внутренне.

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

Мини - приятные, небольшие роботы до 500 грамм 10 на 10 см. Не сложны в пайке, удобны в настройке и сборке. Являются самой популярной номинацией в сумо.

Микро и нано - уменьшенные копии мини. Микро 5 на 5 на 5, нано 2,5 на 2,5 на 2,5. Трудно паять и подбирать детали. Популярнее, чем мега-сумо.

Из чего они состоят?

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

Во-первых это низкая скорость. Во-вторых огромные размеры. В третьих низкая скорость отклика датчиков. А также сам контроллер оставляет желать лучшего.

Подробнее о сборке и комплектации

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

Сложнее всего (помимо программирования) спроектировать робота.

Первый этап



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

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

Второй этап



А здесь уже нанесены контроллер, драйвер, выключатели и разъем для аккумуляторов.
Останется только распечатать трассировку и перенести на текстолитовую плату, а затем пролудить дорожки.

Вот как это выглядит на готовой плате:

Готовая плата



Готовый к запуску робот:

Как видите, ничего особо сложного здесь нет. О проблемах далее.

Перейдем к программированию

Проще всего использовать контроллеры arduino или arduino-совместимые. Также, Arduino IDE нам в помощь. По стандартной схеме у робота 5 датчиков. Значит состояний может быть

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

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

Код робота

// Установка пинов для датчиков int pin_left=10; int pin_center_left=11; int pin_center_right=4; int pin_center=12; int pin_right=7; // Пины на моторы int pin_motor_left_forward=9; int pin_motor_left_back=6; int pin_motor_right_forward=3; int pin_motor_right_back=5; // Переменные для хранения результата опроса датчиков int cl,cc,cr,l,r; // Функция для опроса датчиков void GLAZ() { cl = digitalRead(pin_center_left); cc = digitalRead(pin_center); cr = digitalRead(pin_center_right); l = digitalRead(pin_left); r = digitalRead(pin_right); } // Функция движения, принимающая скорости от 0 до 255 для подачи на каждый мотор void MOVE(int a, int b) { if(a<0) { digitalWrite(pin_motor_left_forward,LOW); analogWrite(pin_motor_left_back,0-a); } else { analogWrite(pin_motor_left_forward,a); digitalWrite(pin_motor_left_back,LOW); } if(b<0) { digitalWrite(pin_motor_right_forward,LOW); analogWrite(pin_motor_right_back,0-b); } else { digitalWrite(pin_motor_right_back,LOW); analogWrite(pin_motor_right_forward,b); } } void setup() { pinMode (pin_center,INPUT);//центральный pinMode (pin_right, INPUT);//правый датчик pinMode (pin_left,INPUT);//левый датчик pinMode (pin_center_right, INPUT);//передний правый датчик pinMode (pin_center_left,INPUT);//передний левый датчик pinMode (pin_line_left, INPUT); pinMode (pin_line_right, INPUT); pinMode (pin_start,INPUT);//старт pinMode (13,OUTPUT);//старт digitalWrite(13,HIGH); pinMode (pin_motor_left_back, OUTPUT);//мотор лево назад pinMode (pin_motor_right_forward, OUTPUT);//мотор право вперед pinMode (pin_motor_right_back, OUTPUT);//мотор правый назад pinMode (pin_motor_left_forward,OUTPUT);//мотор лево вперед // ожидание сигнала к началу схватки while(!digitalRead(pin_start))continue; MOVE(200,200); } void loop() { GLAZ(); if(l && r) { if((cl + cc + cr) < 2 || !cc){ MOVE(255,255); } if(cc) { if(!cl && cr) MOVE(0-180,180); if(cl && !cr) MOVE(180,0-180); } } else if(cc + cr + cl == 3) { if(!l && r) MOVE(0-200,200); if(!r && l) MOVE(200,0-200); } else if(cc) { if(!l && !cl && cr && r) MOVE(0-150,150); if(l && cl && !cr && !r) MOVE(150,0-150); } if(!digitalRead(pin_start))while(1){MOVE(0,0);} }


Вам остаётся только совершенствовать код.

Важно!
Датчики возвращают 1, если ничего не видят, и 0, если есть препятствие.

После загрузки кода по usb робот готов соревноваться.

Стоит учесть

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

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

Также не стоит забывать про колеса. Кривые, тонкие и скользящие не подойдут, вы просто не сможете маневрировать и момента силы не хватит. Обязательно тестируйте резину.

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

Также имеет смысл делать съемные аккумуляторы, т.к. разряжается робот довольно быстро, а заряжается долго.

Список необходимых покупок:

1. Паяльник, припой, флюс (по выбору)
2. Текстолитовые платы (чтобы протравить, вам надо закрыть все дорожки, затем поместить это все в раствор перекиси водорода + лимонной кислоты + соли на несколько часов, а потом содрать, бумагу, например, под которой прятали дорожки)
3. Датчики sharp 340
4. Движки, выбирайте по вкусу, чем больше оборотов в минуту, тем лучше.
Выбирать стоит что-то из этого: polulu. (добавлено)
5. Аккумуляторы (советую брать литий-полимерные) + зарядная станция
6. Ключ (кнопка выключателя, припаивается на плату) и электрические элементы (есть на картинке с трассировкой)
7. Драйвер
8. Контроллер, для начала можно попробовать Polulu A-Star 32u4 micro и залить туда загрузчик ардуино
9. Лист металла для корпуса
10. Бурмашинка для дырок в плате
11. Пульт запуска и к нему стартовый модуль
P.S. Если что-то упустил - пишите, исправлю.

Соревнования

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

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

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

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

1. Условия состязания

1.1. Состязание проходит между двумя роботами. Цель состязания - вытолкнуть робота-противника за черную линию ринга.

1.2. Если любая часть робота касается поля за пределами черной линии, роботу засчитывается проигрыш в раунде (если используется поле в виде подиума, то проигрыш засчитывается, если любая часть робота касается поверхности вне подиума).

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

1.4. Если победитель не может быть определен способами, описанными выше, решение о победе или переигровке принимает судья состязания.

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

2. Поле

2.1. Белый круг диаметром 1 м с чёрной каёмкой толщиной в 5 см.

2.2. В круге красными полосками отмечены стартовые зоны роботов.

2.3. Красной точкой отмечен центр круга.

2.4. Поле может быть в виде подиума высотой 10 -20 мм.

3. Робот

3.1. На роботов не накладывается ограничений на использование каких либо комплектующих, кроме тех, которые запрещены существующими правилами.*

3.2.1. Во всё время состязаний:

  • Размер робота не должен превышать 250х250х250 мм.
  • Вес робота не должен превышать 1 кг.

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

3.2.3. Спор между участником и судьёй по пунктам правил 3.2. во время проверки робота, всегда решается не в пользу участника.

3.3. Робот должен быть автономным.

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

3.5. Перед матчем роботы проверяются на габариты, вес, и расстояние деталей до поля.

3.6. Конструктивные запреты:

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

Роботы, нарушающие вышеперечисленные запреты снимаются с соревнований.

3.8. Участники имеют право на оперативное конструктивное изменение робота между раундами (в т.ч. - ремонт, замена элементов питания, выбор программы и проч.), если внесенные изменения не противоречат требованиям, предъявляемых к конструкции робота и не нарушают регламентов соревнований. Время на оперативное конструктивное изменение робота контролируется судьёй, но не может превышать 1 минуту.

3.9. Между матчами разрешено изменять конструкцию и программы роботов.*

4. Проведение соревнований.

4.1. Соревнования состоят из серии матчей. Матч определяет из двух участвующих в нём роботов наиболее сильного. Матч состоит из 3 раундов по 30 секунд. Раунды проводятся подряд.*

4.2. Соревнования состоят не менее чем из двух попыток (точное число определяется оргкомитетом). Попытка - это совокупность всех матчей в которых участвует каждый робот минимум 1 раз.*

4.3. Перед первой попыткой и между попытками команды могут настраивать своего робота.

4.4. До начала попытки команды должны поместить своих роботов в область «карантина». После подтверждения судьи, что роботы соответствуют всем требованиям, соревнования могут быть начаты.*

4.5. Если при осмотре будет найдено нарушение в конструкции робота, то судья дает 3 минуты на устранение нарушения. Однако, если нарушение не будет устранено в течение этого времени, команда не сможет участвовать в состязании.

4.6. После помещения робота в «карантин» нельзя модифицировать (например: загрузить программу, поменять батарейки) или менять роботов, до конца попытки.*

4.7. Непосредственно в поединке участвуют судьи и операторы роботов – по одному из каждой команды.

4.8. После запуска роботов операторы должны отойти от поля более чем на 1 метр в течении 5 секунд.

4.9. Каждый оператор один раз во время всего матча может остановить старт раунда без штрафных санкций, но не позднее, чем за 1 секунду до окончания обратного 5-секундного отсчета. Задержка старта разрешена не более чем на 30 секунд. Задержка на большее время может быть осуществлена лишь по специальному разрешению судьи. После устранения неполадки роботы вновь устанавливаются на старт.*

4.10. Если во время раунда любая электрическая часть робота не закреплена жёстко (оторвалась или висит на проводах), то этот робот считается проигравшим в раунде.

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

4.12. Матч выигрывает робот, выигравший наибольшее количество раундов. Судья может использовать дополнительный раунд для разъяснения спорных ситуаций.

4.13. Раунд проигрывается роботом если:

  • Одна из частей робота коснулась зоны за чёрной границей ринга.
  • Если робот находится дальше от центра ринга чем робот противника. В случае если время раунда истекло и не один из роботов не вышел за границы ринга.

5. Варианты проведения соревнований

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

5.2. Уровень №1: Без манёвров. Для начинающих. Решается в основном механически.

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

5.2.2. Когда роботы установлены на стартовые позиции, судья спрашивает о готовности операторов, если оба операторы готовы запустить робота, то судья дёт сигнал на запуск роботов.

5.2.2. После сигнала на запуск роботов операторы запускают программу.

5.2.3. Роботы должны проехать по прямой и столкнуться друг с другом.

5.2.4. Роботам запрещено намерено маневрировать по рингу.

5.3. Уровень №2: Ограниченная маневренность. Требует опыта. Предусматривает возможность маневрирования по полю.

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

5.3.2. Когда роботы установлены на стартовые позиции, судья спрашивает о готовности операторов, если оба операторы готовы запустить робота, то судья даёт сигнал на запуск роботов.

5.3.3. После сигнала на запуск роботов операторы запускают программу.

5.3.4. Роботы должны проехать прямо и столкнуться друг с другом, после столкновения роботы могут маневрировать по рингу как угодно. Время от начала раунда до столкновения роботов не должно превышать 5 сек.

5.3.5. Если роботы не сталкиваются в течение 5 секунд после начала раунда, то робот из за которого, по мнению судьи, не происходит столкновения считается проигравшим в раунде.

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

5.4. Уровень №3: Повышенная манёвренность. Требует хороших умений. Вынуждает робота ориентироваться в пространстве.

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

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

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

Примеры расстановки роботов:

5.4.4. Судья выставляет роботов на стартовые позиции.*

5.4.5. По команде судьи, нажатием на стартовую кнопку, операторы запускают роботов.

6. Судейство

6.1. Оргкомитет оставляют за собой право вносить в правила состязаний любые изменения, если эти изменения не дают преимуществ одной из команд.

6.2. Контроль и подведение итогов осуществляется судейской коллегией в соответствии с приведенными правилами.

6.3. Судьи обладают всеми полномочиями на протяжении всех состязаний; все участники должны подчиняться их решениям.

6.4. Судья может использовать дополнительные раунды для разъяснения спорных ситуаций.

6.5. Если появляются какие-то возражения относительно судейства, команда имеет право в устном порядке обжаловать решение судей в Оргкомитете не позднее окончания текущего матча.

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

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

7. Правила отбора победителя

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

o Первая попытка, в которой участвуют все участники по олимпийской системе (на выбывание) до определения 3-5 (количество финалистов объявляется заранее) финалистов. Участники группируются в пары по очереди: первый со вторым, третий с четвёртым и т.д.

o Вторая попытка, в которой участвуют все участники по олимпийской системе (на выбывание) до определения 3-5 (количество финалистов объявляется заранее) финалистов. Участники группируются в пары через одного: первый с третьим, второй с четвёртым и т.д.

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

* отмеченные пункты регламента могут быть отменены или изменены оргкомитетом конкретного этапа соревнований.

Советы оргкомитету:

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

Порядок проведения.

    Соревнования состоят из серии матчей. Матч определяет, из двух участвующий в нём роботов, наиболее сильного. В зависимости от количества участников, матч состоит из 3 или 5 раундов по 30 секунд. Матч выигрывает робот выигравший большее количество раундов. Судья может использовать дополнительный раунд для разъяснения спорных ситуаций.

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

  • 6-26 участников - 5 раундов в матче, 20-40 участников - 3 раунда в матче.
  • Первая попытка в которой участвуют все участники по олимпийской системе (на выбывание) до определения 3-5(количество финалистов объявляется заранее) финалистов. Участники группируются в пары по очереди: первый со вторым, третий с четвёртым и т.д.
  • Вторая попытка в которой участвуют все участники по олимпийской системе (на выбывание) до определения 3-5(количество финалистов объявляется заранее) финалистов. Участники группируются в пары через одного: первый с третьим, второй с четвёртым и т.д.
  • В финале участвуют все финалисты предыдущих попыток и соревнуются по системе каждый с каждым. Ранжирование проводится по количеству выигранных матчей, но в начале финала считается, что все финалисты равны. В спорных ситуациях проводятся дополнительные матчи.
  • 3 раунда в матче. Перерывы между попытками 30 мин.
  • Сначала участники делятся на 4 равные группы. В первой попытке на первом поле участвуют 1 и 2 группа, а на втором поле участвует 3 и 4 группа. Каждый участник отыгрывает на своём поле по системе "каждый с каждым". При этом обеспечивается 50% встреч каждой команды с оппонентами.
  • Во второй попытке на первом поле участвуют 1 и 3 группа, а на втором поле участвует 2 и 4 группа. Каждый участник отыгрывает на своём поле по системе "каждый с каждым", без повторных встреч, проведённых в прошлой попытке. При этом обеспечивается 75% встреч каждой команды с оппонентами.
  • Третья попытка проводится при достаточном количестве времени и не является обязательной. В тртей попытке на первом поле участвуют 1 и 4 группа, а на втором поле участвует 2 и 3 группа. Каждый участник отыгрывает на своём поле по системе "каждый с каждым", без повторных встреч, проведённых в прошлых попытках. При этом обеспечивается 100% встреч каждой команды с оппонентами.
  • В финале участвуют 5-7 команд выигравших наибольшее количество матчей. Финалисты соревнуются по системе каждый с каждым. Ранжирование проводится по количеству выигранных матчей, но в начале финала считается, что все финалисты равны. В спорных ситуациях проводятся дополнительные матчи.

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

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

Расчёт времени состязаний:

Примерное время матча в 5 раундов:

~ вызов команды и проверка роботов (3 мин) + 5 * (выставление роботов (10 сек) + раунд (30 сек) = 3-4 мин.

Время состязаний T при игре каждый с каждым при N команд:

T=((N*N-1)/2)*4 мин

Пример с 10 командами:

((10*9)/2)*4 мин = 3 часа.

Пример с 10 командами по смешанной (каждый с каждым + олимпийская) системе:

((5)+(5*4)/2)*4 мин = 1 час.

Примерное Расписание для соревнований с двумя попытками, в которых участвует 20 команд:

  • 9:00 – 9:30 Регистрация команд.
  • 9:30 – 9:45 Собрание с участниками (Разъяснение правил).
  • 9:45 – 10:30 Подготовка роботов.
  • 10:30 – 11:30 Проведение 1 попытки соревнований по олимпийской системе ((10+5)*4мин=1час)
  • 11:30 – 12:00 Перерыв.
  • 12:00 – 13:00 Проведение 2 попытки соревнований по олимпийской системе ((10+5)*4мин=1час)
  • 13:00 – 14:00 Перерыв. (Проведение дополнительных матчей, если много команд попало в пятёрки лучших по результатам первых попыток)
  • 14:00 – 15:00 Финал. Каждый с каждым.
  • 15:00 – 16:00 Подведение итогов.
  • 16:00 – 17:00 Награждение.

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

Немного о нашей команде

Существуем мы с 2014 года. Победители и призеры большинства соревнований Робофинист, Робофест, Спартакиады МФТИ и более мелких турниров, а также являемся абсолютными чемпионами России на 2016-2017 год в номинации мини-сумо.

Кто такие вообще эти роботы сумоисты?

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

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

Бывает их 4 вида:

1. Мега-сумоист
2. Мини-сумоист
3. Микро-сумоист
4. Нано-сумоист

Все отличаются не только внешне, но и внутренне.

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

Мини - приятные, небольшие роботы до 500 грамм 10 на 10 см. Не сложны в пайке, удобны в настройке и сборке. Являются самой популярной номинацией в сумо.

Микро и нано - уменьшенные копии мини. Микро 5 на 5 на 5, нано 2,5 на 2,5 на 2,5. Трудно паять и подбирать детали. Популярнее, чем мега-сумо.

В чем суть робо-сумо?

Главная цель: вытолкнуть противника за пределы круглого полигона. Проигрывает тот, кто первым коснется любого объекта за его пределами. Казалось бы, что сложного в том, чтобы просто вытолкнуть противника? А сложность в том, что роботы полностью автономны и все чаще появляются новые стратегии, с которыми все сложнее бороться.

Из чего они состоят?

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

Во-первых это низкая скорость. Во-вторых огромные размеры. В третьих низкая скорость отклика датчиков. А также сам контроллер оставляет желать лучшего.

Подробнее о сборке и комплектации

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

Сложнее всего (помимо программирования) спроектировать робота.

Первый этап


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

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

Второй этап


А здесь уже нанесены контроллер, драйвер, выключатели и разъем для аккумуляторов.
Останется только распечатать трассировку и перенести на текстолитовую плату, а затем пролудить дорожки.

Вот как это выглядит на готовой плате:

Готовая плата


Готовый к запуску робот:


Как видите, ничего особо сложного здесь нет. О проблемах далее.

Перейдем к программированию

Проще всего использовать контроллеры arduino или arduino-совместимые. Также, Arduino IDE нам в помощь. По стандартной схеме у робота 5 датчиков. Значит состояний может быть

$$display$$2^5$$display$$

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

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

Код робота

// Установка пинов для датчиков int pin_left=10; int pin_center_left=11; int pin_center_right=4; int pin_center=12; int pin_right=7; // Пины на моторы int pin_motor_left_forward=9; int pin_motor_left_back=6; int pin_motor_right_forward=3; int pin_motor_right_back=5; // Переменные для хранения результата опроса датчиков int cl,cc,cr,l,r; // Функция для опроса датчиков void GLAZ() { cl = digitalRead(pin_center_left); cc = digitalRead(pin_center); cr = digitalRead(pin_center_right); l = digitalRead(pin_left); r = digitalRead(pin_right); } // Функция движения, принимающая скорости от 0 до 255 для подачи на каждый мотор void MOVE(int a, int b) { if(a<0) { digitalWrite(pin_motor_left_forward,LOW); analogWrite(pin_motor_left_back,0-a); } else { analogWrite(pin_motor_left_forward,a); digitalWrite(pin_motor_left_back,LOW); } if(b<0) { digitalWrite(pin_motor_right_forward,LOW); analogWrite(pin_motor_right_back,0-b); } else { digitalWrite(pin_motor_right_back,LOW); analogWrite(pin_motor_right_forward,b); } } void setup() { pinMode (pin_center,INPUT);//центральный pinMode (pin_right, INPUT);//правый датчик pinMode (pin_left,INPUT);//левый датчик pinMode (pin_center_right, INPUT);//передний правый датчик pinMode (pin_center_left,INPUT);//передний левый датчик pinMode (pin_line_left, INPUT); pinMode (pin_line_right, INPUT); pinMode (pin_start,INPUT);//старт pinMode (13,OUTPUT);//старт digitalWrite(13,HIGH); pinMode (pin_motor_left_back, OUTPUT);//мотор лево назад pinMode (pin_motor_right_forward, OUTPUT);//мотор право вперед pinMode (pin_motor_right_back, OUTPUT);//мотор правый назад pinMode (pin_motor_left_forward,OUTPUT);//мотор лево вперед // ожидание сигнала к началу схватки while(!digitalRead(pin_start))continue; MOVE(200,200); } void loop() { GLAZ(); if(l && r) { if((cl + cc + cr) < 2 || !cc){ MOVE(255,255); } if(cc) { if(!cl && cr) MOVE(0-180,180); if(cl && !cr) MOVE(180,0-180); } } else if(cc + cr + cl == 3) { if(!l && r) MOVE(0-200,200); if(!r && l) MOVE(200,0-200); } else if(cc) { if(!l && !cl && cr && r) MOVE(0-150,150); if(l && cl && !cr && !r) MOVE(150,0-150); } if(!digitalRead(pin_start))while(1){MOVE(0,0);} }

Вам остаётся только совершенствовать код.

Важно!
Датчики возвращают 1, если ничего не видят, и 0, если есть препятствие.

После загрузки кода по usb робот готов соревноваться.

Стоит учесть

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

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

Также не стоит забывать про колеса. Кривые, тонкие и скользящие не подойдут, вы просто не сможете маневрировать и момента силы не хватит. Обязательно тестируйте резину.

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

Также имеет смысл делать съемные аккумуляторы, т.к. разряжается робот довольно быстро, а заряжается долго.

Список необходимых покупок:

1. Паяльник, припой, флюз (по выбору)
2. Текстолитовые платы (чтобы протравить, вам надо закрыть все дорожки, затем поместить это все в раствор перекиси водорода + лимонной кислоты + соли на несколько часов, а потом содрать, бумагу, например, под которой прятали дорожки)
3. Датчики sharp 340
4. Движки, выбирайте по вкусу, чем больше оборотов в минуту, тем лучше.
5. Аккумуляторы (советую брать литий-полимерные) + зарядная станция
6. Ключ (кнопка выключателя, припаивается на плату) и электрические элементы (есть на картинке с трассировкой)
7. Драйвера
8. Контроллер, для начала можно попробовать Polulu A-Star 32u4 micro и залить туда загрузчик ардуино
9. Лист металла для корпуса
10. Бурмашинка для дырок в плате
11. Пульт запуска и к нему стартовый модуль
P.S. Если что-то упустил - пишите, исправлю.

Соревнования

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

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

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


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

Нам этом мы заканчиваем ознакомительную статью и желаем всем успехов в робототехнике, будем рады увидеть вас на соревнованиях!

Как вы думаете, все ли вы знаете о сумо? Сумо, согласно определению вики:

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

Современное профессиональное сумо сочетает в себе элементы спорта, единоборства, шоу, традиций и бизнеса.

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

Итак, робо-сумо, что это?

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

На первый взгляд, задача кажется очень простой. Но робот, должен быть автономным, то есть, после того, как оператор нажмет кнопку «СТАРТ» роботу нужно самому найти противника и атаковать его! При этом, если атака не удалась, робот не должен выехать за пределы ринга, а потом снова, искать и атаковать!

Перед конструкторами стоит ряд довольно не простых задач:

1) Ознакомиться с регламентом соревнований. Пожалуй, самая важная часть! Регламент это специальный документ, в котором разъясняются требования к конструкции робота, правилам проведения поединков, судейству, и т.д. Без знания регламента невозможно качественно подготовиться к поединку

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

3) Разработать стратегию поведения робота. Робот может быть тяжелым или легким, медленным или очень быстрым

4) Сконструировать робота. От конструкции робота зависит очень многое: вес, размер, сила тяги, устойчивость, и т.д.

5) Написать программу роботу. Программа заставляет бездушную кучку металла, пластика и резины «оживать»! Хорошая программа это 50-80% победы

6) Провести тестовые бои. Испытания в «поле»! Без них не удастся оценить и отладить робота. Чем больше тестовых боев, тем ближе команда к победе!

7) Найти и устранить недостатки конструкции и программы. Отладка программы и улучшение конструкции. Могут проводиться до бесконечности)

8) Приготовить все необходимое для соревнований. Последние приготовления: к этому моменту робот уже готов, теперь очередь приготовится конструкторам

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

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

1. Общие правила

1.1. Робот должен вытолкнуть робота-соперника за черную линию (За пределы поля).

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

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

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

1.5. Два автономных робота выставляются на ринг (круглое поле). Роботы пытаются вытолкнуть соперника за пределы ринга.

1.6. Робот, выигравший большее количество раундов, выигрывает матч.

1.7. При игре «каждый с каждым», лучшим считается робот выигравший большее количество матчей.

1.8. При большом количестве участников можно организовывать ранжирование по «олимпийской системе» (на вылет).

2. Робот

2.1. Роботы должны быть построены с использованием только деталей конструкторов ЛЕГО Перворобот (LEGO-Mindstorms)

2.2. Во время всего раунда:

Размер робота не должен превышать 25х25х25см.

Вес робота не должен превышать 1кг.

2.3. Робот, по мнению судий, намерено повреждающий других роботов, или как-либо повреждающий покрытие поля, будет дисквалифицирован на всё время состязаний.

2.4. В конструкции робота строго запрещено использовать:

Клеящие вещества.

2.5. Перед матчем роботы проверяются на габариты и вес.

2.6. Робот может иметь множество программ, из которых оператор может выбирать каждый раунд.

2.7. Между матчами разрешено изменять конструкцию и программы роботов.

3. Поле

3.1. Белый круг диаметром 1 м с чёрной каёмкой толщиной в 5 см.

3.2. В круге, красными полосками отмечены стартовые зоны роботов.

3.3. Красной точкой отмечен центр круга.

3.4. Поле размещено на подиуме высотой 16 мм.

4. Проведение Соревнований

4.1. Соревнования состоят из серии матчей. Матч определяет, из двух участвующих в нём роботов, наиболее сильного. Матч состоит из 3 раундов по 30 секунд. Матч выигрывает робот выигравший большее количество раундов. Судья может использовать дополнительный раунд для разъяснения спорных ситуаций.

4.2. Раунды проводятся подряд.

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

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

4.5. Для начинающих: После столкновения роботы не могут маневрировать по рингу.

4.6. Для опытных: После столкновения роботы могут маневрировать по рингу как угодно.

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

5. Правила отбора победителя

5.1. Если робот не двигается, не находясь в контакте с другим роботом, больше 10 сек, то он считается проигравшим в раунде.

5.2. При касании любой части робота (даже не присоединённой к роботу) за пределы чёрной каёмки, роботу засчитывается проигрыш в раунде.

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

5.4. Если победитель не может быть определен способами, описанными выше, решение о победе или переигровке принимает судья состязания.

6. Судейство

6.1. Организаторы оставляют за собой право вносить в правила состязаний любые изменения, если эти изменения не дают преимуществ одной из команд.

6.2. Контроль и подведение итогов осуществляется судейской коллегией в соответствии с приведенными правилами.

6.3. Судьи обладают всеми полномочиями на протяжении всех состязаний; все участники должны подчиняться их решениям.

6.4. Если появляются какие-то возражения относительно судейства, команда имеет право в устном порядке обжаловать решение судей в Оргкомитете не позднее окончания текущего раунда.

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

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

6.7. Судья может закончить состязание по собственному усмотрению, если робот не сможет продолжить движение в течение 10 секунд.

12.2. Конструкция робота для соревнования "Сумо".

Базовое поведение робота в "Сумо" очень похоже на поведение робота в "Кегельринге" . Роботу также необходимо найти внутри поля объект и вытолкать его за пределы круга. Различия, как водится, кроятся в деталях: теперь этот объект в свою очередь ищет нашего робота и тоже жаждет вытолкать его поскорее.

Тем не менее - сосредоточимся на своей цели: искать соперника нам по-прежнему будет помогать один из датчиков, способных определять предметы на расстоянии (инфракрасный или ультразвуковой), а своевременно определять черную границу поля будем с помощью датчика цвета. Поэтому для создания и отладки программы робота-сумоиста предлагаем вам использовать того же самого робота, которого мы подготовили для Урока №11 - Кегельринг .

Для того, чтобы защитить впереди расположенный датчик от взаимодействия с соперником, соорудим бампер и закрепим его на нашем роботе. Ниже приведены подробные инструкции для сборки, как из домашней, так и из образовательной версии конструктора Lego mindstorms EV3. Можете поэкспериментировать и придумать собственный вариант конструкции.

Lego mindstorms EV3 Home

Lego mindstorms EV3 Education

Получившийся элемент закрепим на передней балке нашего робота.

Lego mindstorms EV3 Home

Lego mindstorms EV3 Education

Наш учебный робот готов. Приступим к созданию программы робота-сумоиста. Замечательно, если у вас есть возможность отлаживать программу, используя ещё одного робота! Если же нет, то ничего страшного: можно задействовать в качестве соперника, например, радиоуправляемую модель автомобиля или те же кегли от "Кегельринга".

12.3. Создание программы для соревнования "Сумо".

Первая мысль, которая приходит в голову: использовать программу для "Кегельринга" , внеся в неё косметические изменения. Действительно, алгоритмы поведения робота в "Кегельринге" и в "Сумо" очень похожи. Они реализуют поиск объекта и выталкивание его за пределы поля. Можно загрузить в робота-сумоиста программу для "Кегельринга" , но работать такой сумоист будет не очень эффективно. Тем не менее, знания, полученные на предыдущем уроке, пригодятся нам сейчас.

Настало время загрузить в среду программирования наш проект "lessons-2" , создать в нём новую программу "lesson-12" и подключить робота к среде программирования.

Поведенческую модель робота-сумоиста можно условно разделить на две части: поиск соперника и атака соперника . Сначала займемся реализацией первой части - поиска соперника .

Подробно пропишем последовательность действий нашего робота при обнаружении соперника на поле:

  1. вращаться вокруг своей оси, пока впереди расположенный датчик не обнаружит соперника;
  2. остановиться напротив соперника.

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

Установим соперников на поле напротив друг друга, как показано на рисунке ниже.

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

На "Странице аппаратных средств" , находящейся в правом нижнем углу среды программирования, выберем вкладку "Представление порта" (Рис. 1, 2 поз. 1) и снимем показание датчика, определяющего расстояние до соперника, установив соответствующий режим отображения показаний.

В нашем случае ультразвуковой датчик в режиме "Расстояние в сантиметрах" показывает значение - 56,1 (Рис. 1 поз. 2) 57 .

Рис. 1

Инфракрасный датчик в режиме "Приближение" показывает значение - 68 (Рис. 2 поз. 2) . За пороговое значение примем число - 70 .

Рис. 2

По аналогии с "Кегельрингом" мы можем запрограммировать нахождение роботом соперника, только, чтобы немного дистанцироваться от предыдущего урока, изменим направление вращения робота на противоположное:

Ультразвуковой датчик

  1. "Зеленой палитры" "Включить" "B" установим равным -30 , значение мощности для порта "C" установим равным 30 (Рис. 3 поз.1) .
  2. Для поиска соперника используем программный блок в режиме "Ультразвуковой датчик - Сравнение - Расстояние в сантиметрах" 57 (Рис. 3 поз. 2) .
  3. выключим моторы (Рис. 3 поз. 3) .

Рис. 3

Инфракрасный датчик

  1. Для того, чтобы заставить робота вращаться вокруг своей оси, воспользуемся программным блоком "Независимое управление моторами" "Зеленой палитры" , Режим работы блока установим "Включить" , значение мощности для порта "B" установим равным -30 , значение мощности для порта "C" установим равным 30 (Рис. 4 поз.1) .
  2. Для поиска соперника воспользуемся программным блоком "Ожидание" "Оранжевой палитры" в режиме "Инфракрасный датчик - Сравнение - Приближение", с пороговым значением срабатывания датчика, равным 70 (Рис. 4 поз. 2) .
  3. После того, как робот окажется напротив соперника, используя программный блок "Независимое управление моторами" "Зеленой палитры" выключим моторы (Рис. 4 поз. 3) .

Рис. 4

На этапе отладки этого алгоритма вам придется, подбирая значения "Мощность" моторов "B" и "C" а также пороговое значение датчика, добиться от вашего робота точного обнаружения и остановки строго напротив соперника. Только после этого можно будет переходить к программной реализации алгоритма атаки.

Если поиск соперника в "Сумо" очень похож на поиск кегли в "Кегельринге" , то выталкивание соперника имеет важное отличие! Начиная атаку, первое, что необходимо сделать, это прямолинейно устремиться на максимальной мощности моторов в сторону обнаруженного соперника, проверяя датчиком цвета обнаружение границы ринга. Но ведь наш соперник тоже может двигаться! Поэтому вполне возможна ситуация, когда соперник выйдет в сторону из-под направления нашей атаки. В этом случае, наш робот, промахнувшись, будет двигаться в сторону границы ринга, теряя соперника и драгоценное время.

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

Приступим к поэтапной реализации алгоритма атаки соперника : для этого создадим в проекте временную программу "lesson-12-1" и начнем её наполнение программными блоками.

  1. Возьмем программный блок "Цикл" "Оранжевой палитры" .
  2. Внутрь блока "Цикл" поместим программный блок "Независимое управление моторами" "Зеленой палитры" "Включить" (Рис. 5 поз. 1) , мощности моторов "B" и "C" установим в максимальное значение - 100 (Рис. 5 поз. 2) .

Рис. 5

  1. Следом за блоком "Независимое управление моторами" поместим программный блок . Режим работы блока установим в значение "Сравнение - Яркость отраженного света" (Рис. 6)

Рис. 6

В этом режиме программный блок "Датчик цвета" "Желтой палитры" визуально очень похож на программный блок "Ожидание" "Оранжевой палитры" в режиме "Датчик цвета - Сравнение - Яркость отраженного света" . Но, в отличие от блока "Ожидание" , этот программный блок не ждет выполнения условия, указанного параметрами "Тип сравнения" (Рис. 7 поз. 1) и "Пороговое значение" (Рис. 7 поз. 2) , а сразу выдает логическое значение ("Истина" или "Ложь" ) в выходном параметре и измеренное значение - в выходном параметре "Освещение" (Рис. 7 поз. 4) .

Параметры "Тип сравнения" и "Пороговое значение" на Рис. 7 поз. 1, 2 "Результат сравнения" (Рис. 7 поз. 3) выдавал логическое значение "Истина" при пересечении датчиком цвета черной границы ринга.

Рис. 7

  1. В случае использования ультразвукового датчика за блоком "Датчик цвета" установим программный блок "Ультразвуковой датчик" "Желтой палитры" . Режим работы блока установим в значение "Сравнение - Расстояние в сантиметрах" (Рис. 8 поз. 1) . Параметр "Тип сравнения" (Рис. 8 поз. 2) , параметр "Пороговое значение" (Рис. 8 поз. 3) установим таким образом, чтобы выходной параметр "Результат сравнения" (Рис. 8 поз. 4) выдавал логическое значение "Истина"

Рис. 8

В случае использования инфракрасного датчика за блоком "Датчик цвета" установим программный блок "Инфракрасный датчик" "Желтой палитры" . Режим работы блока установим в значение "Сравнение - Приближение" (Рис. 9 поз. 1) . Параметр "Тип сравнения" (Рис. 9 поз. 2) , параметр "Пороговое значение" (Рис. 9 поз. 3) установим таким образом, чтобы выходной параметр "Результат сравнения" (Рис. 9 поз. 4) выдавал логическое значение "Истина" в случае потери из виду роботом соперника.

Рис. 9

Давайте ещё раз проанализируем промежуточный код нашего алгоритма атаки: мы включили моторы на максимальную мощность и движемся вперед, постоянно в цикле опрашивая датчики. Если наш робот пересечет черную линию границы ринга, то значение выходного параметра "Результат сравнения" "Датчика цвета" примет значение "Истина" . Если наш робот потеряет соперника, то значение выходного параметра "Результат сравнения" датчика, следящего за соперником, также примет значение "Истина" . В любом из этих случаев нам следует прекратить атаку, завершив наш цикл. В этом нам поможет программный блок . Познакомимся с этим блоком подробнее: программный блок "Логические операции" предназначен для выполнения операций над логическими данными (Рис. 10) .

Рис. 10

Выбранный режим программного блока "Логические операции" "Красной палитры" определяет одну из четырех операций над логическими данными: "И (AND)" , "ИЛИ (OR)" , "Исключающее ИЛИ" и "Исключение (NOT)". Д ва входных параметра "a" и "b" (для операции "Исключение (NOT)" - один входной параметр "a" ) передают в программный блок входные значения, а результирующее значение выдается выходным параметром "Результат" . Если вы ранее не сталкивались с логическими операциями, то можете ознакомиться с базовыми знаниями в прилагаемой справке под спойлером.

Логические операции

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

Логическая операция "И (AND)"

Результатом логической операции "И (AND)" будет значение "Истина" "Истина" "Ложь" .

"a" операция "b" результат
"Ложь" "И (AND)" "Ложь" = "Ложь"
"Ложь" "И (AND)" "Истина" = "Ложь"
"Истина" "И (AND)" "Ложь" = "Ложь"
"Истина" "И (AND)" "Истина" = "Истина"

Логическая операция "ИЛИ (OR)"

Результатом логической операции "ИЛИ (OR)" будет значение "Ложь" только, если оба входных значения равны "Ложь" , во всех других случаях значение операции равно "Истина" .

"a" операция "b" результат
"Ложь" "ИЛИ (OR)" "Ложь" = "Ложь"
"Ложь" "ИЛИ (OR)" "Истина" = "Истина"
"Истина" "ИЛИ (OR)" "Ложь" = "Истина"
"Истина" "ИЛИ (OR)" "Истина" = "Истина"

Логическая операция "Исключающее ИЛИ"

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

"a" операция "b" результат
"Ложь" "Исключающее ИЛИ" "Ложь" = "Ложь"
"Ложь" "Исключающее ИЛИ" "Истина" = "Истина"
"Истина" "Исключающее ИЛИ" "Ложь" = "Истина"
"Истина" "Исключающее ИЛИ" "Истина" = "Ложь"

Логическая операция "Исключение (NOT)"

Логическая операция "Исключение (NOT)" применяется только к одному входному значению. Результатом логической операции "Исключение (NOT)" над входным значением является противоположное значение.

  1. За программным блоком "Ультразвуковой датчик" или "Инфракрасный датчик" поместим программный блок "Логические операции" "Красной палитры" .
  • Выходной параметр "Результат сравнения" программного блока "Датчик цвета" (Рис. 11, 12 поз. 1) "a" программного блока "Логические операции" (Рис. 11, 12 поз. 4).
  • Выходной параметр "Результат сравнения" программного блока "Ультразвуковой (инфракрасный) датчик" (Рис. 11, 12 поз. 2) соединим с входным параметром "b" программного блока "Логические операции" (Рис. 11, 12 поз. 5).
  • Режим работы программного блока "Логические операции" установим в "ИЛИ (OR)" (Рис. 11, 12 поз. 3) . В этом случае результат выполнения логической операции будет принимать значение "Истина" , только если будет выполнено одно из условий: датчик цвета пересёк черную линию, робот потерял соперника.
  • Установив режим программного блока "Цикл" в значение "Логическое значение" (Рис. 11, 12 поз. 7) , выходной параметр "Результат" программного блока "Логические операции" (Рис. 11, 12 поз. 6) соединим с входным параметром "Пока не будет истина" программного блока "Цикл" (Рис. 11, 12 поз. 8) . Данные настройки завершат выполнение цикла при "Истинном" результате выполнения логической операции.

Рис. 11


Рис. 12

Давайте протестируем получившийся алгоритм атаки! Для этого поместим нашего робота внутрь ринга, напротив установим неподвижного соперника и запустим программу атаки на выполнение. Наш робот должен уверенно вытолкать соперника за пределы ринга и остановиться над черной границей поля. Получилось? Значит наш сумоист верно контролирует границу ринга.

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

Подведем итог: мы реализовали алгоритм поиска соперника и успешно его протестировали, также прошел проверку алгоритм атаки.

Законченная программа сумоиста должна в бесконечном цикле выполнять последовательно поиск соперника, а затем - атаку соперника. Можно было бы уже объединить обе части нашей программы, если бы не одно маленькое дополнение. Если наш робот остановился над границей ринга, то перед тем, как начать поиск, роботу следует, отъехав немного назад, вернуться внутрь ринга. Дополним нашу программу атаки следующим кодом: за пределами цикла атаки, воспользуемся программным блоком "Переключатель" "Оранжевой палитры" . Режим работы блока "Переключатель" установим в "Датчик цвета - Сравнение - Яркость отраженного света". Параметры "Тип сравнения" и "Пороговое значение" установим аналогично ранее используемым в программном блоке "Датчик цвета" "Желтой палитры" . Следовательно, если наш робот остановился над черной линией, то выполнение будет передано верхнему контейнеру программного блока "Переключатель" . Именно в верхний контейнер поместим программный блок "Рулевое управление" "Зеленой палитры" , с настройками параметров, заставляющими робота отъехать назад на один оборот моторов. В нижний контейнер программного блока "Переключатель" поместим программный блок, выключающий моторы (Рис. 13) . Повторно протестировав алгоритм атаки, убедимся, что после того, как робот-сумоист вытолкал соперника за пределы ринга, он вернулся немного назад.

Рис. 13

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

Заключение:

Программа, которую мы разобрали с вами на этом уроке, реализует только один прямой силовой алгоритм поведения робота-сумоиста. Она подразумевает, что в прямом силовом противостоянии робот должен непременно одолеть своего соперника. Но наш учебный робот, конечно же, совсем не похож на мускулистого борца-сумо. Для того, чтобы уверенно выступить в этом состязании, необходимо уделить самое пристальное внимание в первую очередь конструкции робота, создать прочную, защищенную платформу, с помощью дополнительных ведущих колес или гусениц повысить сцепление с поверхностью ринга. На популярном видеохостинге Youtube.com по запросу "сумо lego роботов" можно найти множество видеороликов с реальных соревнований роботов, из которых вы непременно почерпнёте для себя интересные идеи для реализации в собственных конструкциях.

Главная же цель этого урока - на практическом примере показать вам метод непрерывной обработки показаний от пары датчиков. Можно ли усовершенствовать нашу программу? Безусловно! Например, используя программный блок "Случайное значение" "Красной палитры" , изменить алгоритм поиска соперника таким образом, чтобы задавать случайное вращение робота влево или вправо, тем самым, дезориентируя соперника. Попробуйте самостоятельно встроить в нашу программу этот дополнительный код. Подумайте так же над тем, какие изменения нужно внести в прорамму, в случае проведения соревнования на черном ринге с белой границей. Возможно, что у вас появятся собственные идеи улучшения: поделитесь ими в комментариях к уроку!



Понравилась статья? Поделитесь с друзьями!
Была ли эта статья полезной?
Да
Нет
Спасибо, за Ваш отзыв!
Что-то пошло не так и Ваш голос не был учтен.
Спасибо. Ваше сообщение отправлено
Нашли в тексте ошибку?
Выделите её, нажмите Ctrl + Enter и мы всё исправим!