Главная · Нарушения  · Робот сумо что придает машине устойчивость. Международные состязания роботов — Правила — Свободная категория — Свободная категория. Подробнее о сборке и комплектации

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

Сумо - одно из самых увлекательных соревнований роботов Лего Ev3 . В данном соревновании робот должен вытолкнуть робота противника за круг при этом самому не выехать за границу круга.

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

Опишем алгоритм и программу Сумо для робота EV3

1 Действие.

Робот ждёт 3 секунды, отъезжаем от центра круга до границы, едем вперёд, крутимся, ищем врага, едем до врага, если едем от границы то отъезжаем назад.

Ставим ожидание на 3 секунды.

2 Действие. Отъезжаем назад, до границы.


3 действие. После того как робот отъехал до границы он должен выдвинуться вперед. Движение вперёд.

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

В него ставим цикл вращение c ультразвуковым датчиком. (можно использовать и инфракрасный датчик)


5 Действие. Едем вперёд до тех пор, пока датчик цвета не увидит чёрную линию, границу круга.

6 . Действие После того как увидели границу мы отъезжаем назад.

Задание.

Напишите отъезд назад сами, используя урок 1.


ПРОГРАММА" РОБОТА МИНИ-СУМО. Заключительная статья по сборке робота мини-сумо. В первой части статьи "Шасси для робота мини-сумо" было подробно рассказано о том как изготовить шасси робота. В этой статье подробно разберём составление программы для робота. Наш робот готов. У него есть шасси, функцию «мозгов» выполнит микроконтроллер, а связь с внешним миром осуществят датчики. Но, не смотря на все это, он так и будет стоять на столе неподвижно. И чтобы этого не случилось, в наше творение пора вдохнуть жизнь, так сказать, почувствовать себя «создателем» окончательно. Программа, которую мы создадим, не только оживит робота, но и заставит его вести себя на ринге осмысленно и логично.


1. Основа программы-алгоритм.

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

Не буду использовать научные термины, скажу просто, Алгоритм - это описание последовательности неких действий. Вся наша жизнь - это различные действия; мы ходим, говорим, двигаем руками и ногами, вертим головой. У всего этого есть свой смысл - алгоритм, последовательность, которая определяет наше поведение, и его можно составить и описать. Для наглядности приведу пример из жизни. Вы каждое утро чистите зубы. Попробуйте описать, как вы это делаете, как бы составьте программу для себя. Вот что получится: «Берем зубную щетку. Выдавливаем пасту. Чистим зубы движениями влево-вправо. Полощем рот. Моем щетку».

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

«Проснуться. Встать с постели...» Если на этом этапе остановить создания алгоритма и перейти сразу к чистке зубов то программа застопорится (зависнет). Почему? Потому что мы снова не учли всех факторов. Вы стоите посреди своей спальни и не можете выполнить следующую команду; «Берем зубную щетку», так как щетка находится в ванной, а в нее нужно еще дойти. Ну, если вы спите в ванной, то нет проблем - программа выполнится! Но в большинстве случаев нормальные люди спят в другой комнате. Такой подход называется логическим, то есть осмысленным. Все наши действия должны быть разумными и содержать определенный смысл, иначе поставленная цель не будет достигнута. Поэтому «Проснуться. Встать с постели. Пойти в ванную комнату», будет наилучшим вариантом.

Вернемся к роботу. Как же теперь нам составить план действий робота мини-сумо на ринге? У нас есть правила, где четко обозначена цель - «Вытолкнуть противника за пределы ринга». Но для ее достижения нужно учитывать определенные факторы. Основной фактор это не выйти за пределы круга самому, а если быть точнее, то не выйти за белую границу круга. Вот что у нас получилось:

Рис. 1 Алгоритм поведения робота на ринге.

На рисунке 1 вы видите блок-схему. По всем правилам, именно так принято составлять алгоритмы. Наглядно и понятно.

Первый блок - «Начало». С этого момента программа начинает выполнение действий робота после включения. Первое что он должен будет сделать - это найти противника, блок «Поиск цели». Следующий блок нашей схемы в виде ромбика «Цель найдена?». Это означает, что перед нами будет стоять выбор действий по достижению определенного события. Если цель найдена (Да), то мы продолжим выполнение программы и перейдем к следующей части программы «Атаковать», но если цель не найдена (Нет), то логичнее всего продолжить ее поиск. Программа зациклится на этом моменте, пока робот не обнаружит противника. При атаке робот движется вперед на противника, пытаясь вытолкнуть его за пределы ринга, в этот момент работает блок «Достигнут край ринга?», если край ринга не достигнут, то атака продолжается, но если датчики обнаружили белую полосу края, то атака прекращается и программа переходит к следующему блоку «Отъезжаем назад» и «Разворот». После разворота, цикл основной программы повторяется, то есть она начинается с самого начала и робот снова ищет противника. Так сделано неспроста. Если в момент атаки, противнику удалось улизнуть от нашего робота, то мы должны вернуться к его поиску не выехав за край ринга. С теорией все. Перейдем к практике.

