Paso 3: Utilizando un PID
Imaginemos que el primer punto de referencia = 2 garrapatas. Por lo que esperar al bot que corren 2 garrapatas por 0,1 segundos (como he mencionado: se trata de un cálculo aproximado, dejando de lado la aceleración durante el intervalo). Entonces el bot empieza a correr a la velocidad de pérdida. Después de 0.1 segundo se leen los sensores y los codificadores suben con 1 TIC. Nosotros ' re debajo de destino en un error de 1 señal.
En fórmula:
error = setpoint – garrapatas reales
La velocidad real debe ser aumentado porque aspiramos a una velocidad más alta para el bot ejecutar. La forma más sencilla de corregir está agregando el error al siguiente comando de velocidad. En la práctica esto resultan para ser demasiado o también menos para obtener el bot cerca de la velocidad. Ajuste de la corrección puede hacerse multiplicando el error con una constante. Esta forma de corrección se llama 'proporcional'. La afinación constante se llama una 'ganancia'.
En fórmula:
P = Kp * error
Ajuste la corrección proporcional bien reducirá el error con el tiempo significativamente, pero no se llevarla nunca a cero (porque siempre es un error necesario para una corrección proporcional). En muchos casos esta manera de corregir el error también resultará en cambios rápidos, dando como resultado un comportamiento chocante (oscilación) del bot. Para suavizar las reacciones de una parte de 'Integrado' se agrega a la corrección sumando los errores con el tiempo. La parte integrada también puede ajustarse mediante el uso de una ganancia.
En fórmula:
I = Ki * suma de errores * intervalo
Resume finalmente reducirá el error a cero y funciona bien como hay una porción de la izquierda error. Integrando también evitará el aumento infinito de la velocidad. La corrección lleva más tiempo y más trabajos. Así que cuando el error es finalmente reducido a cero, la parte integrada de la corrección será seguir trabajando (y negativo) hasta que la suma de todos los errores se reduzca a cero. Esto se llama sobrepasando los límites.
A menudo (por ejemplo, cuando se aplica en un robot de equilibrio) una tercera parte de la corrección es necesaria para 'silenciar' el overshoot. Esta es la parte 'diferencial'. Trata tomando la diferencia entre 2 errores en el tiempo en cuenta la volatilidad del cambio. También la parte diferencial puede ajustarse mediante el uso de una ganancia.
En fórmula:
D = Kd * (error – error anterior) / intervalo
Adición de las partes dará lugar a una corrección controlada de la velocidad: P + I + D.
El setpoint, el error y la corrección PID son todos en garrapatas (por segundo). Para que el comando para cambiar la velocidad del motor, es necesario volver a calcular esto en un porcentaje de PWM. Cada vez que se ejecuta la parte controlada, se aumenta la velocidad de los motores hasta que el bot funcione a la velocidad deseada.
Como se mencionó anteriormente: este es un control simplificado y funciona sin utilizar la aceleración en las ecuaciones. Mirando el diagrama de velocidad: este script no realiza un movimiento de desaceleración. Al entrar en concursos, necesitará y probablemente tienes el bot arrastrándose por los últimos milímetros hacia la distancia exacta. (Trabajo con RB2 se realiza en centímetros en el mejor).
La codificación completa de Python se proporciona en el script, así que lo dejo fuera de este blog. Realizar un seguimiento de todos los valores y guardar en un csv archivo formateado, nos permitirá analizar los datos de error y ayuda a templar la corrección cambiando las ganancias (para dejar de fumar algo de ejercicio y una sana porción de paciencia). La imagen de abajo muestra un tablero de instrumentos utilizado para el análisis. Obvio yo no estaba allí todavía. -0)
Si el ajuste es hecho correctamente los gráficos de error mostrará curvas agradables, acercándose lentamente a cero.
RB2 es un robot impulsado diferencial: tiene 2 conjuntos de motores independientes. Para cada lado se utiliza otra parte controlada. En teoría ambos conjuntos de motores deben funcionar a la velocidad de destino en el mismo momento en el tiempo y el bot debe correr en línea recta. Punta de un tercero, equilibrio, PID puede utilizarse para corregir las diferencias restantes entre izquierda y derecha.
RB2 producido otro desafío: yo no pude sintonizar la diferencia entre la izquierda y la velocidad adecuada. Todavía no sé razón para que (cambiado motores, cambiado neumáticos, invertir el cableado, trató de otro conductor del motor, cambiado el marco, reemplazado la batería, pero no pudo cerrar la brecha). Así, en mi escritura el PID equilibrio tiene el mayor peso en la corrección total y el máximo de ambas lecturas de codificador se utiliza para calcular la distancia hecha (añadiendo otra inexactitud). Sin embargo creo que esta es la forma de aplicar: primero desconectan el PID para los motores. Cuando se alcanza el resultado deseado y el comportamiento, implementar el PID equilibrado.
Todo lo que queda para correr en plazas, está haciendo vueltas exactamente 90 grados. Y por supuesto: '¿por qué debemos siempre queremos que el bot se ejecute en plazas?'