Robo-sumo, что это и с чем его едят?

в 13:33, , рубрики: arduino, Программирование, робототехника, соревнования роботов

image

Вступление

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Но специально для тех, кто хочет принять участие, но пока не знает с чего начать мы готовы поделиться трассировкой робота, который является призером Спартакиады МФТИ 2016.

P.S. Выполнена в SprintLayout

Первый этап

image

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

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

Второй этап

image

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

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

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

image

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

image

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

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

Проще всего использовать контроллеры 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. Если что-то упустил — пишите, исправлю.

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

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

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

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

image

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

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

Автор: kot_mapku3

Источник

Поделиться

* - обязательные к заполнению поля