2. Правила написания программ для Arduino.

Хоть я и говорил что с теоретической частью покончено, но нам следует изучить принцип построения программы для микроконтроллеров Arduino, хотя эти принципы будут верными и для других МК семейства AVR.

Рис. 2 Метод написания программы для Arduino.

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

В самом начале программы при необходимости подключаются дополнительные модули. Затем объявляются глобальные переменные. Далее идет блок инициализации контроллера. В нем определяются назначения портов, вход это или выход и другие настройки. Так же из этого блока могут быть вызваны дополнительные вспомогательные подпрограммы. Если быть кратким, то в этом месте программа производит предварительные настройки контроллера. Этот блок выполняется один раз при старте или перезагрузке контроллера. Обратите внимание, в блоке добавлена строчка «задержка 5 сек». К общим правилам написания программы это не относится, но для робота мини-сумо необходимо. В правилах сказано, что после команды судьи роботы должны начать движение по истечении 5 секунд. Данную задержку нельзя выполнять в основном цикле программы, так как она будет постоянно повторяться, и поведение робота изменится не в лучшую сторону.

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

3. Средство разработки Arduino IDE .

Скачайте с сайта Arduino.ru последнюю версию Arduino IDE. Программа не требует какой-то специальной установки, достаточно распаковать содержимое архива в нужное место. В конце данной статьи находится файл библиотеки УЗ дальномера Ultrasonic. Его следует распаковать в папку Libraries.

Запускаем приложение. Проверяем правильность установки библиотеки, заходим в меню, «Файл» - «Примеры». Почти в самом низу должен появиться пункт Ultrasonic как на рис. 3.

Рис. 3 Проверка правильности установки библиотеки Ultrasonic.

Если все нормально, переходим в пункт «Сервис» - «Плата». Нам необходимо выбрать нашу плату - Arduino Pro Mini 5v.

Рис. 4 настройка платы контроллера

Последовательный порт необходимо выбрать тот, который появится после подключения Arduino к компьютеру. Следует немного сказать по поводу Arduino Pro Mini. В отличие от других контроллеров семейства Arduino, у Pro Mini нет встроенного модуля соединения с компьютером. Он поставляется отдельно в виде платы адаптера USB to UART(TTL) и при помощи четырех проводков соединяется с платой контроллера.

Рис. 5 USB-UART (TTL) адаптер.

На рис. 6 показано, как правильно нужно соединить контроллер и адаптер.

Рис. 6. Соединение контроллера с USB-UART адаптером.

В отличии от принятого соединения сигнальных линий, вместо RX-TX и TX-RX эти линии нужно соединять напрямую: RX-RX, TX-TX. При первом подключении адаптера к компьютеру автоматически начнется установка драйверов устройства. Следует дождаться окончания установки. Еще одной особенностью контроллера является отсутствия программного сброса Reset в момент программирования. Это конечно немного неудобно, но не настолько чтобы отказаться от Pro Mini. Достаточно нажать кнопку Reset на контроллере после того, как надпись «Компилирование» сменится на «Загрузка», Рис. 7.

Рис. 7. Отображение информации о ходе программирования МК.

4. Пишем код.

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

Рис. 8. Написания начального блока программы.

Первый блок: директива # подключает к нашему проекту библиотеку управления модулем.

Второй блок: Объявляем переменные и записываем в них начальные значения равные нулю. Обращаю ваше внимание, что мы не будем создавать имена для портов выводов МК. Я намеренно оставил их в цифровом виде, чтобы вам было удобно сверяться с принципиальной схемой. В данном блоке мы объявляем всего три переменные - это левый и правый датчики ринга (_и _) в них будут записаны значения АЦП. А так же переменная расстояния УЗ дальномера (_), в нее запишется расстояние в сантиметрах до препятствия.

Строчка Ultrasonic ultrasonic (4, 2), не что иное, как объявление переменной для УЗ дальномера, взятое из примера подключенной библиотеки. В скобках указаны порты, к которым подключены ножки датчика и.

Третий блок: (), в нем мы настраиваем все входы и выходы микроконтроллера. Входящие сигналы мы будем принимать портами 15, 17, поэтому назначаем им (Вход). Двигателями у нас управляют четыре порта: 3,5 для левого двигателя и 6,9 для правого двигателя, назначаем их как выход.

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

