Return to Video

cs373_unit2_31_p_Kalman-Matrices

  • 0:00 - 0:08
    Tengo un nuevo reto de programación para usted que le llevará un tiempo,
  • 0:08 - 0:13
    me gustaría que implementara un filtro de Kalman multidimensional para el ejemplo
  • 0:13 - 0:14
    que le acabo de dar.
  • 0:14 - 0:20
    La clase matrix es una clase para la manipulación de matrices que hará que le sea muy fácil.
  • 0:20 - 0:26
    Tiene una función que inicializa matrices. Te voy a mostrar un ejemplo en un segundo.
  • 0:27 - 0:28
    Se puede ajustar a 0.
  • 0:28 - 0:31
    Se puede calcular una matriz de identidad.
  • 0:31 - 0:33
    Puede imprimir una matriz para mostrarla.
  • 0:34 - 0:39
    Sobrecarga de operadores como la suma, la resta,
  • 0:39 - 0:44
    la multiplicación, e incluso calcula la transpuesta de una matriz,
  • 0:46 - 0:49
    y en algo más de código, puede invertir una matriz
  • 0:49 - 0:51
    usando factorización de Cholesky.
  • 0:52 - 0:53
    Aquí hay una función llamada inverse.
  • 0:54 - 0:56
    Esta clase matriz está disponible.
  • 0:57 - 0:59
    Se trata de una versión reducida de lo que se encuentra en las librerias típicas.
  • 1:00 - 1:02
    Y quiero demostrarselo en sólo un segundo.
  • 1:03 - 1:08
    Usted puede hacer una matriz con un comando como este con el argumento entre paréntesis.
  • 1:09 - 1:10
    Es una matriz de 2 dimensiones.
  • 1:10 - 1:12
    En este caso se trata de un vector vertical.
  • 1:13 - 1:17
    Y con el comando show, puede imprimir el resultado del vector vertical.
  • 1:18 - 1:20
    Puede calcular la transpuesta de la siguiente manera.
  • 1:20 - 1:23
    Si ejecutas esto, verás el vector horizontal.
  • 1:24 - 1:28
    Y decir que si desea multiplicar una matriz por un vector,
  • 1:28 - 1:31
    entonces podemos hacer una matriz 2 x 2 con esta inicialización de aquí,
  • 1:32 - 1:34
    una matriz de [12., 8.] y [6., 2.].
  • 1:34 - 1:35
    Podemos imprimir esta matriz.
  • 1:36 - 1:38
    Aquí esta: [12, 8, 6, 2].
  • 1:39 - 1:40
    Estos son los valores de aquí.
  • 1:40 - 1:42
    Y podemos multiplicar F y a.
  • 1:44 - 1:45
    Así que aquí b = F * a.
  • 1:47 - 1:50
    Y si mostramos el resultado, obtenemos el vector 200 80.
  • 1:51 - 1:56
    Eso se obtiene 10 * 12 + 10 * 8 es 200.
  • 1:56 - 1:59
    10 * 6 + 10 * 2 es 80.
  • 2:02 - 2:05
    Así que usando mi libreria matriz, puse un estado inicial.
  • 2:07 - 2:11
    Se trata de un sistema de seguimiento en 1D, donde el estado es la posición
  • 2:12 - 2:13
    y la velocidad.
  • 2:13 - 2:17
    Yo he inicializado ambos a 0 porque no sé la ubicación real y ni la velocidad.
  • 2:18 - 2:19
    Le doy una matriz de incertidumbre
  • 2:21 - 2:23
    donde tengo una incertidumbre muy alta en la posición
  • 2:24 - 2:26
    y una incertidumbre muy alta en la velocidad,
  • 2:27 - 2:28
    y ambas están correlacionados.
  • 2:28 - 2:30
    Esa es la matriz de 1000, 0, 0, 1000.
  • 2:32 - 2:35
    Puedo especificar un movimiento externo, pero es 0, 0, por lo que no tiene ningún efecto,
  • 2:35 - 2:36
    así que ignore esto.
  • 2:37 - 2:39
    Puedo construir la siguiente función de estado, que es la que acabamos de
  • 2:40 - 2:42
    estudiar, [[1., 1] [0, 1].].
  • 2:43 - 2:47
    Que supone que la velocidad está siendo sumada a la posición,
  • 2:48 - 2:50
    y la velocidad sigue siendo la mismo.
  • 2:51 - 2:53
    Puedo construir una función de medición que extrae sólo el primero
  • 2:53 - 2:55
    de 2 valores, 1 y 0,
  • 2:56 - 2:58
    por lo que puedo observar la ubicación, pero no la velocidad.
  • 2:59 - 3:00
    Tengo una incertidumbre de medición.
  • 3:01 - 3:02
    que pasa a ser 1 en este ejemplo.
  • 3:03 - 3:05
    Y tengo una matriz de identidad, [[1., 0.] [0., 1.]].
  • 3:06 - 3:09
    Y luego ejecuto el filtro con estas 3 medidas de aquí,
  • 3:10 - 3:12
    y lo que debe salir es que al ejecutar el filtro,
  • 3:13 - 3:15
    puedo estimar la velocidad
  • 3:16 - 3:17
    y por lo tanto tomar mejores predicciones.
  • 3:19 - 3:20
    En el filtro que quiero que programe,
  • 3:21 - 3:25
    Quiero primero la actualización de la medición, y después la actualización del movimiento.
  • 3:26 - 3:28
    Así que cada vez que ejecute el filtro,
  • 3:29 - 3:31
    Quiero que primero se actualice la medición y después el movimiento.
  • 3:34 - 3:37
    Este es el procedimiento de mi filtro que está vacio y que hay que rellenar
  • 3:38 - 3:39
    donde voy recorriendo todas las medidas,
  • 3:40 - 3:43
    y luego construyo la actualización de la medida y la actualización de movimiento,
  • 3:43 - 3:46
    la predicción, y luego imprimo las estimaciones resultantes.
  • 3:47 - 3:49
    Puedo hacer esto varias veces, 3 veces en este caso.
  • 3:50 - 3:52
    Una vez que he rellenado esto y pulso el botón Run,
  • 3:53 - 3:54
    Me da la siguiente salida.
  • 3:55 - 3:56
    Después de la actualización de la primera medición,
  • 3:57 - 4:02
    Observé la posición 1, la cual aparece copiada aquí
  • 4:02 - 4:04
    esencialmente es 0.999 por aquí.
  • 4:06 - 4:09
    No me entero de nada de la velocidad, por lo que sigue siendo 0, tal y como yo lo inicialice.
  • 4:10 - 4:13
    Y luego hay una matriz de incertidumbre actualizada
  • 4:14 - 4:17
    que ahora muestra lo que sucede hay una correlación fuerte,
  • 4:18 - 4:20
    1000, 1000, 1000, 1000.
  • 4:20 - 4:23
    Que difiere de la inicial sólo en los elementos que habíamos
  • 4:23 - 4:24
    rellenado fuera de la diagonal.
  • 4:24 - 4:26
    Sucede exactamente lo que hace el filtro de Kalman.
  • 4:27 - 4:29
    Y luego observo de nuevo el 2.
  • 4:30 - 4:34
    Quiero que la salida ahora me diga que mi predicción siguiente es: 3.
  • 4:34 - 4:36
    Es la observación más la predicción.
  • 4:37 - 4:39
    Pero ahora tengo una estimación muy buena
  • 4:40 - 4:41
    de lo que es la velocidad.
  • 4:42 - 4:45
    Básicamente es 1, y la razón es que
  • 4:46 - 4:48
    mi filtro de Kalman fue capaz de utilizar
  • 4:48 - 4:50
    las ecuaciones de filtro de Kalman para encontrar este valor.
  • 4:51 - 4:54
    Hay una nueva matriz de covarianza,
  • 4:55 - 4:58
    y para la tercera observación siguiendo con la predicción,
  • 4:59 - 5:02
    la predicción es eficazmente correcta 4, 3.999.
  • 5:03 - 5:07
    La velocidad estimada 1 es correta, que es 0.99999,
  • 5:08 - 5:10
    y todavía tengo otra matriz que ilustra la incertidumbre
  • 5:10 - 5:14
    donde tengo una alta certeza en la estimación de la velocidad,
  • 5:14 - 5:16
    y también una seguridad relativamente alta en la estimación de la posición
  • 5:16 - 5:17
    en comparación con mis dudas iniciales.
  • 5:19 - 5:20
    Así que, ¿puedes escribir el algoritmo de filtro
  • 5:21 - 5:24
    que da salida a los valores exactos de aquí?
  • 5:26 - 5:28
    Esta es una tarea de programación complicada.
  • 5:28 - 5:31
    Lo que tienes que hacer esencialmente es
  • 5:31 - 5:32
    aplicar las ecuaciones que te di.
  • 5:33 - 5:35
    Tienes que familiarizarte con la clase matrix
  • 5:36 - 5:39
    y luego ir a rellenar el código del filtro
  • 5:40 - 5:43
    de acuerdo a las cosas que te mostré
  • 5:43 - 5:44
    para el filtro de Kalman multivariante.
Title:
cs373_unit2_31_p_Kalman-Matrices
Description:

dummy description

more » « less
Video Language:
English
Team:
Udacity
Project:
CS373 - Artificial Intelligence
Duration:
05:45
almartinflorido added a translation

Spanish subtitles

Revisions