Obligatorio 7 - Estados - Duda

Obligatorio 7 - Estados - Duda

de Bruno Ismael Rodriguez Coelho -
Número de respuestas: 2

Buenas tardes, que tal? Tengo una duda respecto de como dividir un movimiento en particular en estados. Yo tengo que dividir cada instrucción en estados? (Que yo no creo que sea asi) o es más bien dividir por bloques, tipo tal estado hace esto, tal otro esto y así con la "suma" de los bloques conformo todo el movimiento? (Me convence más esto de los bloques)

Además, 2da duda, el objetivo de los estados, es que yo pueda parar el bicho independientemente si termina el movimiento que estaba haciendo? Tipo estaba haciendo tal movimiento, y si yo le mando otro comando para que haga otro movimiento, ya desde donde se quedó debería empezar el nuevo movimiento?

Saludos Bruno.

En respuesta a Bruno Ismael Rodriguez Coelho

Re: Obligatorio 7 - Estados - Duda

de Leandro Diaz -
hola

Sobre la primera pregunta, podemos dividir el código como queramos, cuánto más divido, más natural pasará de un movimiento a otro, pero más complejo nos quedará. Dentro de un movimiento van a identificar bloques separados por delay, la idea es que cada uno de esos bloques sea un estado. 

Ejemplo:

servo_ctrl.move_servo(frl, home_frl+25); //Levanta pierna frontal derecha
servo_ctrl.move_servo(rll, home_rll+25); //Levanta pierna trasera izquierda
servo_ctrl.move_servo(frh, home_frh+45); //Mueve muslo delantero derecho hacia adelante
servo_ctrl.move_servo(rlh, home_rlh); //Mueve muslo trasero izquierdo hacia adelante
servo_ctrl.move_servo(rrh, home_rrh-45); //Embuja muslo trasero derecho
servo_ctrl.move_servo(flh, home_flh); //Empuja muslo delantero izquierdo
delay(160);

servo_ctrl.move_servo(frl, home_frl); //Bajo pierna frontal derecha
servo_ctrl.move_servo(rll, home_rll); //Bajo pierna trasera izquierda
delay(100);

servo_ctrl.move_servo(fll, home_fll-25); //Levanta pierna frontal izquierda
servo_ctrl.move_servo(rrl, home_rrl-25); //Levanta pierna trasera derecha
servo_ctrl.move_servo(flh, home_flh-45); //Mueve muslo delantero izquierdo hacia adelante
servo_ctrl.move_servo(rrh, home_rrh); //Mueve muslo trasero derecho hacia adelante
servo_ctrl.move_servo(rlh, home_rlh+45); //Empuja muslo trasero izquierdo
servo_ctrl.move_servo(frh, home_frh); //Empuja muslo delantero derecho
delay(140);

En ese ejemplo tengo 3 grandes bloques, el estado 1 será desde el inicio hasta delay(160) incluido, estado 2 será hasta delay(100) incluido y el estado 3 será hasta delay(140) incluido. Puedo particionarlo más pero me va a quedar más complejo.


Pregunta 2: ahora como esta particionado en estados, al cambiar el movimiento, el bicho no tienen que terminar de completar todo el movimiento, solo terminara de realizar el movimiento correspondiente al estado y luego ser irá al otro movimiento. Donde empezar, lo veremos la próxima clase. En el obligatorio ese no nos centremos como pasar de un movimiento a otro, primero hagan todas las funciones en estados y vean que anden, en el próximo laboratorio vamos a ver como cambiarnos de movimiento.

Mañana en clase lo vemos si quedo muy confusa la explicación, pero avancen particionando los movimientos y probando, no hagan todo de una, empiecen con avanzar y vean que funciona igual.