Modelando la incertidumbre


Seguimos con las entradas del minicurso Robótica: Navegación autónoma by Gorka @gazkune

Una de las tareas mas importantes de la robótica es percibir el entorno. Como ya hemos visto en entradas anteriores, para eso los robots utilizan los sensores. Por un lado, los sensores permiten a los robots obtener información de sus alrededores, pero también les permiten saber sobre su propio estado. Este ultimo caso quedo ilustrado con la explicación de la odometría y los encoders.

Pues bien, siempre que utilizamos sensores no podremos escaparnos de la incertidumbre. Los sensores realizan mediciones que ni son siempre las mismas para las mismas condiciones, ni son totalmente precisas. A cada medición que realizamos ha de asociársele cierta incertidumbre. En el caso de la odometría, quedó bastante claro que las lecturas provenientes de los encoders no eran fiables del todo. Pero la cosa va más allá. La incertidumbre no solo se da para las mediciones, sino también para las acciones. Si yo comando a una rueda que vaya a una velocidad de x m/s, he de asumir que la rueda no podrá ejecutar mi comando con total precisión.

Entonces, la pregunta es obvia: ¿podemos hacer algo para eliminar o mitigar esa incertidumbre? En esta entrada no responderemos a esa pregunta. Mas bien, intentaremos explicar como podemos modelar esa incertidumbre para el movimiento y para las mediciones. Partiremos de la premisa de que un robot que es consciente de la incertidumbre que le rodea, es un robot con mayor potencial.

Por lo tanto, en las secciones que vienen veremos dos grupos de modelos importantes para la navegación autónoma: los modelos de movimiento y los modelos de medición. Estos modelos son modelos probabilísticos. Al tener incertidumbre tanto en las medidas como en las acciones, ya no nos preguntaremos por la posición del robot, sino que intentaremos averiguar cual es la distribución de probabilidades de la posición del robot. En otras palabras, la pregunta será: ¿que probabilidad existe de que el robot se encuentre en posición (x, y,\theta)?

Modelo de Movimiento

El modelo de movimiento intenta describir como evoluciona la posición de un robot durante el tiempo. Para ello, existen dos formas básicas: asociar el modelo a las velocidades que hemos comandado al robot, o asociar las posiciones a la odometría. En esta entrada hablaremos sobre la segunda, ya que es la mas utilizada en el ámbito de la localización. El primer modelo, el basado en la velocidad, se utiliza mas para la planificación de rutas.

La odometría nos da la estimación de la posición de un robot, respecto a un sistema de coordenadas interno, cuya relación con el sistema de coordenadas del mundo desconocemos. Sin embargo, la diferencia entre dos lecturas de odometría nos dan un avance relativo que nos sirve para computar la posición. Es decir, el desplazamiento que se mide por odometría entre los instantes t-1 y t da una buena medida del desplazamiento para ese intervalo. As, el modelo de movimiento basado en odometría intenta describir la probabilidad de que el robot se encuentre en una posición (x, y, \theta) en el instante t, conociendo la posición en el instante t-1 y el desplazamiento medido por odometría en el intervalo (t-1; t).

Vamos a ver algunas notaciones para entender esto mejor. De aquí en adelante, la posicion en el instante t se escribirá x_t en vez del vector (x_t, y_t,\theta_t). El desplazamiento medido por odometría en el intervalo (t-1; t) se denotara como u_t. Por lo tanto, el modelo de movimiento basado en odometra se escribe como p(x_t|u_t; x_{t-1}). Los que saben de teoría de probabilidad saben que esta expresión es una distribucion de probabilidades para la variable aleatoria de posición x_t condicionada a las variables u_t y x_{t-1}. Los demás, pensemos que lo que queremos calcular es la probabilidad de que el robot se encuentre en cualquier punto de nuestro mundo, sabiendo que en el instante anterior se encontraba en otra posición y que se ha desplazado una cantidad dada.

Ilustremos lo que acabamos de decir con un sencillo ejemplo. En un mundo unidimensional, si el robot se encontraba en la posicion 2 en el instante t -1 y medimos que nos hemos desplazado 0.5 metros desde t -1, ¿qué probabilidad hay de que el robot se encuentre en la posición 5? Los mas atrevidos dirán que la probabilidad es nula, ya que 2 + 0.5 = 2.5. Pero no debemos de olvidarnos que la medición del desplazamiento se ha hecho mediante odometría. ¡He ahí la incertidumbre! Hemos medido 0.5, pero ¿realmente nos hemos desplazado 0.5 metros? Esta incertidumbre es la que nos hace decir que la probabilidad de que el robot este en la posición 5 es muy-muy baja, casi nula, pero existe. Las posiciones más probables, lógicamente, serán las que se encuentran cerca de 2.5. Pues bien, la distribución p(x_t|u_t; x_{t-1}) no es más que una función que nos da la probabilidad de cualquier posición.

