Robo Sumo: peleas de robots inteligentes


( c )

Cada año, alrededor de mil equipos de todo Japón participan en una feroz batalla en un torneo de robots. En este concurso no verá motosierras, antorchas y descargas eléctricas, en resumen, nada que se le ocurra cuando escuche la frase "batalla de robots".

No se trata solo de la batalla, es un sumo robótico que se valora por sus cualidades especiales: por elegancia, simplicidad y la capacidad de mostrar inteligencia en la estrategia. La competencia tiene lugar en un anillo de metal redondo con un diámetro de solo 1,5 m, a lo largo del perímetro del cual se dibuja una línea blanca de 5 cm de ancho. Un robot que cruza este borde se considera un perdedor. Y en esta aparente simplicidad yace un abismo de oportunidades.

Le diremos cómo la "batalla de los robots" se ha convertido en una competencia intelectual para los programadores y le daremos instrucciones detalladas para armar un robo-sumoist.

Sensores de búsqueda fronteriza y enemiga



( c ) Los

ojos del robot son sensores infrarrojos. El grado de reflexión IR se mide mediante un elemento fotosensible. El color blanco del borde no se eligió por casualidad: refleja más luz que la superficie negra del anillo.

El robot está equipado con varios sensores infrarrojos responsables de la "búsqueda" de la frontera. Los sensores frontales, como regla, ayudan a controlar la velocidad de movimiento: el luchador no debe abandonar el campo debido a un celo excesivo. Los sensores traseros "siguen" la aproximación al borde del anillo: después de recibir una respuesta de ellos, el robot cambia de dirección.

Y midiendo el tiempo requerido para reflejar los rayos, puede comprender la ubicación del enemigo. Muchos robots (pero no todos) cambian de dirección, dado este parámetro.

Reglas de batalla



Además de las ventajas enumeradas, los sensores IR tienen un inconveniente: el campo de visión sigue siendo estrecho, debido a que hay muchos puntos ciegos, cuyo uso en el ataque es la estrategia principal de los robots altamente maniobrables.

Sin embargo, esto solo funciona con robots autónomos. Cuando un sumoísta robótico independiente se encuentra con un oponente controlado por radio, no puede usar la estrategia de ataque de la zona ciega, ya que el operador ve más que el robot.

En lugar de atacar los puntos ciegos, los Autobots usan una estrategia de ataque desde las esquinas. En general, el luchador no tiene muchas maniobras disponibles: girar, empujar, frenar y detenerse.

Sin embargo, para confundir al enemigo, algunos combatientes lanzan banderas blancas en uno o ambos lados del casco. Atrayendo al enemigo a la bandera, atacan su lado vulnerable y lo empujan fuera del ring.

Por supuesto, aparecieron formas de defenderse contra tal ataque. La aparición de banderas a la izquierda y a la derecha significa que el cuerpo del robot está en el centro. Si el robot arrojó la bandera a un lado, entonces su cuerpo está en el lugar opuesto.

Algunos bots no solo pueden atraer al enemigo, sino también esconderse de sus sensores. Para hacer esto, se pintan de negro o se agregan revestimientos reflectantes.

Armamento



La batalla de los robots sumoístas no es solo un trasero. Muchos de ellos están equipados con una cuchilla niveladora de bordes afilados. Te permite elevar a tu oponente y moverlo fuera de la cancha o incluso causar daños graves. Es cierto que esta arma reduce la maniobrabilidad del luchador.

En un sumo humano, el arma principal del luchador es su impresionante masa. Curiosamente, en los robots, la masa también juega un "papel importante".

A pesar de que, de acuerdo con las reglas, la longitud del robot (a cada lado) no supera los 20 cm, y el peso no debe ser superior a 3 kg, el robo-sumoist puede "pesar" varias decenas de kilogramos. Este "peso" se logra a través de imanes. Sí, a veces la técnica prácticamente puede "pegarse" al piso, ya que el anillo se basa en una superficie de metal.

Mente mecánica


Al crear robots, cuya táctica principal es la alta maniobrabilidad, se utilizan menos imanes. El énfasis principal en este caso se coloca en un motor potente. Sin embargo, la victoria en la batalla rara vez depende solo del hierro.

