domingo, 18 de diciembre de 2011

Parametros

Autor: Martin Berkhoff

Competencia (Nivel):
Aprendizaje autónomo
Nivel 1: Conoce y utiliza estrategias de aprendizaje y hábitos de estudio y trabajo, seleccionando los que le son útiles según sus necesidades de aprendizaje.

Palabras clave:  codigo, parametros

Descripción de la actividad :

Un robot se desplaza por una superficie blanca con puntos negros. La superficie es rectangular y posee paredes en sus bordes. Construya un robot que implemente las siguientes funcionalidades:
  1. Cada vez que el robot choca con una pared debe:
  1. retroceder un poco,
  2. girar 180° a la izquierda o derecha,
  3. disminur su potencia en 10,
  4. contar los choques con las paredes,
  5. y seguir su recorrido con la nueva potencia
  1. Al pasar por un punto negro debe:
  1. contarlo,
  2. girar en un ángulo aleatorio menor a 180° a la izquierda o derecha,
  3. aumentar su potencia en 10,
  4. y seguir su recorrido con la nueva potencia.
  1. El robot se desplaza por tiempo indefinido, deteniendo su recorrido ante una señal auditiva sobre 80 db.
  2. Al final del recorrido, informará en su visor el n° de choques y el n° de puntos negros detectados.
Los giros y cambios de potencia se implementarán con una subtarea exclusiva para ello, con la siguiente estructura:
sub GiroPotencia(int t, string direccion, string evento)
donde,
        t                tiempo de giro
        direccion        dirección de giro, “D” -> Derecha, “I” -> Izquierda
        evento        especifica si es “choque” o “círculo”

La potencia utilizada por el robot en el avance, nunca debe sobrepasar 100 ni ser menos de 30.


Estrategia de Trabajo
 La Actividad #1 de Proyecto de Robótica se nos presenta como la combinación de 
todos los contenidos aprendidos durante el Primer semestre en Programación de Robots.
 Considerando Que De Partida Se nos Pide este nivel de complejidad y agregando 
un nuevo componente (el uso de parámetros), procedemos a separar nuestro código en 
subtareas y encargar a los miembros del grupo la tarea que mejor manejaban (según 
aprendieron el semestre anterior). Esto nos tomó muy poco tiempo puesto que reciclamos 
códigos anteriores, adaptandolo a la actividad actual.

Pseudocódigo
Mientras No Detecte Ruido Hacer:
{
 avanzar con “potencia”
SI Choque con pared:
  {
  contador de choques crece en 1.
  retrocede.
  Llama a GiroPotencia y le entrega sus parámetros
  Realiza un GiroPotencia
  la potencia se reduce en 10.
  }
SI detecta un punto negro:
  {
  contador de puntos  crece en 1.
  Llama a GiroPotencia y le entrega sus parámetros.
  Realiza un GiroPotencia.
  la potencia Crece en 10.
  }
 Muestra en Pantalla Los Contadores. 
}
GiroPotencia
{
SI recibe parámetros de Choque:
  {
  asigna una dirección Izquierda o Derecha
  asigna un Giro en 180º en esta dirección
  }
SI recibe parámetros de Punto Negro:
  {
  asigna una dirección Izquierda o Derecha
  asigna un Giro Menor a 180º en esta dirección
  }
}





Código Fuente
#define UMBRAL 40
#define MIC SENSOR_2
int potencia=60;
int giro=0;
int punto_negro=0;
int choque=0;
int decibeles = 90;
sub GiroPotencia(int t, string direccion, string evento)
{
 if(("D" == direccion)||("i" == direccion))
  {
  OnRevReg(OUT_BC,potencia,OUT_REGMODE_SYNC);
  Wait(t);
  RotateMotor(OUT_C, potencia,180);
  Wait(t);
  }
}
sub colision()
{
 if(SENSOR_1 == 1)
  {
  choque++;
  GiroPotencia(1000,"D" ,"C");
  potencia= potencia-10;
  }
}
sub circulos()
{
 if(SENSOR_3 <40)
  {
  punto_negro++;
  OnRevReg(OUT_BC,potencia,OUT_REGMODE_SYNC);
  giro=Random(30) + 900;
  OnFwd(OUT_C,potencia);
  OnRev(OUT_B,potencia);
  Wait(giro);
  potencia=potencia+10;
    }
  }
task main()
{
 SetSensorTouch(IN_1);
 SetSensorLight(IN_3);
 SetSensorSound(IN_2);
 while(SENSOR_2 < decibeles)
   {
  OnFwdReg(OUT_BC,potencia,OUT_REGMODE_SYNC);
    Wait(500);
  colision();
  circulos();
  RectOut(15, 20, 70,23);
  TextOut(20, 40, "circulos ");
  NumOut(10, 40, punto_negro);
  TextOut(20, 36, "choques ");
  NumOut(10, 36, choque);
   }
    Float(OUT_BC);
}


Adjuntare un vídeo de el trabajo



Conclusión
. Al ver este programa Ejecutándose en el robot, puede que no llame mucho la 
atención, respecto de Trabajos hechos en el curso anterior. pero dentro esconde el aporte 
mayor para nosotros. La producción de una Programación sintética que trabaja con Sub 
Tareas para cada función pedida, Integrandolo ahora con el paso de “PARAMETROS”, 
herramienta que simplifica mucho mas el resultado y genera un ahorro en lineas de 
código, Pues ya no se ejecutan varias tareas con distintos valores, sino que se ejecuta 
UNA SOLA pero en Función de los valores Obtengamos previamente.
 Podemos concluir que a veces hay tareas que nos parecen complicadas de 
implementar, o aprender nuevas funciones lo consideramos innecesario; pero estas 
pueden conllevar a hacer las cosas mas simples de aquí en adelante.

No hay comentarios:

Publicar un comentario