29
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
De esta forma, siendo RBA la matriz de rotación del objeto respecto al sistema
r r
fijo, y r A y r B vectores expresados en el sistema fijo y del objeto, respectivamente,
se tiene:
r r r r
r A = RBA r B ; r B = ( RBA )T r A
siendo rij el coseno del ángulo entre el eje i del sistema de referencia fijo y el
eje j del sistema de referencia del objeto.
30
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
Los ángulos RPY son roll, pitch y yaw, que en terminología náutica se
corresponderían con alabeo, cabeceo y guiñada.
2.1.3. Cuaterniones
a cos(θ / 2)
b ( µ / µ ) sen(θ / 2)
r
q= = x
c ( µ y / µ ) sen(θ / 2)
d ( µ z / µ ) sen(θ / 2)
31
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
r
donde µx, µx y µx son las componentes del vector µ y µ el módulo de dicho
r
vector. El parámetro θ representa el valor de la rotación sobre el vector µ .
Dada una de estas representaciones, existe una relación entre ella y las
demás, de forma que se puede pasar de una representación a otra aplicando la
correspondiente fórmula.
Llegado a este punto cabe plantearse una situación importante para el resto
del desarrollo del algoritmo. La cuestión es qué representación es la más adecuada
para calcular de forma continua, es decir, para cuál conviene más seguir su
evolución en función de las medidas de los sensores. A priori se podría tomar
cualquiera, ya que teniendo una se puede calcular fácilmente la deseada.
Los cuaterniones se presentan como la solución más adecuada, por ser tan
sólo cuatro los parámetros a actualizar y por presentar menores errores en la
computación, según diversos estudios.
Y los ángulos roll, pitch y yaw se pueden calcular también a partir de esta
matriz:
32
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
siendo atan2(x,y) el arco tangente del ángulo x/y, teniendo en cuenta el signo
de x e y para determinar el cuadrante (por ejemplo, arctg 2(−2,−2) = -135º).
a& a −b −c − d 0
r
b& b a −d c ω x
q& = = 0.5
c& c d a − b ω y
&
d d −c b a ω z
33
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
O, lo que es lo mismo,
r r
x& = A ⋅ x
r
donde x es el vector de estado y A la matriz dinámica del sistema.
0 − ωx − ωy − ωz
ω 0 ωz − ω y r
r&
x = 0 .5
x
x
ω y − ωz 0 ωx
ω z ωy − ωx 0
1 / τ ω 0 0
r&
0 ω
r
ω= 0 1/τ ω
0 0 1 / τ ω
34
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
siendo
ω x
ω = ω y
r
ω z
x1 ω x
x ω
2 y
x3 ω z
r
x = x4 = a
x5 b
x6 c
x d
7
ω& x 2 / τ ω 0 0 ω x
ω& 0 ω
y 2 /τω 0 0 y
ω& z 0 0 2 /τω ω z
r& − ωz a
x = a& = 0.5 0 − ωx − ωy
b& ωx 0 ωz − ωy b
0
ωy − ωz 0 ω x c
c&
d&
ωz ωy − ωx 0 d
Ahora el sistema es no lineal, dado que los ω i son parte del vector de estado,
y están multiplicando a otros estados.
35
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
N
x
z E
y
0
g = 0 m / s 2
r
9,82
26,8503
m = − 1,3929 nT
r
33,7885
36
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
0
rA
g = 0
1
0,62182
m = − 0,03226
rA
0,78249
y1 ω x
y ω
2 y
y3 ω z
B
y 4 g1 g1B m1B
r r r
y = y5 = g 2B , siendo g B = g 2B y m B = m2B
B
y6 g 3 g 3B m3B
y m B
7 1B
y8 m 2
y m B
9 3
r r
Los vectores g B y m B serán vectores normalizados, para poder relacionarlos
con los vectores de referencia.
r r
Como se ha visto en el apartado 2.1.1, la relación entre los vectores g y m
expresados en uno y otro sistema de referencia viene dada por:
r r r r
g A = RBA g B ; g B = ( RBA )T g A
r r r r
m A = RBA m B ; m B = ( RBA )T m A
37
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
x&1 = (1 / τ ω ) x1
x& 2 = (1 / τ ω ) x2
x&3 = (1 / τ ω ) x3
x& 4 = (− x1 x5 − x2 x6 − x3 x7 ) / 2
x&5 = ( x1 x4 + x3 x6 − x2 x7 ) / 2
x&6 = ( x2 x4 − x3 x5 + x1 x7 ) / 2
x&7 = ( x3 x4 + x2 x5 − x1 x6 ) / 2
y1 = x1
y2 = x2
y3 = x3
y4 = 2( x5 x7 − x4 x6 )
y5 = 2( x6 x7 + x4 x5 )
y6 = x42 − x52 − x62 + x72
y7 = ( x42 + x52 − x62 − x72 )0,62182 − 2( x5 x6 + x4 x7 )0,03226 + 2( x5 x7 − x4 x6 )0,78249
y8 = 2( x5 x6 − x4 x7 )0,62182 − ( x42 − x52 + x62 − x72 )0,03226 + 2( x6 x7 + x4 x5 )0,78249
y9 = 2( x5 x7 + x4 x6 )0,62182 − 2( x6 x7 − x4 x5 )0,03226 + ( x42 − x52 − x62 + x72 )0,78249
38
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
r
El filtro de Kalman trata de estimar el estado x ∈ ℜ n de un proceso en tiempo
discreto gobernado por la ecuación en diferencias lineal estocástica
r r r r
xk = Axk −1 + Buk −1 + wk −1
r
con una medida y ∈ ℜ m que es
r r r
y k = Hxk + vk
r r
Las variables aleatorias wk y vk representan el ruido en el proceso y en la
medida, respectivamente. Se suponen independientes, blancos y con una distribución
normal dada por
r
p ( w) ≈ N (0, Q)
r
p (v ) ≈ N (0, R )
[
Pk = E ( xk − xˆ k )( xk − xˆ k )T ]
siendo x̂k la estimación del vector de estado.
39
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
Pk− = APk −1 AT + Q
K k = Pk− H T ( HPk− H T + R ) −1
r
xˆk = xˆk− + K k ( yk − Hxˆk− )
Pk = ( I − K k H ) Pk−
r r r
yk = h( xk , vk )
∂f [i ] r
A[i , j ] = ( xˆk −1 , uk −1 ,0)
∂x[ j ]
∂f [i ] r
W[i , j ] = ( xˆk −1 , u k −1 ,0)
∂w[ j ]
∂h[i ] −
H [i , j ] = ( xˆk ,0)
∂x[ j ]
∂h[i ]
V[i , j ] = ( xˆk− ,0)
∂v[ j ]
40
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
r
xˆk− = f ( xˆk −1 , uk −1 ,0)
∂f ( x) xk +1 − xk
x& = ≈
∂t T
r r r
Ecuación dinámica xk = f ( xk −1 , wk −1 ) :
41
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
r r r
Ecuación de medida yk = h( xk , vk ) :
r r
Las covarianzas de los ruidos wk y vk se definen en base a las desviaciones
típicas de las señales de los sensores. A priori, estas desviaciones típicas vendrán
dadas por las especificaciones de los fabricantes de los sensores.
42
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
∂f [i ]
W[i , j ] = ( xˆk −1 ,0) ⇒ W = T ⋅ I 7 x 7
∂w[ j ]
∂h[i ] −
V[i , j ] = ( xˆk ,0) ⇒ V = I 9 x 9
∂v[ j ]
0 .1 0 0 0 0 0 0
0 0 .1 0 0 0 0 0
0 0 0 .1 0 0 0 0
Q=0 0 0 0.01 0 0 0
0 0 0 0 0.01 0 0
0 0 0 0 0 0.01 0
0 0.01
0 0 0 0 0
43
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
v 2 0 0 0 0 0 0 0 0
2
0 v 0 0 0 0 0 0 0
0 0 v2 0 0 0 0 0 0
0 0 0 r2 0 0 0 0 0
R = 0 0 0 0 r2 0 0 0 0
0 0 0 0 0 r2 0 0 0
0 0 0 0 0 0 s2 0 0
0 0 0 0 0 0 0 s2 0
0 0 0 0 0 0 0 0 s2
∂f [i ]
A[i , j ] = ( xˆk −1 ,0) ⇒
∂x[ j ]
T
1+ τ 0 0 0 0 0 0
ω
0 T
1+ 0 0 0 0 0
τω
T
0 0 1+ 0 0 0 0
τω
Ak = − T x −
T
x6 −
T
x7 1 −
T
x1 −
T
x2
T
− x3k −1
2 5k −1 2 k −1 2 k −1 2 k −1 2 k −1 2
T T T T T T
x4k −1 − x7k −1 x6 x1 1 x3 − x2k −1
2 2 2 k −1 2 k −1 2 k −1 2
Tx T
x4
T
− x5k −1
T
x2 −
T
x3 1
T
x1k −1
2 7k −1 2 k −1 2 2 k −1 2 k −1 2
T T T T T T
− x6k −1 x5 x4 x3 x2 − x1 1
2 2 k −1 2 k −1 2 k −1 2 k −1 2 k −1
44
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
- Cálculo del vector de estado a priori, x̂k− , usando el modelo dinámico del
sistema.
∂h[i ] −
H [i , j ] = ( xˆk ,0) ⇒
∂x[ j ]
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
− −
0 0 0 − 2x 6k 2x 7k − 2 x4−k −
2 x5k
0 0 0 2x −
5k 2x −
4k 2 x7−k 2 x6−k
− −
0 0 0 2x 4k − 2x 5k − 2 x6−k −
2 x7k
Hk = 2 x4k m1 + 2 x7−k m2A
− A
2 x5k m1A + 2 x6−k m2A
−
− 2 x6−k m1A + 2 x5−k m2A − −
− 2 x7k m1 + 2 x4k m2
A A
0 0 0
− 2 x6−k m3A + 2 x7−k m3A − 2 x4−k m3A + 2 x5−k m3A
A
− 2 x7−k m1A + 2 x4−k m2A 2 x6−k m1A − 2 x5−k m2A 2 x5−k m1A + 2 x6−k m2A − A −
− 2 x4k m1 − 2 x7k m2
0 0 0
+ 2 x5−k m3A 2 x4−k m3A + 2 x7−k m3A + 2 x6−k m3A
2 x6−k m1A − 2 x5−k m2A 2 x7−k m1A − 2 x4−k m2A 2 x4−k m1A + 2 x7−k m2A 2 x5−k m1A + 2 x6−k m2A
0 0 0
+ 2 x4−k m3A − 2 x5−k m3A − 2 x6−k m3A + 2 x7−k m3A
45
Unidad de Medida Inercial. Algoritmo de Estimación e Implementación Software
Desarrollo teórico
r
- Actualización de x y de su matriz de covarianza.
r
xˆk = xˆk− + K k ( yk − h( xˆk− ,0))
Pk = ( I − K k H k ) Pk−
46