Open BrutenCristian opened 4 years ago
Profe yo lo había pensado para que siga a una persona, si coloco alguna señal que haga de comunicación con la persona, y si se aleja una cierta distancia, para, estaría bien?
no del todo. Lo que esta mal es el estado de analisis central que estas usando y que el estado de avanzar no vuelve a ningun otro nunca.
Si pongo como estado inicial el de estar en el rango de distancia cerca de la persona, el estado de avanzar volvería a ese estado continuamente, sino dejaría de avanzar, ahí sigue mal la maquina?
Profe, recién me di cuenta que igual me falto la flecha que conecta avanza con volver a analizar si hay obstáculos
Nota: investigar time.h, librería para el espera
Revisar la parte de Analizo que hay un error, mal funcionamiento
Poner en el main, con un swtich case, la representación en código del diagrama
Aun dista bastante del codigo objetivo. Y otra cosa, cuanto mas veo la maquina de estados mas dudas me da. No me termina de cerrar.
Los estados de que usas de analisis no estan del todo bien.
Entiendo tu idea. Pero no me cierra para el funcionamiento correcto del lazarillo. Por ejemplo tu primer estado es "Dentro del rango" y de ahi vas los estados de "analizo" esos no son estados son mas bien acciones. Y eso es lo que queda mal en tu codigo. Deberías replantearte cuales son los estados de tu lazarillo. En mi opinion esos 4 estados los deberias dejar dentro de un estado reposo que sea el encargado de analizar todas las opciones y decida si se mueve derecho, si hace un giro a la izquierda o a la derecha para esquivar un obstaculo. Con eso la maquina quedara mas clara. Aunque las funciones sean mas grandes. Tu duda con usar o no a la espera como una función de estado esta justamente en que esa espera en realidad tambien es una accion y no un estado. Te pido que lo pienses con tranquilidad teniendo en cuenta lo que te escribo. Pensalo y el viernes me comentas lo que concluiste.
Profe, para poder replantear bien la maquina le hago una consulta, el estado que es lo que debe plantear en la máquina?, por ejemplo un estado de analisis, y dentro de ese estado todos los analisis del lazarillo?
El mar., 8 sept. 2020 a las 18:18, DamRCorba (notifications@github.com) escribió:
Aun dista bastante del codigo objetivo. Y otra cosa, cuanto mas veo la maquina de estados mas dudas me da. No me termina de cerrar.
Los estados de que usas de analisis no estan del todo bien.
Entiendo tu idea. Pero no me cierra para el funcionamiento correcto del lazarillo. Por ejemplo tu primer estado es "Dentro del rango" y de ahi vas los estados de "analizo" esos no son estados son mas bien acciones. Y eso es lo que queda mal en tu codigo. Deberías replantearte cuales son los estados de tu lazarillo. En mi opinion esos 4 estados los deberias dejar dentro de un estado reposo que sea el encargado de analizar todas las opciones y decida si se mueve derecho, si hace un giro a la izquierda o a la derecha para esquivar un obstaculo. Con eso la maquina quedara mas clara. Aunque las funciones sean mas grandes. Tu duda con usar o no a la espera como una función de estado esta justamente en que esa espera en realidad tambien es una accion y no un estado. Te pido que lo pienses con tranquilidad teniendo en cuenta lo que te escribo. Pensalo y el viernes me comentas lo que concluiste.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/BrutenCristian/TP_Maquina-de-estado/issues/1#issuecomment-689141510, or unsubscribe https://github.com/notifications/unsubscribe-auth/APHMJJ5I2NQQOSMYYED3FDTSE2NR5ANCNFSM4PL355YA .
No. No es eso. Vos estas pensando que es lo que tiene que hacer, y no estas pensando en cual es la situacion para que tenga que hacerlo. El estado es la situacion y las acciones se ejecutan en el estado hasta que produzcano detecten un cambio de situacion, osea un cambio de estado. Pensalo
Ah, creo que ya entendi, un estado sería, por ejemplo, que el lazarillo se esté moviendo, y la acción sería que este revisando continuamente el rango de distancia y si aparece un obstáculo, o no es así?
El mar., 8 sept. 2020 a las 19:13, DamRCorba (notifications@github.com) escribió:
No. No es eso. Vos estas pensando que es lo que tiene que hacer, y no estas pensando en cual es la situacion para que tenga que hacerlo. El estado es la situacion y las acciones se ejecutan en el estado hasta que produzcano detecten un cambio de situacion, osea un cambio de estado. Pensalo
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/BrutenCristian/TP_Maquina-de-estado/issues/1#issuecomment-689164034, or unsubscribe https://github.com/notifications/unsubscribe-auth/APHMJJY5QCZCLM4T7QXRCGLSE2UANANCNFSM4PL355YA .
Si, es por ahi.
Profe, pero en ese caso, no me quedarían muy pocos estados?, osea esta bien la maquina, porque yo creo que me quedarían dos o tres estados con muchas acciones, porque en si el lazarillo tiene que moverse, o estar en reposo esperando que un camino se libere
El mar., 8 sept. 2020 a las 19:31, DamRCorba (notifications@github.com) escribió:
Si, es por ahi.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/BrutenCristian/TP_Maquina-de-estado/issues/1#issuecomment-689170087, or unsubscribe https://github.com/notifications/unsubscribe-auth/APHMJJ6QG45WRFQWVHAM45TSE2WDPANCNFSM4PL355YA .
Puede ser, eso no seria un problema. El problema seria que consideres a una accion como un estado o a un estado como una accion. Por eso repensalo, tomate tu tiempo, y lo vemos.
Ok, profe, cuando tenga el diagrama replanteado le aviso. Muchas gracias
El mar., 8 sept. 2020 a las 19:49, DamRCorba (notifications@github.com) escribió:
Puede ser, eso no seria un problema. El problema seria que consideres a una accion como un estado o a un estado como una accion. Por eso repensalo, tomate tu tiempo, y lo vemos.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/BrutenCristian/TP_Maquina-de-estado/issues/1#issuecomment-689176580, or unsubscribe https://github.com/notifications/unsubscribe-auth/APHMJJYFDJWMVJ6XMD57O4LSE2YHTANCNFSM4PL355YA .
Cristian, Despues de la actualizacion del diagrama no veo actualizaciones en el codigo. Por favor reorganiza tu repo con una carpeta codigo que contega una carpeta src con los archivos.c y otra carpeta lib con los archivos.h
El código lo hice todo devuelta pero no subi nada todavia, lo que esta ahora en git, que esta todo para corregir, lo junto en una carpeta aparte y aclaró que es lo que estaba mal? y después subo lo nuevo?
El mar., 15 sept. 2020 a las 8:57, DamRCorba (notifications@github.com) escribió:
Cristian, Despues de la actualizacion del diagrama no veo actualizaciones en el codigo. Por favor reorganiza tu repo con una carpeta codigo que contega una carpeta src con los archivos.c y otra carpeta lib con los archivos.h
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/BrutenCristian/TP_Maquina-de-estado/issues/1#issuecomment-692667318, or unsubscribe https://github.com/notifications/unsubscribe-auth/APHMJJ2FFO6U4747BZFW22TSF5JC5ANCNFSM4PL355YA .
Profe lo que ordene recién que era lo viejo, se me modifico la fecha porque no lo había subido con el githubdesktop, así que como ahora lo modifique se modifico la fecha, igual se lo entregue todo en las fechas puestas, solo que estaba lleno de errores. Ahora voy a subir lo nuevo
Buenas profe, ya subí todo, creo que el ordenamiento esta bien, aguardo sus correcciones. Desde ya muchas gracias, y disculpe las reiteradas molestias por mail.
No hay problema Cristian, mientras que la casilla no te tome como spam jaja. Revise el codigo, esta bastante bien. Por un lado tengo una correccion semantica en la funcion en la que determinas los giros, ahi cada case es un caracter, deberias hacer que el case se haga por medio de una etiqueta mas representativa del tipo de giro. Por ejemplo para 'd' hace un #define DERECHA 'd' y usa DERECHA en el case y no la letra 'd'.
Lo otro que no entiendo es poque tenes un while que i<2 en tu main.
Lo del i<2 lo hice para que antes de preguntar si desea dejar el lazarillo encendido haga el análisis, y después el movimiento, porque sino lo sacaba antes de moverse. Igual eso de i<2 quería ver de cambiarlo para poner algo un poco mejor, pero me olvide la verdad
En principio sacalo, y deja un while(1) para que este siempre en movimiento. Usa la funcion kbhit dentro del bucle infinito para que al precionar una tecla te de la opcion de apagarlo.
Ok profe, entonces le cambio lo del while y los caracteres de switch de giros
Profe, ya agregue el kbhit, y las constantes para los giros
Cristian, esta bastante cerca, pero esta mal porque no esta cumpliendo con la maquiena de estados. Tu puntero a funciones corre por los tres estados que evalua i cuando en realidad deberia arracar por el estado de analiza y esta devolver el proximo estado, ese proximo estado deberia evaluar si sigue siendo el que se va a ejecutar, o si tiene que volver a analiza. Los que haces vos es recorrerlos en forma secuencia y lo que deberias hacer es dejar que la logica de la maquina decida que estado ejecutar. Tal como lo mostre en el ejemplo.
Osea que tendría que hacer que lo que yo hago en el while, la máquina lo haga sola
El mié., 16 de septiembre de 2020 8:43 p. m., DamRCorba < notifications@github.com> escribió:
Cristian, esta bastante cerca, pero esta mal porque no esta cumpliendo con la maquiena de estados. Tu puntero a funciones corre por los tres estados que evalua i cuando en realidad deberia arracar por el estado de analiza y esta devolver el proximo estado, ese proximo estado deberia evaluar si sigue siendo el que se va a ejecutar, o si tiene que volver a analiza. Los que haces vos es recorrerlos en forma secuencia y lo que deberias hacer es dejar que la logica de la maquina decida que estado ejecutar. Tal como lo mostre en el ejemplo.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/BrutenCristian/TP_Maquina-de-estado/issues/1#issuecomment-693723525, or unsubscribe https://github.com/notifications/unsubscribe-auth/APHMJJZCPVOG34NG6NKHJALSGFERRANCNFSM4PL355YA .
Profe si creo un función general de distancia, que mantenga un bucle siempre que sea menor a la del archivo de configuración, y después le agrego un dato mas a la estructura que tengo definida con un carácter que indique el estado próximo estaría bien ?
Profe si creo un función general de distancia, que mantenga un bucle siempre que sea menor a la del archivo de configuración, y después le agrego un dato mas a la estructura que tengo definida con un carácter que indique el estado próximo estaría bien ?
Profe acabo de subir lo que puse en este mensaje al repositorio
Cristian. No es correcto. Guiate con el ejemplo que di en clase. El main te tiene que quedar igual. Cada estado tiene que estar llamado por un case de un switch o un vector de punteros a funciones. El estado es representado por una funcion que devuelve un estado. No esta asi en tu codigo.
Buenas profe, recién modifique el main, aguardo las correcciones
Cristian, dentro del while 1 solo deberias estar recorriendo los estados de la maquina. Esto no es lo pedido.
while(valores.rango_d==FUERA)
{
Distancia(var);
}
En todo caso deberias estar llamando a un estado de analisis, o hacer que Distancia (Var) sea llamado en cada uno de tus estados, ya que siempre la usas.
Recién metí a distancia en las funciones reposo y movimiento, también lo saque del main
Buenas profe, le llego el ultimo commit que hice?
Ahora si, tp aprobado.
Muchas gracias profe!
Cristian, la maquina no esta bien. Asi como la planteaste una vez que no hay obstaculos avanza hasta el infinito. Lo cual no es correcto. Deberias reformularla. Vas a tener que avanza, se queda quieto, dobla a la derecha, dobla a la izquierda. Para cada una de estos estados se tiene que analizar las condiciones y esto no pasa en un estado de analisis, sino en cada uno de ellos.