Spanish subtitles

← cs373_unit2_31_p_Kalman-Matrices

dummy description

Get Embed Code
3 Languages

Showing Revision 1 created 09/06/2012 by almartinflorido.

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