2012-05-22 16 views
5

Estoy trabajando en un control de vehículo y usando un sensor 9DOF (acelerómetro, magnetómetro y giroscopio). Para el ángulo de guiñada, tengo un problema de discontinuidad en pi rad. (180 grados). Estoy controlando el vehículo con un controlador PID y cuando el vehículo gira más de 180 grados, el signo cambia repentinamente (de 180 a -180) y esto hace que el controlador actúe de forma extraña. El mismo problema ocurrirá cuando gire más de -180 grados también.Cómo lidiar con la discontinuidad del ángulo de guiñada a 180 grados

Como método, estoy usando una matriz de coseno de dirección para calcular los ángulos de euler. (método recomendado para el sensor de chispa).

Mi pregunta es ¿qué tipo de enfoque debo usar? Cómo lidiar con esta discontinuidad en el caso de usar un controlador PID para controlar el ángulo de guiñada.

+1

¿Es esta pregunta realmente acerca de cómo agregar 360? – Eiko

Respuesta

0

que tenían el mismo problema y estoy haciendo lo siguiente:

#define MOD(a) ((a > 180.0) ? (a - 360.0) : ((a < -180.0) ? (a + 360.0) : a)) 

La diferencia de 2 ángulos simplemente puede volver a poner a -180d/+ 180d con tal fórmula.

+0

Para el rango -180/+ 180 grados, ¿cuándo será válida esta condición? (a> 180.0). El ángulo nunca supera a 180. ¿Estoy equivocado? – tarik

0

¿Este es tu problema?

After desired angle changes it's sign(ie. 180->-180) 
then suddenly control input(ie. P * error) becomes bigger. 

Por ejemplo.

-------------------------------- 
| desired | real | error | 
|-----------|--------|---------| 
| 170 | 160 | 10 | 
| -170 | 160 | -330 | 
-------------------------------- 

Si su problema es el mismo que entendí, ¿qué tal esto? Antes de irnos, tenga en cuenta que Se supone que todos los valores de los ángulos están en el rango de [-pi, pi].

error = desired - real; 
if(error > 180) 
    error = error - 360; 
else if(error < -180) 
    error = error + 360; 
else 
    error = error;//do nothing 

Este método siempre elige una dirección tal que la entrada de control se hace más pequeño. (Usted sabe que hay dos opciones para la dirección)

Cuestiones relacionadas