Lo principal para los robots de sumo es la estrategia, escrita en forma de código. La elección del hierro también depende de ello. A menudo, los robots se mueven tan rápido que es difícil hacer un seguimiento de sus movimientos. Sin embargo, el comportamiento súper maniobrable se basa en una lógica estricta del programa. Considere los principios por los cuales se crea.

Creación de robot de sumo



Pasemos a la experiencia de expertos del sitio hackster.io , quienes prepararon una guía exhaustiva sobre la creación de un robot-sumoista típico.

Los siguientes componentes se utilizan en el proyecto:

  • CytronTechnologies × 1 controlador ;
  • sensor de infrarrojos (3-80 cm) × 5;
  • juego de ruedas de silicona JSumo (52 x 30 mm) × 2;
  • módulo de seguimiento por infrarrojos × 2;
  • Motorreductor DC (12 V, 380 rpm) × 4;
  • Batería LiPo (11.1 V, 1300 mAh) × 1.


1. Controlador


Puedes usar Arduino Uno, Mega o Nano. También necesitará una placa para conectar todos los sensores. Por supuesto, puede crear su propia tarjeta de expansión y conectar todos los contactos al Arduino, o comprar una tarjeta preparada y conectar todos los componentes electrónicos.


2. El motor


Esta es una de las partes más importantes de las que depende el rendimiento del robot. Idealmente, necesita un motor con alta velocidad y par, pero en este caso su tamaño será grande. Debes asegurarte de que todos los motores y las ruedas quepan en una caja de 20 x 20 cm.

Hay varios tipos de motores que puedes usar en tu proyecto.

Un motor con un engranaje cilíndrico y planetario , en el que el eje de salida es paralelo al motor.


Motor de engranaje helicoidal . El eje de salida aquí es perpendicular. Esta opción puede ser preferible, ya que habrá más espacio en el robot para otros componentes.


Dos ruedas vs cuatro ruedas


Una tracción a las cuatro ruedas definitivamente le dará más oportunidades para empujar a un robot oponente. Sin embargo, su movilidad es menor que la de una de dos ruedas. Aún así, se utilizó la tracción total en este proyecto de demostración.

3. ruedas



No hay muchas opciones para una buena goma para un robot de sumo en el mercado. Los ingenieros optaron por ruedas de silicona fabricadas por Jsumo. Sin embargo, puede usar ruedas de un automóvil de juguete.

Preste atención al montaje: asegúrese de que la rueda seleccionada coincida con el tamaño del orificio correspondiente al eje de salida del motor. Este proyecto utiliza un eje de 6 mm, respectivamente, la rueda tiene un agujero de 6 mm.

4. sensores



Para detectar objetos, puede usar sensores infrarrojos y, por ejemplo, ultrasonidos.

Los expertos recomiendan iniciar un ataque cuando la distancia al enemigo no sea superior a 60 cm. Por lo tanto, es posible colocar un sensor con un rango de sensibilidad de hasta 1 m.


Para este robot, se instalaron tres sensores infrarrojos, uno por lado.


También se debe instalar un sensor infrarrojo en la parte inferior del robot, lo que ayudará a detectar una línea blanca en el borde del anillo. Puede instalar varios conjuntos de sensores de borde en la parte delantera y trasera, según su estrategia de conducción.

5. Batería



Por lo general, se usa una batería de polímero de litio, ya que proporciona más energía que otros tipos de baterías con el mismo tamaño.

6. El chasis del robot.


Puede usar la base ya preparada de Cytron, que se ajusta al tamaño permitido del robot (20 x 20 cm), o hacerlo desde cero.


Como la impresión 3D es más económica, el buzo ha compartido archivos para la impresión en el hogar.


7. Asamblea


El diagrama y la tabla a continuación proporcionan una descripción general de las conexiones cableadas para el robot Sumo.



Primero debe soldar dos cables (el tamaño recomendado es 16-18 AWG) al terminal del motor, luego conectarlo al controlador.


Además, todos los motores y sensores deben soldarse con cables.


Ahora pasamos a la asamblea dentro de la caja. Use los pernos M3x10 para montar los motores en la carcasa inferior.


Instale sensores infrarrojos en el lado derecho e izquierdo.


Sujete la llanta con el tornillo M4, luego coloque la cinta de silicona.

El tornillo de fijación debe asegurarse a la parte plana del eje redondo del motor.


Luego, con un tornillo autorroscante, instale el sensor de borde en la parte inferior de la cuchilla.


