Proyecto ELO329
Robot Lego programado con Java

Proyecto desarollado por :

  • Karl Sterneberg [karst273 AT student DOT liu DOT se]
  • Romain Barrallon [rbarra AT elo DOT utfsm DOT cl]
  • Victor Contreras [viktor AT elo DOT utfsm DOT cl]

durante las actividades del ramo ELO329 "Diseño y Programación Orientado a Objeto"

 


Menu :

Inicio

Analisis

Documentacion

Referencias

 

 

Archivos descargables :

Robot.java

Main.java

MySensorListener.java

MyTimerListener.java

 

 

Análisis

Requerimientos

Funciones


Permite al robot funcionar en autonomía.
Permite al robot desplazarse en 2 dimensiones.
Permite al robot cambiar de dirección al encontrarse con un obstáculo.

Atributos


Transparencia ante usuario.
Ocupa poca memoria.
No excede los limites definidos por leJOS.

Casos de uso

Nombre : Desplazamiento en el entorno
Actores : Usuario, Obstáculos en el ambiente.
Descripción : El robot se desplaza en el espacio 2D y al encontrarse con un obstáculo cambia de dirección.

Flujo principal :

Entorno Sistema
1) Este caso de uso empieza cuando el usuario enciende el robot, después de haber cargado el programa en el.  
  2) El robot empieza a desplazarse en línea recta.
3) Un obstáculo se encuentra en el camino del robot y acciona uno o más sensores del robot.  
  4) Al chocar con un obstáculo, el robot apaga sus motores, revisa sus sensores después un cierto tiempo y cambia de dirección :
Si acciona sensor derecho (izquierdo), retrocede girando hacia la izquierda (derecha) con un ángulo aleatorio entre 45º y 90º, y parte en línea recta (vuelve a la etapa 2).
5) El caso de uso se termina cuando el usuario apaga el robot o el tiempo de prueba supera los 3 minutos.  

Tarjetas CRC

Nombre de clase: Main
Super clase: Object
Sub clase: ningúno


Responsabilidades:
• Crear una instancia de la clase robot.
• Pedir a esta instancia que empiece a moverse.
Colaboradores:
• Robot



Nombre de clase: Robot
Super clase: Object
Sub clase: ningúno


Responsabilidades:
• Go forward.
• Go backward.
• Turn right.
• Turn left.
• Stop.
• Respond to event “sensor pressed”.
Colaboradores:
• Motor
• Sensor




Nombre de clase: Sensor
Super clase: Object
Sub clase: ningúno


Responsabilidades:
• Notifca su instancia de la clase MySensorListener cuando su estado cambia.
Colaboradores:
• MySensorListner




Nombre de clase: Motor
Super clase: Object
Sub clase: ningúno


Responsabilidades:
• Permitir que cambien su velocidad.
• Girar en el sentido del reloj.
• Girar en el contra-sentido del reloj.
• Detenerse.




Nombre de clase: MySensorListener
Super clase: Object
Sub clase: ningúno


Responsabilidades:
• Estar atento al cambio de estado del sensor.
• Notificar al robot cuando el sensor el presionado.

Diagrama de clase (ver aqui)

Diagrama de secuencia (ver aqui)

El cliente enciende el RCX y presiona "RUN". El método main es ejecutado.
1.) Un instancia de la clase Robot es creado. El el contructor de la clase Robot, los sensores son configurados y instancias de MySensorListener son creados y agregados a los sensores.
2.) El método goForward() de la clase Robot es llamado. Los dos motores empiezan a girar en el mismo sentido, haciendo que el robot se mueva hacia adelante.
4.) Un Thread es creado.
5.) El estado de un sensor cambia. El sensor notifica el cambio a su instancia de la clase MySensorListener.
6.) Si como en este caso el nuevo estado es "presionado", el MySensorListener notifica el Robot.
7.) El Robot hace que los motores giren al otro sentido.
8.) El Robot crea un Thread.
9.) El Thread termina.
10.) El Robot hace que los motores giren en sentidos diferentes.
11.) El Robot crea un Thread.
12.) El Thread termina.
13.) El Robot hace que los motores giren en el mismo sentido, haciendo que el robot se mueva hacia adelante.
14. - 22.) Describen pasos 5 hasta 13 pero con el otro sensor "presionado".
23.) El Thread creado en el main termina resultando en la terminación de la programa.

Diagrama de estado (ver aqui)