medición de distancias con una cámara web y un puntero láser2

12
MEDICIÓN DE DISTANCIAS CON UNA CÁMARA WEB Y UN PUNTERO LÁSER Introducción Existen en el mercado muchos medidores de distancia (o telémetros) en base a ultrasonido, infrarrojo y hasta con sistema láser. Todos estos dispositivos cumplen bien su función, pero en el campo de la robótica aérea, el peso del dispositivo es una cuestión primordial. Cada componente que se agrega a la estructura de un avión debe tener un máximo de utilidad y eficiencia. Una nave aérea robótica miniatura puede llevar apenas 100 gramos de carga útil. (Esto es válido, también, para cualquier robot móvil, aunque sea terrestre, porque en estos casos también es importante controlar el peso para evitar un gasto excesivo de energía y así darle autonomía al robot y un mayor tiempo de funcionamiento sin necesidad de una recarga de sus baterías.) Se pueden realizar tareas de visión robótica, tales como la identificación y sorteo de obstáculos, utilizando una cámara web (webcam) o una mini cámara de video inalámbrica conectada a una computadora a través de USB. Mejor aún, dos webcams pueden proporcionar una visión estéreo que nos dé mejor capacidad de evitar obstáculos, debido a que se puede determinar la profundidad. Esto, por supuesto, tiene la desventaja de agregar el peso de una segunda cámara de imagen. Este trabajo describe la manera de utilizar un mini puntero láser de bajo junto a una única cámara de imagen, del tipo webcam, para obtener información de distancia. SISTEMAS DE CONTROL INDUSTRIAL II

Upload: micky-gil

Post on 16-Nov-2015

31 views

Category:

Documents


3 download

DESCRIPTION

Existen en el mercado muchos medidores de distancia (o telémetros) en base a ultrasonido, infrarrojo y hasta con sistema láser. Todos estos dispositivos cumplen bien su función, pero en el campo de la robótica aérea, el peso del dispositivo es una cuestión primordial.

TRANSCRIPT

MEDICIN DE DISTANCIAS CON UNA CMARA WEB Y UN PUNTERO LSER

IntroduccinExisten en el mercado muchos medidores de distancia (o telmetros) en base a ultrasonido, infrarrojo y hasta con sistema lser. Todos estos dispositivos cumplen bien su funcin, pero en el campo de la robtica area, el peso del dispositivo es una cuestin primordial. Cada componente que se agrega a la estructura de un avin debe tener un mximo de utilidad y eficiencia. Una nave area robtica miniatura puede llevar apenas 100 gramos de carga til.(Esto es vlido, tambin, para cualquier robot mvil, aunque sea terrestre, porque en estos casos tambin es importante controlar el peso para evitar un gasto excesivo de energa y as darle autonoma al robot y un mayor tiempo de funcionamiento sin necesidad de una recarga de sus bateras.)Se pueden realizar tareas de visin robtica, tales como la identificacin y sorteo de obstculos, utilizando una cmara web (webcam) o una mini cmara de video inalmbrica conectada a una computadora a travs de USB. Mejor an, dos webcams pueden proporcionar una visin estreo que nos d mejor capacidad de evitar obstculos, debido a que se puede determinar la profundidad. Esto, por supuesto, tiene la desventaja de agregar el peso de una segunda cmara de imagen.Este trabajo describe la manera de utilizar un mini puntero lser de bajo junto a una nica cmara de imagen, del tipo webcam, para obtener informacin de distancia.

La teoraEl diagrama que sigue muestra cmo se puede calcular la distancia hasta un objeto ubicado en el campo visual de una cmara de imagen proyectando un punto lser sobre l. La matemtica necesaria para el clculo es simple, de modo que es posible utilizar esta tcnica en aplicaciones de visin robtica que requieren velocidad.

Veamos entonces cmo debemos hacer.Se proyecta el haz del puntero lser sobre un objeto en el campo visual de una cmara de imagen; lo ideal es que este haz sea paralelo al eje ptico de la cmara. Junto con el resto de la escena tomada por la cmara de imagen, capturamos el punto luminoso del lser. Se aplica un simple algoritmo sobre la imagen, a la bsqueda de los pixeles ms brillantes.Asumiendo que la luz del lser es el rea ms brillante de la escena (algo que se cumple en las fotografas de ms abajo, realizadas en interiores con un puntero lser comn y de bajo precio), se puede conocer la posicin de este punto luminoso en el cuadro de imagen.

Ahora debemos calcular la distancia hasta el objeto, en base a la posicin donde cae el punto brillante respecto al eje "y" de la imagen. Cuanto ms cerca se encuentra el punto brillante del centro de la imagen, ms lejos est el objeto. Tomando como base el diagrama anterior, se puede calcular la distancia (D):

Por supuesto que para resolver esta ecuacin debemos conocer "h", que es una constante definida por la distancia entre el haz del lser y el centro visual de la cmara, y el ngulo theta. Theta se calcula:

Uniendo las ecuaciones, obtenemos:

Muy bien, la cantidad de pixeles desde el centro del plano focal hasta el lugar donde aparece el punto del lser se puede contar trabajando sobre la imagen (simplemente, es una cantidad de lneas de imagen). Y qu pasa con los otros parmetros de la ecuacin? Debemos hacer una calibracin para obtenerlos.