En la parte frontal de la carcasa inferior, verá dos orificios destinados a tender los cables de los sensores de borde.


Ensamble la cuchilla con la carcasa inferior con los pernos y tuercas M6x20.


Instale sensores infrarrojos en el soporte frontal antes de conectarlo a la caja inferior.


Después de montar todos los sensores y motores, recomendamos marcar cada cable para que sea más fácil de solucionar en el futuro.


Fije el soporte de soporte para la placa de circuito.


Verifique la polaridad de la batería y los sensores antes de conectar a la placa, y luego recuerde quitar la batería antes de proceder a conectar otros componentes a la placa.


Como se trata de un robot de tracción total, se deben conectar dos motores en un lado para controlarlos simultáneamente.


Cuando se utiliza un ejemplo de código ya preparado , es mejor conectar todos los motores y sensores a los mismos puertos, que se muestran en las ilustraciones.


Finalmente, conecta la batería.


¡El robot de sumo está listo!

8. Calibración del sensor


Un paso importante es la calibración antes de programar. Desafortunadamente, la mayoría de los recién llegados no prestan la debida atención a esto cuando configuran el robot.

Asegúrese de que los sensores estén funcionando dentro del rango de sensibilidad requerido.

El rango de sensibilidad máxima del sensor de búsqueda enemigo es de 80 cm. En este proyecto, el robot no debe responder a un objeto ubicado a una distancia de 60-80 cm, por lo tanto, el rango de sensibilidad se reduce en 20 cm.


Para hacer esto, coloque el robot "mirando" a una superficie blanca y plana a una distancia de 60 cm y ajuste el sensor hasta que se apague el indicador LED. El procedimiento se muestra con más detalle en el video.


Los sensores de borde se ajustan con un destornillador a través del orificio de la cuchilla.

Con el software, puede mostrar las señales de dos sensores de borde en los LED D0 y D1.


Esto es necesario para asegurarse de que el sensor emite una señal de salida alta cuando detecta una superficie blanca y baja, en una superficie negra (preste atención a los LED en D0 y D1 en el video de arriba).

9. Programación


Dado que el controlador del robot URC10 es compatible con Arduino UNO, Arduino IDE se utiliza para la programación. Puede tomar un ejemplo de código listo para usar .

La única biblioteca utilizada en el proyecto es CytronMotorDrivers .

Si no sabe cómo habilitar la biblioteca o descargar el código de muestra, consulte el manual de URC10 .

El programa de robot de sumo básicamente se puede dividir en cuatro partes:

  • inicio de actuación;
  • Buscar;
  • ataque;
  • retirada.

void loop() {
  //   .
  if (!digitalRead(EDGE_L)) {
    //     .
    backoff(RIGHT);
 
    //   .
    searchDir ^= 1;
  }
 
  //   .
  else if (!digitalRead(EDGE_R)) {
    //     .
    backoff(LEFT);
 
    //   .
    searchDir ^= 1;
  }
 
  //   .
  else {
    //  ,    .
    if ( digitalRead(OPPONENT_FC) &&
         digitalRead(OPPONENT_FL) &&
         digitalRead(OPPONENT_FR) &&
         digitalRead(OPPONENT_L) &&
         digitalRead(OPPONENT_R) ) {
      search();
    }
 
    // ,      .
    else {
      attack();
    }
  }
 
 
  //     .
  if (!digitalRead(BUTTON)) {
    //  .
    motorL.setSpeed(0);
    motorR.setSpeed(0);
 
    // .
    while (1);
  }
}

Inicio de actuación


La estrategia de inicio depende de las reglas de la competencia. Un robot solo puede comenzar a moverse después de 5 segundos, y a veces en 1 segundo.

Sucede que las reglas le permiten colocar el robot en cualquier lugar del ring. En otros casos, el robot debe estar en una determinada "zona de inicio".

En este ejemplo, el robot está programado para moverse y atacar al oponente desde un lado tan pronto como comience el juego.

void startRoutine() {
  // .
  delay(1000);
 
  //    45 .
  motorL.setSpeed(255);
  motorR.setSpeed(0);
  delay(180);
 
  //  .
  motorL.setSpeed(255);
  motorR.setSpeed(255);
  delay(450);
 
  //  ,     .
  motorL.setSpeed(-0);
  motorR.setSpeed(255);
  uint32_t startTimestamp = millis();
  while (digitalRead(OPPONENT_FC)) {
    // ,        .
    if (millis() - startTimestamp > 400) {
      break;
    }
  }
 
}


