Estas son mis respuestas a algunas cuestiones y preguntas de exámenes (no hay soluciones oficiales resueltas por el equipo docente en esta asignatura). Como soy un alumno, no necesariamente son correctas así que sólo debería tomarlas como orientación para encontrar su propia solución y bajo su responsabilidad. No hay apenas material de exámenes resueltos (salvo lo que hay aquí en wainu, ¡y yo sin saberlo!) por eso me decidí a compartir estos pocos ejercicios que tengo en limpio. Espero así facilitarle el aprendizaje a los próximos alumnos de esta asignatura.
Maximiliano G. G. - Septiembre 2010. - mxgdvg@gmail.com
(Versión 0.)
Respuesta:
* Cámaras de vídeo:
-Características: Utilizan tecnología CCD (Coupled Charge Device). Constan de una matriz bidimensional de transistores MOS que funcionan como condensadores. Cada transistor MOS es un píxel. La intensidad de la luz que incide está relacionada con la carga que almacena el transistor. La imagen se va formando mediante la carga de cada uno de los condensadores. Para usar los datos recogidos por la cámara necesitamos una tarjeta digitalizadora de vídeo.
-Aplicaciones: Están relacionadas con la visión, como la monitorización, vigilancia, supervisión de procesos,...
* Sensores de impacto:
-Características: Son interruptores que indican un estado lógico según estén activados o desactivados. El tipo pulsador, que no necesita una nueva pulsación para cambiar de estado, es el más utilizado. Se suelen disponer en conjuntos dentro de bandas elásticas que los protegen. Son muy fiables.
-Aplicaciones: Sensor de colisión. * Sensores láser:
-Características: Refleja un pulso de luz láser en un espejo rotatorio que cubre 180º. Los objetos reflejan la luz láser al dispositivo. El intervalo transcurrido y el ángulo del espejo determinan la localización del objeto. Circuitería complejo. Caros. Puede medir hasta 50 m de distancia. Muy precisos. -Aplicaciones: Medición de distancias.
* Efectores:
-Características: Interactúan con el medio una vez procesados los datos recogidos por los sensores. Pueden llevar sensores incorporados.
-Aplicaciones: Las propias de los sistemas de movimiento, brazos articulados, motores con ruedas, …
Cuestión 2 de la 1ª semana del 2005:
Pregunta: Cámaras de vídeo, sensores de impacto, sensores láser y efectores. Explicar las características y aplicaciones de estos
dispositivos.-Respuesta:
Tipo sensor: Bumper.
Características: Sensor de impacto. Rango: 0.
Utilidad: Colisión. Tipo sensor: Infrarrojos.
Características: Sensor de medición de distancias. Rango: 0-90cm.
Utilidad: Detectar y evitar obstáculos cercanos. Tipo sensor: Sonar.
Características: Sensor de medición de distancias. Rango: 15cm-11m.
Utilidad: Detectar paredes.
Respuesta:
El filtro de la mediana.
(1) Se ordenan por valor creciente en intensidad los píxeles vecinos de cada píxel de la imagen original (cuyo valor también se incluye). La mediana de esta lista (N+1)/2 con N=nº de vecinos+1 será la intensidad del píxel en la imagen filtrada. Por esto, dado que la sal y la pimienta estarán en los extremos de la lista, este filtro elimina el ruido sal y pimienta.
Ventajas:
- El valor del píxel mejorado es un valor de la imagen sin filtrar.
- No deteriora los bordes. Podemos utilizar ventanas para conservar los bordes que más nos interesen (verticales, horizontales, en diagonal). Especialmente si sabemos ya la forma de la imagen/objetos.
Desventajas:
-Operación lenta (hay que ordenar valores, por cada píxel de la imagen, y luego coger la mediana).
- Puede alterar la textura de la imagen.
(2) Aquí me chocó lo de la ventana de 4x4, pues no tiene un píxel central sobre el cual "ir barriendo". ¿Es un error intencionado para caer en él? Suponiendo que es un error y que debería poner 3x3 el algoritmo tendría que hacer algo así: (Si no es un error entonces estamos perdidos) Recorrer todos los píxeles de la imagen salvo los que están en las columnas y filas exteriores (nos saldríamos de rango con la ventana) y por cada uno de ellos guardar la vecindad (sus intensidades) en un vector, ordenar dicho vector, extraer la mediana del vector y asignarlo al píxel de la imagen mejorada.
Cuestión 2 - Septiembre 2005 Original:
La pregunta es larga (Véase copia del examen). En resumen: ¿Qué utilidad le darías a cada tipo de sensor (sonar, infrarrojos, bumpers, colocados en un robot) dependiendo de sus características y rangos de uso en cuanto a la detección, evitación o colisión con obstáculos?
Problema 1 – Septiembre 2007 Original:
Pregunta: ¿Qué tipo de filtro es el más adecuado para eliminar el ruido sal y pimienta?
(1) Explicarlo comentando sus ventajas y sus inconvenientes.
(2) Implementarlo utilizando pseudocódigo para el caso concreto de una ventana de 4x4.
Pseudocódigo: N: nº filas imagen M: nº columnas imagen n: tamaño de la ventana n ← 3
v(nxn) : vector de 9 elementos donde guardar la vecindad for x=2 hasta N-1
for y=2 hasta M-1 v(1)←f(x-1,y-1) v(2)←f(x-1,y) v(3)←f(x-1,y+1) v(4)←f(x,y-1) v(5)←f(x,y) v(6)←f(x,y+1) v(7)←f(x+1,y-1) v(8)←f(x+1,y) v(9)←f(x+1,y+1)
; ordenamos vector por inserción directa for i=2 hasta 9
vx←v(i) j←i-1 mientras j>0 y vx < v(j) hacer v(j+1)←v(j) j←j-1 finmientras v(j+1)←vx finfor ;asignamos la mediana g(x-1,y-1)=v(5) finfor finfor representar g(x,y) fin
Respuesta: Una transformación basada en el histograma. (También serviría la Igualación del histograma) En este caso aplicaríamos una función raíz cuadrada o cúbica dado que la imagen es muy oscura. Esta función se aplica a cada nivel de gris (normalizado) de la imagen, produciendo el nuevo valor para la imagen mejorada.
El pseudocódigo es como el del problema 4 pág. 96-97-98 del tema de Preproceso de los apuntes, salvo que hacemos la raíz cúbica.
N: nº de filas de la imagen M: nº de columnas de la imagen ;Normalizamos la imagen
for x=1 hasta N for y=1 hasta M
fn(x,y)←f(x,y)*(1/255) ;se suponen 8 bits de resolución en niveles de grises
finfor finfor
;aplicamos la función raíz cúbica for x=1 hasta N
for y=1 hasta M
gn(x,y)←(fn(x,y)^(1/3)) finfor
finfor
;restauramos valores del nivel de gris for x=1 hasta N
for y=1 hasta M
g(x,y)=gn(x,y)*255 finfor finfor representar g(x,y) fin Respuesta:
Diseño.- Le pondremos los sensores de distancia en la parte izquierda, central frontal y derecha. Con 3 es suficiente (en la práctica probablemente no lo sean). Dos motores independientes para cada rueda. Le pondremos el sensor de temperatura en la barriga. Suponemos que la fuente de calor está en el suelo. Las salidas de los sensores de distancias serán y_i, y_c, y_d respectivamente. La del sensor de temperatura y_t.
Problema 2 – Septiembre 2008 Original:
Pregunta: Supongamos que tenemos una caja con los siguientes elementos para construir un robot: sensores de distancia, motores y las ruedas necesarias, un sensor de temperatura. Diseñar un robot y su algoritmo de control en pseudocódigo que sea capaz de navegar en un entorno con obstáculos hasta llegar a una fuente de calor fija en un punto del entorno.
Problema 1 – Septiembre 2005 Original:
Hay dos imágenes (vea copia del examen), la de la izquierda es la de un tigre y la de la derecha la misma pero muy oscura. Pregunta: ¿Qué transformación para la mejora de la imagen en cuanto a contraste debes aplicar para transformar la imagen de la derecha (muy oscura) en la imagen de la izquierda? Explicarla e implementarla utilizando pseudocódigo.
Pseudocódigo.- Es muy parecido al Ejemplo 2 pág. 6, 7 y 8 del tema "Ejemplos sencillos de control en Robótica" de los apuntes.
fijar umbral sensor izquierdo umbral_i fijar umbral sensor central umbral_c fijar umbral sensor derecho umbral_d
fijar umbral sensor temperatura umbral_t a partir del cual se reconoce la fuente de calor
fijar velocidad normal de avance de motores v_normal
definir función motor(v_izquierda, v_derecha, t_motor) donde v_izquierda y v_derecha son las velocidades de los motores de las ruedas izquierda y derecha respectivamente. t_motor es el tiempo de funcionamiento del motor si y_t > umbral_t entonces parar
si y_i > umbral_i entonces motor(v_normal, 0, t_motor) ;gira hacia la derecha si no, si y_c > umbral_c entonces motor(-v_normal, v_normal, t_motor) ;se da la
vuelta
si no, si y_d > umbral_d entonces motor(0,v_normal, t_normal) ;gira hacia la izquierda
motor(v_normal, v_normal, t_motor) ;avanza repetir
Obsérvese que el enunciado no dice que el robot ha de buscar la fuente de temperatura, sino que se ha de parar al encontrarla. De otra manera el algoritmo se complicaría mucho más. Aunque no lo he dicho los sensores de distancia serían de infrarrojo, que permiten al robot acercarse lo suficiente a los obstáculos y evitarlos.
Respuesta:
1. Si observamos el histograma, vemos que hay tres trozos, que se corresponden por sus intensidades de la siguiente manera: El trozo de la izquierda serían los ingredientes(lo más oscuro), el del centro la pizza (base) y el de la derecha el fondo(lo más claro). En principio, podríamos pensar en utilizar la umbralización binaria, para un umbral de intensidad de gris de 0,7 (este valor lo sacamos del histograma por lo que en realidad combinamos con una umbralización basada en el histograma), asignando el valor 1 a los píxeles con intensidad < 0,7 y 0 para aquellos > 0,7, lo que nos resultaría en una imagen binaria (un círculo blanco identificando la pizza absorbiendo los ingredientes, y el fondo negro).
Nota: No estaría de más aplicar antes un filtro, en mi fotocopia parece que el ruido es sal y pimienta, así que podríamos aplicar el filtro de la mediana. Luego el histograma presentaría un mejor aspecto y la segmentación sería más fiable.
También podríamos usar la umbralización basada en el histograma - búsqueda de mínimos, y conseguir diferenciar los ingredientes de la pizza y ésta del fondo. En este caso hay que encontrar los umbrales que separan los objetos, normalmente coincidiendo con los valles del histograma.
Problema 1 - 1º Semana 2006
Pregunta: Dada la imagen representada en la figura (una pizza: fondo claro, la pizza más oscura y los ingredientes aún más oscuros. Histograma)
1. ¿Qué técnica se segmentación basada en la umbralización utilizarías para la detección de la pizza? Explicarla brevemente.
2. Implementar en pseudocódigo el programa que permita la detección de la pizza suponiendo que se dispone de una función capaz de suministrar los mínimos locales del histograma desde el de menor nivel de gris hasta el de mayor nivel de gris.
2. Nos dan una función que suministra los mínimos locales del histograma, es decir, los umbrales que separan los trozos que representan a los ingredientes, la pizza (base), y el fondo. El resultado que buscamos podría ser una imagen bimodal con los ingredientes y el fondo negros y la pizza blanca (o viceversa). Escuetamente:
N: nº de columnas imagen M: nº de filas imagen
u1: mínimo local 1 suministrado por la función dada u2: mínimo local 2 suministrado por la función dada
f: imagen normalizada (esto se podría desarrollar con dos for) ;segmentación
for x=1 hasta N for y=1 hasta M si f(x,y) < u1
g(x,y)=0 ;si es ingrediente si f(x,y) >= u1 y f(x,y) < u2
g(x,y)=1 ;si es la base de la pizza si f(x,y) >= u2
g(x,y)=0 ;si es fondo finfor
finfor
Respuesta:
Mi planteamiento es el siguiente: Si el robot encuentra la línea, luego solo debe seguirla hasta uno de sus extremos, y si ha llegado al aparcamiento tendrá tres paredes a distancia p. Si no, es que ha llegado al final del otro extremo de la línea en otro lugar que no es el aparcamiento, y solo tiene que darse la vuelta y seguir la linea en la otra dirección. Así que pondremos al robot a navegar hasta que encuentre la línea y luego la siga hasta que llegue a un extremo de la misma, luego compruebe si es el aparcamiento. Si lo es Fin, y si no lo es se da la vuelta y sigue la línea en la otra dirección hasta llegar al aparcamiento.
Las salidas serán y_i, y_f, y_d, y_t para los sensores de distancia izquierdo, frontal, derecho y trasero; y_b(i,d) para los sensores binarios: (1,1) en la línea; (0,0) fuera de la línea; (1,0) perdiendo la línea por la derecha; (0,1) perdiendo la línea por la izquierda.
Pseudocódigo.-fijar umbral umbral_izq, umbral_dch, umbral_fr, umbral_tr fijar velocidad normal de avance v_normal
definir función motor(v_izq, v_dch, t_motor) definir función seguir_línea
fun seguir_linea
;si está en el aparcamiento justo al final de la línea negra si y_b = (0,0) y y_i = p y y_f = p y y_d = p entonces
fin
si no, si y_b =(0,0) entonces ;ha llegado al final del otro extremo motor(-v_normal,v_normal,t_motor) ;le damos la vuelta
Problema 2 – 1ª Semana 2010.
Pregunta: Es larga, (vea examen). Se trata de poner el pseudocódigo para que un robot aparque con la opción de seguir una línea. Tiene 4 sensores de distancia y dos binarios para la línea.
si no, si y_b = (0,1) entonces mientras y_b != (1,1) hacer
motor(v_normal, 0, t_motor) ;para que entre en la línea finmientras
si no, si y_b = (1,0) entonces mientras y_b != (1,1) hacer motor(0, v_normal, t_motor) finmientras
motor(v_normal, v_normal,t_motor) ;avanzamos por la línea seguir_linea ;llamada recursiva
finfun
;navegar hasta encontrar la línea
si y_b != (0,0) seguir_linea ;ha encontrado la línea si y_i > umbral_izq entonces
motor(v_normal, 0, t_motor) si no, si y_f > umbral_fr entonces motor(-v_normal, v_normal,t_motor) si no, si y_d > umbral_dch entonces motor(0,v_normal, t_motor)
; si y_t > umbral_tr no es necesario comprobarlo pues lo que hay que hacer es avanzar
motor(v_normal,v_normal,t_motor) repetir