Voy a intentar explicar mi problema lo más claramente posible.
He estado construyendo un robot que tiene cuatro ruedas, 2 motores y 2 ruedas libres. Es un sistema de accionamiento diferencial.
O --- O Motor Wheels
| |
-o---o- Free Wheels.
El objetivo de este robot es seguir a algo/alguien. Tengo cámaras que me dan un punto 3D que utilizo para definir una posición, y en base a una consigna, corrijo el Error Frontal y el Error Lateral con dos controladores PID.
1 - Los cálculos básicos para ajustar el robot son
Left Wheel = ( FrontError - SideError ) * Acceleration;
Right Wheel = ( FrontError + SideError ) * Acceleration;
El error lateral y el error frontal son resultados de dos PID diferentes. Uno para cada eje de un espacio de coordenadas 3D. Front es el error en Z ( distancia ), Side es el error en X ( desviación del centro ).
P1: Cuando pruebo los dos PIDs independientemente, si sólo pruebo la corrección frontal, o sólo la corrección lateral, todo funciona. Pero cuando uso los dos PIDs pierdo el control del robot. ¿Alguna idea de por qué? A mayor velocidad menos control tengo.
2 - Estoy controlando esto a través de un software en un ordenador, y enviando esos valores a una placa que controla los motores. Lo que estoy enviando son valores PWM. Mi problema es: como dos motores nunca son iguales, y dependiendo de la carga/peso que tenga el robot encima, necesito diferentes valores PWM para CADA rueda, para que el robot avance. A veces, en una escala de 0-1023, si pongo 150 PWM a una rueda y 400 a la otra, el robot no gira como mis cálculos predicen que lo haría y va hacia adelante.
Lo que me lleva a mi segunda pregunta.
P2: Cuando se trata de este tipo de robots y de control. ¿Cuál es la mejor manera de resolver este problema? Estoy pensando en codificadores. Controlar a través de RPM en lugar de PWM, y tener un PID en cada rueda en la placa del controlador del motor. Lo que nos lleva a otra cuestión. La latencia. Tengo un bucle de 175ms. Teniendo en cuenta esto, ¿cuál es la mejor solución para mí?