Buscar


Si inmediatamente después del inicio no fue posible atacar al enemigo, el robot girará alrededor del anillo en círculo para encontrar al oponente. Una vez que se detecta, el modo de búsqueda se detendrá y el robot procederá a atacar.

void search() {
  //   .
  if (searchDir == LEFT) {
    motorL.setSpeed(100);
    motorR.setSpeed(255);
  } else {
    motorL.setSpeed(255);
    motorR.setSpeed(100);
  }
}


Ataque


Cuando un enemigo es detectado por uno de los cinco sensores, el robot gira en su dirección y ataca a toda velocidad.

La precisión del ataque depende de qué tan claramente su robot pueda rastrear al enemigo cuando avanza a toda velocidad. Si el enemigo logra escapar, el programa reanudará el trabajo en modo de búsqueda.

void attack() {
  uint32_t attackTimestamp = millis();
  //    .
  //     .
  if (!digitalRead(OPPONENT_FC)) {
    motorL.setSpeed(255);
    motorR.setSpeed(255);
  }
 
  //   .
  //  .
  else if (!digitalRead(OPPONENT_FL)) {
    motorL.setSpeed(0);
    motorR.setSpeed(255);
  }
 
  //   .
  //  .
  else if (!digitalRead(OPPONENT_FR)) {
    motorL.setSpeed(255);
    motorR.setSpeed(0);
  }
 
  //   .
  //     ,     .
  else if (!digitalRead(OPPONENT_L)) {
    motorL.setSpeed(-150);
    motorR.setSpeed(150);
    while (digitalRead(OPPONENT_FC)) {
      // ,    .
      if (millis() - attackTimestamp > 400) {
        break;
      }
    }
  }
 
  //   .
  //     ,     .
  else if (digitalRead(OPPONENT_R) == 0) {
    motorL.setSpeed(150);
    motorR.setSpeed(-150);
    while (digitalRead(OPPONENT_FC)) {
      // ,    .
      if (millis() - attackTimestamp > 400) {
        break;
      }
    }
  }
}


retirada


Cuando uno de los sensores de borde detecta una línea blanca, el robot necesita retroceder y darse la vuelta. Durante la rotación, el robot continuará buscando al enemigo. Si aparece, será atacado.

void backoff(uint8_t dir) {
  //  .
  motorL.setSpeed(0);
  motorR.setSpeed(0);
  delay(100);
 
  // .
  motorL.setSpeed(-255);
  motorR.setSpeed(-255);
  delay(200);
 
  //  .
  motorL.setSpeed(0);
  motorR.setSpeed(0);
  delay(100);
 
  // .
  if (dir == LEFT) {
    motorL.setSpeed(-150);
    motorR.setSpeed(150);
  } else {
    motorL.setSpeed(150);
    motorR.setSpeed(-150);
  }
  delay(100);
 
  //   
  //  -   .
  uint32_t uTurnTimestamp = millis();
  while (millis() - uTurnTimestamp < 300) {
    //   ,     .
    if ( !digitalRead(OPPONENT_FC) ||
         !digitalRead(OPPONENT_FL) ||
         !digitalRead(OPPONENT_FR) ||
         !digitalRead(OPPONENT_L) ||
         !digitalRead(OPPONENT_R) ) {
      //  .
      motorL.setSpeed(0);
      motorR.setSpeed(0);
      delay(100);
 
      //    .
      return;
    }
  }
 
  //    ,         .
  motorL.setSpeed(255);
  motorR.setSpeed(255);
  delay(200);
}


Eso es todo. Ahora puede ver un video que demuestra cómo se mueve el robot de esta lección.


¿Ya tienes experiencia construyendo un robot para competencias similares? Comparta estrategias ganadoras en los comentarios.

Fuentes


Ensamblaje de robot de bricolaje: https://www.hackster.io/cytron-technologies/building-a-sumo-robot-45d703

Concurso nacional de robots de sumo de todo Japón: http://www.fsi.co.jp/sumo/en /index.html Conjunto de reglas

ilustradas: http://www.robotroom.com/SumoRules.html

All Articles