Antes de empezar unas pequeñas cosas:
Nos faltaba ayer una acción para el giro en redondo. Sin esforzarse mucho,
utilizamos un parches no muy elegante para tratar este caso especial.
Este giro, realmente tiene una velocidad lineal y aceleración lineal igual a 0, pero
ya nos habíamos deshecho de la aceleración angular. Así que usamos un subterfugio
en motores_actualiza_velocidad()
para que, en el caso de radio 0, utilize los
valores de velocidad lineal aplicando a cada motor los resultados con distinto signo.
Aprovechamos y añadimos otro parche para poder meter acciones de “espera”. Si la
velocidad de la acción es 0, el controlador en robot.cpp
espera el número de
segundos especificados en el radio de la acción.
Una cosa más: introducimos una pequeña corrección angular para, por lo menos en línea
recta, intentar que ambos encoders se acerquen al valor. Una constante Kp_angular
que podemos
setear con la línea de comandos será la proporcional de dicha corrección.
error_angulo = encoders_get_posicion_total_left() - encoders_get_posicion_total_right();
velocidad_lineal_objetivo_left += error_angulo * kp_angular;
velocidad_lineal_objetivo_right -= error_angulo * kp_angular;
Por ahora lo vamos a poner a 0 porque vemos que influye en la máxima velocidad alcanzada.
Hemos puesto unos Serial.print
en el main()
para hacer gráficas. Escribimos el número
de acción al principio para poder filtrar los resultados del gnuplot.
~cat /tmp/data.dat | egrep "1 [0-9]{1,} [0-9\.]{4,} [0-9\.]{4,} [0-9\.]{4,} [0-9]{1, }" > /tmp/data2.dat && gnuplot docs/plots/2019-02-05.gp
No conseguimos averiguar porqué tarda tanto en frenar. A pesar de ajustar el pid (kp=2) de nuevo, ya que estábamos siempre por debajo del objetivo en el arranque y siempre por encima en la frenada, está muy lejos del punto óptimo de alcanzar la velocidad final solicitada en la acción.
En la gráfica se ven distintos intentos de un segmento de 18cm, con aceleración y frenado en 0.5 m/s. Se ve que se llega a la distancia objetivo mucho antes de que la velocidad sea 0 (que hemos puesto en la acción como velocidad final). Quizá algún día nos riamos de esto pero es que no damos con el problema. Mañana, más acciones.