domingo, 29 de mayo de 2011

Controlador PD

He estado trabajando en mejorar el comportamiento de la dirección del vehículo. En las últimas entradas comenté que al modificar la velocidad máxima del cliente ya no funcioaba correctamente el control de dirección que venía por defecto, así que diseñé uno desde cero. Una buena solución fue aplicar un controlador P (controlador proporcional) en el vehículo, con lo que se se conseguía un nivel de giro proporcional a la distancia a los bordes:

giro=giro+Kp*error

Tomé como Kp -0.001, después de probar con varios valores. Aunque existen algunas técnicas, en algunas fuentes de bibliografía recomendaban ajustarla a ojo esta constante mediante pruebas.

Este controlador me proporcionaba unos resultados muy aceptables, pero el vehículo tendía a oscilar un poco rectas, y probé con un controlador PD, que estuve informandome sobre su comportamiento y era muy adcuado para suavizar las salidas del sistema (el giro de volante en nuestro caso).

giro=giro+Kp*error+Kd*(error-error_anterior)

En este caso tomé la misma Kp y como Kd -0.01, y los resultados han sido muy buenos, ya que el coche no se ha salido de la calzada en ningún momento en los circuitos probados (óvalos, ciudades y uno real de Montmeló), y no solo eso, sino que además el coche tiende a ir por el centro de la calzada. Y todo ello de forma suave.

4 comentarios:

  1. Habría que representar esa funcíon en Matlab :) .. y ver los ceros.. los polos... y sobre todo.. la forma de subamortiguación... que la podríamos hacer variable en función de la velocidad del coche!

    ResponderEliminar
  2. Según la fuente que consulté, la fórmula

    giro=giro+(Kp*error)+Kd*(error-error_anterior)

    representa un PID (y sin el último sumando tengo entendido que sería un PD).

    Tenía pensado que la Kp y Kd fuesen dinámicas y dependiesen de la velocidad del coche, pero no tengo muy claro cómo ajustarlas; parece que cuando va a alta velocidad el volante tiene otro comportamiento y necesita más giro para dar el mismo resultado que a baja velocidad.

    Por otra parte, también he encontrado un problema en la caja de cambios y es que no permite la 7ª marcha, pero sé que el F1 la tiene, ya que cuando se juega como player si deja cambiar hasta la 7ª y esa marcha es bastante importante en rectas. Investigaré si es que hay que configurar algún fichero XML para que la admita.

    Hasta luego!

    ResponderEliminar
  3. Ya está corregida en la entrada la confusión que tuve entre PID y PD.

    ResponderEliminar