¿Hay algún problema con esto?
El principal problema con esto es que, si bien su solución propuesta corregirá instantáneamente una falta de coincidencia entre el rendimiento de los motores, no corregirá el error acumulado, y mucho menos los errores de posición más complejos, como el error de Abbe (ver más adelante).
¿Cuál es un mejor enfoque?
Hay varias cosas que puede hacer, dependiendo de cuál sea su tolerancia a los errores y cuánto esfuerzo desea poner en corregirlos.
El primer paso sería configurar un par de bucles PID, uno para cada rueda, dándoles a ambos la misma posición de demanda. Como sugerí en mi respuesta a una pregunta similar , si mantiene ambas ruedas dentro de un error muy estricto de donde les pide que estén, entonces tomará algún tiempo acumular un error suficiente para causar un viraje notable.
También será mucho más fácil sintonizar dos bucles PID de nivel de motor nominalmente independientes que sintonizar un único sistema combinado complejo e interdependiente. Para soportar cualquier cambio en el control de nivel superior, realmente necesita que cada motor se comporte de la manera más similar posible al otro motor durante la mayor cantidad de tiempo posible, y eso realmente requiere servo bucles separados.
Sin embargo, hay una serie de complicaciones adicionales, y depende de la precisión que necesite y de cuánto esfuerzo esté dispuesto a hacer para corregirlas en cuanto a la solución que elija. Puede ser que Dead Reckoning sea suficiente, o puede que necesite agregar una determinación de posición relativa o absoluta a su robot.
Un problema es que incluso si las ruedas izquierda y derecha mueven 1000 recuentos de codificador, aún puede terminar en una posición diferente en dos carreras diferentes.
Por ejemplo, supongamos que tiene un error de seguimiento máximo de 10 conteos de codificador, y sus motores están funcionando a una velocidad de 10 conteos de codificador por iteración de bucle PID. Su motor izquierdo podría moverse 5,10,10,10 ... 10,5 mientras que su motor derecho podría tener un perfil de 4,11,10,10 ... 10,5 e incluso esa ligera diferencia en la aceleración al inicio del movimiento podría hacer que el robot se dispare ligeramente en la dirección incorrecta. No solo eso, sino que cuanto más avance en esa dirección, mayor será el error en términos absolutos. De esto es de lo que estamos hablando cuando hablamos del error de Abbe , y sin un modelo cinemático complejo o algún tipo de referencia externa, nunca podrá corregirlo.
Para obtener más información, consulte mi respuesta a una pregunta similar pero no muy duplicada: ¿Cómo puedo usar la biblioteca PID de Arduino para conducir un robot en línea recta?
y mi respuesta a la optimización de Line Follower también relacionada