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)
|