Competencia: Creatividad e innovación (Nivel 1).
Asignatura: Programación de Robots.
Palabras clave: Informe, lenguaje NQC, programa Bricx Command Center.
Descripción de la Actividad
Les voy a compartir mi experiencia, como estudiante de 1er año de Ingeniería civil informática, sobre la vez que tuve que realizar un informe sobre el Torneo de Sumo que realice con el Robot NXT de la Universidad.
El informe consistía en dar a conocer el código que se utilizó para el Torneo de Sumo, el motivo del diseño del robot y el uso de los sensores que se implementaron para las batallas.
Solución
Especificación de diseño:
El robot NXT poseía un sensor de luz ubicado al frente del Robot, pensado para los limites del campo de lucha, dos sensores de tacto ubicados en los costados del Robot, pensado para el método de defensa, un sensor de ultra sonido ubicado al lado superior izquierdo del Robot, pensado para el modo de ataque, unas garras ubicadas también en el lado superior izquierdo, pensadas para el método de ataque, dos motores, uno para cada sensor de tacto y un tercer motor para el movimiento de las garras.
Para el método de defensa se creó una barredora colocada en la parte del frente del Robot, con sus piezas reforzadas para que sostuviera el impacto del robot contrincante pudiendo así empujar e impedir el avance del mismo.
En el desplazamiento se utilizaron dos motores para mover las orugas, estos le permitieron al robot una mayor adherencia con la pista y con cualquier superficie en que se encontró.
Su ladrillo o receptor de información fue ubicado de forma acostada para que le diera peso al robot y así este le diera fuerza a las ruedas para que se desplazara con facilidad.
Todo el diseño del robot fue pensado principalmente para que este no fuera derribado por los demás contrincante y fuera él el que los derrotara realizando así un mejor torneo.
Imagenes del diseño:
Uso de los Sensores:
El sensor de luz: Fue ubicado al frente del Robot (observando el piso), se utilizó para que el robot no se saliera de los límites del campo de lucha, el cual era de fondo blanco y tenía una línea negra en forma de círculo para el límite de este.
El sensor de ultra sonido: Fue ubicado en la parte superior izquierda del Robot, se utilizó para activar el modo de ataque el cual consistía en avanzar empujando al enemigo hasta sacarlo del círculo.
Los sensores de tacto: Fueron ubicados en los costados del Robot, se utilizó para activar el método de defensa que se activaba en cuanto el Robot fuera impactado.
El uso de todos los sensores se enfocaba en el modo de reacción del Robot lo que le permitía defenderse y atacar al Robot contrincante para ganar.
Código del Robot:
En esta parte del código es cuando se inicia el modo de ataque avanzando hacia delante.
task main () // aquí se inicia el programa {
SetSensorTouch(IN_1);
SetSensorTouch(IN_2);SetSensorLight(IN_3);
SetSensorLowspeed(IN_4);
OnFwd(OUT_AC, 75);
while(true)
{ if (Sensor(IN_3)<UMBRAL)
{PISTA();
}
Esta parte del código es el modo de defensa el cual le permite al robot poder zafar de una situación de peligro y posible derrota al ser impactado de costado, dado que al activarse un sensor de tacto el robot girara en un tiempo determinado.
if (SENSOR_1==1)
{
defensa();
OnFwd(OUT_C, 75) ;
Wait(1000);
OnRev(OUT_A, 75);
Wait(2000);
defensa2();
}
if (SENSOR_2==1)
{
defensa();
OnFwd(OUT_A, 75) ;
Wait(1000);
OnRev(OUT_C, 75);
Wait(2000);
defensa2() ;
}
if(SensorUS(IN_4)<=60)
{
ataque();
}
}
}
Código completo del Robot:
#define UMBRAL 40
#define CERCA 40
int Giro;
sub PISTA()
{
OnRev(OUT_C,100);
Wait(200);
until(Sensor(IN_3)>=UMBRAL);
OnFwd(OUT_AC,100);
}
sub defensa(){
Giro=Random (2000) + 500;
OnRev(OUT_B,100);
OnRev(OUT_AC,100);
Wait(Giro);
PlayTone(500,1500);
Wait(3000);
}
sub defensa2(){
OnFwd(OUT_AC, 75);
}
sub ataque()
{
OnRev(OUT_B,100);
{
OnRev(OUT_B,100);
OnFwd(OUT_AC,100);
PlayTone(500, 1500);
Wait(3000);
}
task main ()
{
SetSensorTouch(IN_1);
SetSensorTouch(IN_2);
SetSensorLight(IN_3);
SetSensorLowspeed(IN_4);
OnFwd(OUT_AC, 75);
while(true)
{
if (Sensor(IN_3)<UMBRAL)
{
PISTA();
}
if (SENSOR_1==1)
{
defensa();
OnFwd(OUT_C, 75) ;
Wait(1000);
OnRev(OUT_A, 75);
Wait(2000);
defensa2();
}
if (SENSOR_2==1)
{
defensa();
OnFwd(OUT_A, 75) ;
Wait(1000);
OnRev(OUT_C, 75);
Wait(2000);
defensa2() ;
}
if(SensorUS(IN_4)<=60)
{
ataque();
}
}
}
Análisis de las Batallas:
}
Análisis de las Batallas:
En la batalla Nº 1, Nº 2 y Nº 3 contra ROBOT NOLIGY se ganó porque el contrincante no se presento en la pista de combate.
En la batalla Nº 4 contra FACEBOT se perdió porque el sensor de luz no funcionó y además levantaron al Robot de una punta lo que hizo que se saliera del límite del círculo.
En la batalla Nº 5 contra FACEBOT fue declarada empate dado que ninguno de los dos Robots pudo sacar al otro del límite del círculo.
En la batalla Nº 6 contra FACEBOT se ganó porque el Robot logró expulsar al contrincante fuera del límite del círculo.
En la batalla Nº 7 y Nº 8 contra ROBOT NOLIGY se ganó porque al contrincante no le favoreció el sensor de tacto, lo que hizo que al impactarlo con el Robot este retrocediera y saliera del límite del círculo.
En la batalla Nº 9 contra TERABYTES se perdió porque el Robot contrincante logró sacarnos del límite del círculo.
En la batalla Nº 10 contra BOOT se perdió ya que el Robot fue sacado del límite del círculo porque fue ganado en potencia.
En la batalla Nº 11 contra NESCAFE se ganó ya que el Robot contrincante se desestabilizo cuando fue empujado, fallándole en ese momento el sensor de luz, llevándolo al límite del círculo.
Reflexión
Puedo destacar de este trabajo que fue muy interesante el realizar luchas con Robots ya que me sirvió para desarrollar más mis habilidades y además aprender más sobre el lenguaje NXT.
En cuanto a las batallas estas fueron difíciles de ganar, hubieron oponentes muy fuertes, pero a pesar de eso igual logramos ganar 7 batallas, empatar 1 y perder sólo 3, esto da a conocer que la estructura del Robot y el código fueron exitosos.
No hay comentarios:
Publicar un comentario