La forma de esta funcion depende mucho del robot que tengamos. Más concretamente, depende de la resolución de los encoders, del modelo matemático utilizado para calcular la odometría, de la deformabilidad de las ruedas… en general, todos estos factores se modelan como ruido. No entraremos a detallar cómo es el modelo de odometría, pero hay que saber que normalmente se suelen utilizar unos parámetros de error para la traslación y para la rotación. Estos parámetros codifican la información de que porcentaje de error acumula el robot en cada desplazamiento de traslación y de rotación. Los valores se suelen calcular empíricamente, a base de experimentos. Para un robot equilibrado, cuyos errores de traslación y rotacion se parecen, la distribución final de probabilidades suele ser muy parecida a una gaussiana. De hecho, muchas veces se supone que p(x_t|u_t; x_{t-1}) es una gaussiana cuya media es x_{t-1 }+ u_t y su varianza un valor obtenido a partir de los parámetros de error mencionados anteriormente.

Para visualizar mejor lo que acabamos de decir, la Figura 1 muestra tres distribuciones de probabilidad diferentes para valores diferentes de los parámetros de error. 1.a es la distribucion que se esperara de un robot equilibrado, mientras 1.b corresponde a un robot con un error exagerado en traslación y 1.c un robot con error exagerado en rotacion. Tened en cuenta que en esta imagen solo se muestra la distribución de la posicion en el plano (x; y), sin rotación (para ello necesitaramos otra dimension). Los puntos mas oscuros son los que mayor probabilidad tienen.

Figura 1 a) b) c)

Modelo de medición

Un modelo de medición describe como se producen las lecturas de un sensor a partir del mundo físico que rodea al robot. Los modelos de medición son pues dependientes al sensor que vamos a utilizar. Nosotros, en estas entradas nos centraremos en escáneres láser, tal y como hemos dicho, por lo que la explicación de los modelos de medición se ceñirá a estos. Sin embargo, los conceptos expuestos sirven de base para cualquier otro sensor.

Resolución angular

Lo primero de todo es entender lo que un láser nos devuelve. Los láseres trabajan sobre un campo de visión limitado. Pongamos que el nuestro abarca 270 grados. En esos 270 grados, los láseres disparan distintos haces cuyo eco recogen y miden la distancia a partir del tiempo de vuelo. La distancia angular entre dos haces contiguos se llama resolución angular. Digamos que nuestro láser tiene una resolucion angular de 0.5 grados. Eso quiere decir que en 270 grados de ángulo de vision, el sensor ha disparado 270/0.5 = 540 haces. Cada uno de esos haces nos devuelve una distancia.

Para representar esta cantidad de datos, los ponemos todos en un vector al que llamamos z. Obviamente z = (z_1; z_2; \dots; z_k) donde k es la cantidad de haces que emite el sensor a lo largo de su ángulo de vision (en nuestro caso k = 540). Ademas, un láser dispara todos sus haces en intervalos regulares de tiempo. Llamamos una medición al vector completo z. Tipicamente, un láser suele realizar 20 medidas completas por segundo: su frecuencia es de 20 Hz. Así, la medición hecha por el láser en el instante t se llama z_t.

Un modelo de medicion o modelo de sensor se expresa como p(z_t|x_t;m), es decir, la distribución probabilística de las mediciones del sensor condicionada a la posición del robot y al mapa del entorno. La función p(z_t|x_t;m) viene a describirnos la probabilidad de obtener las mediciones que obtenemos sabiendo la posición del robot y el mapa del entorno. Unas palabras respecto al mapa. Aquí, se entiende como mapa aquella representación que contiene los objetos del entorno y sus propiedades. Hay miles de formas de representar el entorno en robótica. Cada una de ellas con sus ventajas e inconvenientes. Todas ellas, se representan formalmente como m = (m_1;m_2; \dots;m_N) donde N es la cantidad de objetos. Hablaremos sobre los mapas mas adelante. Por ahora pensad que simplemente es una representación del entorno que se da por conocida.

Una de las asunciones que realizamos para p(z_t|x_t;m) es que cada lectura $latex z^i_t$ es independiente a las demás. Dicho de otra forma, la medicion del haz i no se ve afectada para nada por la medición de i -1 e i + 1. Esta asunción, que parece muy lógica, solo se cumple en el mundo ideal, pero en el caso de los láseres, podemos decir que es valida. Lo que la asunción de independencia de las lecturas nos permite es expresar el modelo de sensor como:

p(z_t|x_t,m)=\prod_{k=1}^Kp(z_t^k|x_t,m)

Así, podemos calcular la distribución probabilística de cada haz de forma independiente y luego multiplicarlas todas para obtener el modelo de medición. Digamos que esta asunción viene a ser mas conveniente que real. Es un acercamiento que nos facilita mucho los cálculos y que sigue siendo bastante el a la realidad.

El hecho de que utilicemos funciones probabilísticas para modelar el proceso de medición es por que queremos que el ruido de las mediciones este presente en nuestro modelo. Generalmente, para un sensor de distancia, se distinguen cuatro tipos de ruidos.

El primero es el llamado ruido local. Un sensor perfecto, medirá siempre correctamente la distancia al objeto mas cercano. A esa distancia le llamaremos z^{k_*}_t . El ruido local es aquel ruido que se genera en la medición real cuando el laser esta midiendo «mas o menos» bien. Es decir, suponemos que el láser nos dará una distancia cercana a z^{k_*} _t . Este tipo de ruido se modela con una gaussiana cuya media es z^{k_*}_t y su varianza depende de las características del sensor (ver Fig. 2).

Figura 2

La segunda forma de ruido es la debida a los objetos inesperados. Hemos de asumir que nuestro mundo real es dinámico: la gente camina de un lado a otro, las puertas se abren y se cierran, cambiamos los muebles de sitio… pero los mapas m son estáticos. Una forma simple y efectiva de considerar objetos dinámicos en el proceso de medicion es tratarlos como ruido. Lo que sabemos es que los objetos inesperados causaran la medición de distancias mas cortas que las esperadas, nunca más largas. Ademas, también podemos deducir que es mas probable detectar un objeto cercano que uno lejano. Dicho de otro modo, la probabilidad de medir distancias cortas es mas alta que la probabilidad de medir distancias largas. Por lo tanto, por estos dos argumentos, podemos utilizar una distribución exponencial para modelar el ruido causado por objetos inesperados. Como se puede apreciar en la Figura 3, la probabilidad va descendiendo exponencialmente hasta llegar a z^{k_*} _t . La distribucion exponencial también tiene otro parametro dependiente del sensor que utilicemos (\lambda).

Figura 3

El tercer tipo de ruido es muy simple: es el ruido por fallo del sensor. Llamamos fallo del sensor a aquellas mediciones que devuelven el rango máximo del sensor. Hay veces en los que un láser simplemente no ve un objeto (no se recibe el rebote del haz) y devuelve la distancia máxima que puede medir (z_{max}). Para modelar esto recurrimos a una función bien simple: la probabilidad es 1 para z_{max} y 0 para todas las demas distancias. Por si no queda claro, mirad la figura 4.

Figura 4

Por último, tenemos la llamada medición aleatoria. Tal cual. A veces los sensores dan unas medidas que parecen escapar de cualquier explicación. No hay por donde cogerlas. Por ello, a cada distancia se le asigna una pequeña probabilidad de que su lectura se produzca en cualquier situación. Esto se modela utilizando una distribución uniforme, tal y como se aprecia en la figura 5.

Figura 5

El modelo de medicion p(z_t|x_t;m) es la combinación lineal de las cuatro distribuciones probabilsticas, cada una con su peso. Los pesos son numeros reales cuya suma es igual a 1. En la figura 6 se muestra un ejemplo de la distribución probabilística final para un laser para unos pesos concretos.

Fig 6

Si os habéis fijado, en la descripción de cada una de las formas de ruido hemos visto parámetros que siempre dependan del modelo concreto del láser. Ahora, la combinacion lineal plantea otros cuatro parámetros más, que otra vez dependen del modelo de láser con el que equipamos a nuestro robot. Existen procedimientos y algoritmos para descubrir los valores más adecuados para todos estos parámetros de forma empírica. En esta entrada no hablaremos sobre estos algoritmos, aunque conviene recordar que existen y se usan con gran éxito. En la siguiente entrada haremos uso de los modelos probabilísticos de movimiento y medición para resolver el problema de la localización. Todo lo que hemos explicado en esta entrada lo podéis encontrar más detalladamente explicado en el gran libro de Sebastian Thrun, Wolfram Burgard y Dieter Fox llamado «Probabilistic Robotics». En él se sientan las bases de la robótica probabilística que se ha aplicado a la navegación autonoma con éxito.

2 Respuestas a “Modelando la incertidumbre

  1. Pingback: El problema del huevo y la gallina | Cuentos Cuánticos

  2. Pingback: … y con Bayes hemos topado! | Cuentos Cuánticos

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s