Nota: le hemos cambiado el nombre a la constante DISTANCIA ENTRE EJES. Deberia llamarse DISTANCIA ENTRE RUEDAS.
Hemos decidido ser menos ambiciosos en el cálculo del ángulo y, en vez de calcular la distancia en función la velocidad, utilizar directamente los pasos del encoder, es decir, usar la misma igualdad pero de otra manera:
if (encoders_get_posicion_left() != encoders_get_posicion_right) {
angulo_actual += (LONGITUD_PASO_ENCODER * encoders_get_posicion_left() -
LONGITUD_PASO_ENCODER * encoders_get_posicion_right())
/
DISTANCIA_ENTRE_RUEDAS;
}
La comparación es simplemente para evitar un cálculo cuando ambas ruedas avancen lo mismo. Nos gustaba la opción de ayer porque nos parecía más correcta, a sabiendas de que habría errores acumulados, pero de esta manera debería ser prácticamente perfecto, aunque la resolución sea menor.
Para nuestra sorpresa, el robot se sigue pasando de largo prácicamente los mismos grados que de la otra manera (quizá algo menos), así que revisando las constantes implicadas vemos que una variación de la distancia entre ruedas de 1 mm provoca una variación del 1% en el cálculo.
Como comentamos en el post del chasis, éste no es muy robusto: uno de los motores tiene cierta holgura y además con el tiempo parece que las ruedas “se abren” un poco, como los fórmula 1. Esto hace que la rueda apoye mayormente en la parte interior, con lo cual la distancia del centro del eje al punto de apoyo disminuye.
Así que, de una manera un poco ad hoc, introducimos una constante de Shinner, que calculamos de forma empírica. Únicamente con dos milimetros menos el robot gira exactamente 90 grados. Haciéndolo 12 veces seguidas se nota una desviación prácticamente imperceptible, pero no creemos que tenga sentido afinar más, sobre todo teniendo en cuenta el margen de error que introduce este chasis defectuoso.
Hicimos algunas pruebas para comprobar la diferencia entre este cálculo y el de ayer, ya con la distancia ajustada, y la de ayer sigue fallando, aumentando más lentamente. Volveremos sobre esto porque nos gustaría aplicar el cálculo del ángulo utilizando la velocidad. Pero por el momento lo dejamos así (y empieza a ser una frase recurrente al final de los posts).