Voy a intentar explicar mi problema tan claramente como pueda.
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 algo / alguien. Tengo cámaras que me dan un punto 3D que utilizo para definir una posición y, según un punto de ajuste, 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 el resultado de dos PID diferentes. Una para cada eje de un espacio de coordenadas 3D. El frente es error en Z (distancia), el lado es error en X (desviación del centro).
P1: Cuando pruebo los dos PID de forma independiente, si solo estoy probando la corrección frontal o la corrección lateral, todo funciona. Pero cuando uso los dos PID pierdo el control del robot. ¿Alguna idea de por qué? Cuanto más alta sea la velocidad, menos control tengo.
2: estoy controlando esto a través del software en una computadora y enviando esos valores a una placa que controla los motores. Lo que estoy enviando es valores PWM. Mi problema es que, dado que dos motores nunca son iguales, y dependiendo de la carga / peso que el robot tenga encima, necesito diferentes valores de PWM para CADA rueda, para que el robot avance. A veces, en una escala de 0-1023, si configuro 150 PWM en una rueda y 400 en la otra rueda, el robot no gira, ya que mis cálculos predicen que girará y seguirá en línea recta.
Llevando a mi segunda pregunta.
P2: Cuando se trata de este tipo de robots y control. ¿Cuál es la mejor manera de resolver este problema? Estoy pensando en los codificadores. Controlando a través de RPM en lugar de PWM, y teniendo un PID en cada rueda en la placa del controlador del motor. Lo que lleva a otro tema. Latencia Tengo un bucle de 175ms. Teniendo eso en cuenta, ¿cuál es la mejor solución para mí?