Para calibrar el sistema, tomaremos una serie de mediciones en las que conozcamos la distancia hasta el blanco, y tambin tomamos como medicin a qu cantidad de pixeles desde el centro de la imagen se encuentra el punto en cada caso. Veamos un ejemplo de recoleccin de datos:Datos de Calibracin

Pixeles desdeel centroD real(cm)

10329

8145

6558

5571

4990

45109

41127

39159

37189

35218

Usando la ecuacin que sigue, podemos calcular el ngulo real en base al valor de h y tambin la distancia real para cada punto.

Ahora que tenemos un Thetarealpara cada valor, podemos lograr una relacin que nos permitir calcular el ngulo theta a partir de la cantidad de pixeles desde el centro de la imagen. Usando una relacin lineal, de modo que es necesario aplicar una ganancia y un ajuste de compensacin. Esto parece funcionar bien aun cuando no se tiene en cuenta el hecho de que el plano focal es llano en lugar de una curva de radio constante alrededor del centro de la lente.De mis datos de calibracin, calcul:Desplazamiento (ro) = -0,056514344 radianesGanancia (rpc) = 0,0024259348 radianes/pixelUsando:

Se obtiene las distancias calculadas, y adems calcul el error contra la distancia real en los datos de calibracin:Datos de distancia calculados y reales

Pixeles desdeel centroD calc(cm)D real(cm)% de error

10329,84292,88

8141,4645-7,87

6557,5558-0,78

5575,81716,77

4993,57903,96

45110,851091,70

41135,941277,04

39153,27159-3,60

37175,66189-7,06

35205,70218-5,64

EL HARDWAREEste medidor de distancias se compone de pocos elementos. Utilic un trozo de cartn para sostener el lser junto con la webcam, de manera que el puntero lser apunte en direccin paralela al eje de la cmara. Los elementos que se ven en la imagen estn colocadas sobre una grilla de 1 pulgada de lado (25,4 mm) para dar una referencia de tamao.

Este es el aspecto del medidor de distancias tal como qued luego del montaje.

A continuacin se ven imgenes registradas con este programa:

Visual C++

void CTripodDlg::doMyImageProcessing(LPBITMAPINFOHEADER lpThisBitmapInfoHeader){// doMyImageProcessing: Aqu es donde usted escribe su propio cdigo de proceso de imagen// Tarea: Leer la escala de grises de un pixel y procesarla

unsigned intW, H;// Ancho y alto del cuadro [pixeles]unsigned int row, col;// Posicin de Hilera (row) y Columna (col) del Pixelunsigned long i;// Variable para el vector row-columnunsigned intmax_row;// Hilera del pixel ms brillanteunsigned intmax_col;// Columna del pixel ms brillante BYTEmax_val = 0; // Valor del pixel ms brillante

// Valores utilizados para calcular la distancia a partir de los datos de la imagen capturada// Estos valores slo sirven para una cmara y un lser determinadosconst doublegain = 0.0024259348;// Constante de ganacia utilizada para la conversin// desplazamiento del pixel al ngulo en radianesconst doubleoffset = -0.056514344;// Constante de desplazamientoconst doubleh_cm = 5.842;// Distancia entre el centro de la cmara y el lser doublerange; // Distancia calculadaunsigned intpixels_from_center;// Ubicacin del pixel ms brillante desde el centro// no desde la parte inferior del cuadrocharstr[80]; // para mostrar un mensajeCDC*pDC;// contexto necesario para mostrar un mensaje

W = lpThisBitmapInfoHeader->biWidth;// biWidth: cantidad de columnas H = lpThisBitmapInfoHeader->biHeight;// biHeight: catidad de hilerasfor (row = 0; row < H; row++) {for (col = 0; col < W; col++) {

// Recordar que cada pixel se compone de 3 bytesi = (unsigned long)(row*3*W + 3*col);// Si el valor del pixel actual es mayor que el de los otros, // es el nuevo pixel mximoif (*(m_destinationBmp + i) >= max_val) {max_val = *(m_destinationBmp + i);max_row = row;max_col = col;}

}}// Despus de cada cuadro, poner valor del pixel mximo en cero max_val = 0;

for (row = 0; row < H; row++) {for (col = 0; col < W; col++) {

i = (unsigned long)(row*3*W + 3*col);// Dibujar una cruz blanca sobre el pixel ms brillante en la pantallaif ((row == max_row) || (col == max_col)) *(m_destinationBmp + i) = *(m_destinationBmp + i + 1) = *(m_destinationBmp + i + 2) = 255;

}}

// Calcular la distancia del pixel ms brillante desde el centro, no desde el pie del cuadro pixels_from_center = 120 - max_row;

// Calcular la distancia en cm en base a la ubicacin del pixel ms brillante, // y definir constantes especficasrange = h_cm / tan(pixels_from_center * gain + offset);

// para mostrar un mensaje en (row, column) = (75, 580)pDC = GetDC();

// Muestra las coordenadas del cuadro y la distancia calculadasprintf(str, "Max Value at x= %u, y= %u, range= %f cm ",max_col, max_row, range);pDC->TextOut(75, 580, str);ReleaseDC(pDC);}

SISTEMAS DE CONTROL INDUSTRIAL II