5. Основной цикл loop.

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

Рассмотрим структуру нашего цикла на основе алгоритма рис. 9

Рис. 9. Алгоритм основного цикла Loop.

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

void check_sensor() // Подпрограмма проверки сенсоров.

R_Sensor=analogRead(15); // считываем показания правого датчика

L_Sensor=analogRead(17); // считываем показания левого датчика

delay(10); //задержка для окончания преобразования АЦП

dist_cm = ultrasonic.Ranging(CM); // считываем показания УЗ дальномера

delay(10); // Задержка для окончания преобразования

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

void go_left() // поиск цели или движение налево

analogWrite(5, 100); //LEFT MOTOR

analogWrite(6, 100); //RIGHT MOTOR

Значение мощности моторов снижено почти вдвое, если крутиться слишком быстро мы можем по инерции проскочить обнаруженную цель.

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

void go_forward() //Атакуем - движение вперед

analogWrite(3, 0); //LEFT MOTOR

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

go_stop(); // Остановка

delay(100); //Ждем 10 мс

go_back(); //Движемся назад

delay(1000); //1 секунду.

go_right(); //Поворачиваем направо

delay(300); //300 мс

go_forward(); //Движемся вперед

delay(300); //300 мс

void go_stop() //остановка

analogWrite(5, 255); //LEFT MOTOR

analogWrite(9, 255); //RIGHT MOTOR

void go_back () //двидение назад

analogWrite(3, 255); //LEFT MOTOR

analogWrite(6, 255); //RIGHT MOTOR

analogWrite(9, 0); //RIGHT MOTOR

void go_right () //поиск цели или движение направо

analogWrite(3, 100); //LEFT MOTOR

analogWrite(5, 0); //LEFT MOTOR

analogWrite(6, 0); //RIGHT MOTOR

analogWrite(9, 100); //RIGHT MOTOR

void go_forward() //Атакуем движение вперед

analogWrite(3, 0); //LEFT MOTOR

analogWrite(5, 255); //LEFT MOTOR

analogWrite(6, 0); //RIGHT MOTOR

analogWrite(9, 255); //RIGHT MOTOR

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

Полный скетч для скачивания, находится в конце статьи.

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

Архив 1

Архив 2 к статье "Программа робота минисумо".

Если у ВАС возникли вопросы пишите на ФОРУМЕ или в Online чат по робототехнике мы их обсудим!

Внимание! Полное либо частичное копирование материала без разрешения администрации запрещено!

Привет! Желаешь собрать не сложного в сборке робота? Ты пришел по адресу! =) Именно у нас на сайте ты сможешь найти подробные статьи по сборке шаг-за-шагом своего первого робота, а так же многих других роботов, и даже для соревнований.

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

Помоги нашему проекту! Зарегистрируйся на нашем сайте и приходи в наш Online-чат или форум и делись своими поделками и своим прогрессом - ведь именно твоя активность привлекает к робототехнике все больше и больше внимания начинающих - они смотрят на твой успех и хотят стать такими же крутыми, а нам очень приятно видеть что у вас все получается. А если что-то не получается - мы поможем;)

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


Видео работы робота



Материалы и инструменты для создания робота:

- сухой клеевой карандаш;
- прозрачный скотч;
- двухвыводная не фиксируемая кнопка;
- один мигающий светодиод типа ARL-513URC-B;
- транзистор типа КП505А;
- два резистора номиналом 1Мом и 270 Ом;
- клипса-разъем для подключения к батарее типа «Крона»;
- моторчик модели RF-300CA-D/C 3V или подобный.






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

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

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

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


На картинке компоненты робота отмечены цифрами:

1. Клипса для подключения батареи.
2. Фиксатор батареи.
3. Источник питания (батарея на 9 В).
4. Двигатель.
5. Мигающий светодиод (говорит о том, что питание подключено).
6. Кнопка для включения робота.
7. Резистор, благодаря нему можно задавать время работы робота.
8. Конденсатор, он также отвечает за время работы робота.
9. Транзистор типа КП505А, он является драйвером двигателя.

Процесс сборки робота:

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







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

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










Шаг третий. Крепим нижние боковые поверхности
На этом этапе можно соединить нижние боковые поверхности. Чтобы это сделать, нужно отогнуть нижние плоскости и затем зафиксировать их прозрачным скотчем. Еще на картинке можно увидеть отонутые вверх элементы корпуса, они нужны для фиксирования батареи.









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

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






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

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

Для дополнительной фиксации моторчик обматывается скотчем.





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