Você está na página 1de 18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

ToddDanko
Proyectosrecientes
OtrosProyectosy
tutoriales
StepperMotor
Appliance
WebcamBased
DIYtelmetrolser
Mapadelsitio

Contacto
Escrbame

Buscarenestesitio

ProyectosRecientes>

WebcamBasedDIYtelmetrolser
Introduccin
Haymuchosfueradelagamaestanteencontrarcomponentesdisponibles,incluyendotelmetrosultrasnicos,
infrarrojos,einclusolser.Todosestosdispositivosfuncionanbien,peroenelcampodelarobticaarea,elpesoes
unapreocupacinprimordial.Esdeseableobtenerlamayorfuncionalidaddecadacomponentequeseaadeauna
clula.Helicpterosrobticoenminiatura,porejemplo,puedellevaraproximadamente100gdecargatil.Esposible
realizartareasdevisinartificial,comolaidentificacindeobstculosylaevitacindequeelusodeunacmaraweb
(ominicmarainalmbricainterfazconunordenadoratravsdeladaptadorUSB).Mejoran,doscmarasweb
puedenproporcionarlavisinartificialestreomejorandoaslaevasindeobstculosporquelaprofundidadsepuede
determinar.Elinconvenientedeestesupuestoeslaadicindeelpesodeunasegundacmara.Estapginadescribe
comounpunterolserdeminisepuedeconfigurarjuntoconunasolacmaraparaproporcionarunavisinmono
mquinaconinformacindedistancia.
Esteproyectosebasaengranmedidadeuntutorialencontradoaqu

Teoradeoperacin
Elsiguientediagramamuestracmolaproyeccindeunpuntodelsersobreunobjetivoqueestenelcampode
visindeunacmara,sepuedecalcularladistanciaaeseobjetivo.Lamatemticaesmuysimple,porloqueesta
tcnicafuncionamuybienparaaplicacionesdevisinartificialquenecesitanparafuncionarrpidamente.

https://sites.google.com/site/todddanko/home/webcam_laser_ranger

1/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

Aspues,aquescmofunciona.Ahazdelserseproyectasobreunobjetoenelcampodevisindeunacmara.
Esterayolseresidealmenteparaleloalejepticodelacmara.Elpuntodellserescapturadojuntoconelrestode
laescenaporlacmara.Unsimplealgoritmoseejecutasobrelaimagenenbuscadelospxelesmsbrillantes.
Suponiendoqueellsereselreamsbrillantedelaescena(quepareceserciertoparamitiendadedlarpuntero
lserenelinterior),esconocidalaposicindepuntosenelcuadrodeimagen.Entoncestenemosquecalcularla
distanciaalobjetobasadoendondealolargodelejeydelaimagendeestepuntolsercae.Cuantomscercadel
centrodelaimagen,cuantomslejosestelobjeto.
Comopodemosvereneldiagramaenestamismaseccin,ladistancia(D)sepuedecalcular:

https://sites.google.com/site/todddanko/home/webcam_laser_ranger

2/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

Porsupuesto,pararesolverestaecuacin,loquenecesitasaberh,queesunaconstantefijacomoladistanciaentreel
punterolserylacmara,ytheta.Thetasecalcula:

Pongalasdosecuacionesanterioresjuntos,obtenemos:

Aceptar,porloqueelnmerodepxelesdesdeelcentrodelplanofocalqueapareceelpuntolserpuedeslose
contarapartirdelaimagen.Qupasaconlosotrosparmetrosdeestaecuacin?Tenemosquerealizaruna
calibracinparaderivarestos.
Paracalibrarelsistema,vamosarecogerunaseriedemedicionesdondesladistanciaalblanco,ascomoelnmero
depxelesdelpuntoesdesdeelcentrodelaimagencadavez.Estosdatossonacontinuacin:
https://sites.google.com/site/todddanko/home/webcam_laser_ranger

3/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

DatosdeCalibracin
pxelesdelcentro realD(cm)
103

29

81

45

65

58

55

71

49

90

45

109

41

127

39

159

37

189

35

218

Elusodelasiguienteecuacin,podemoscalcularelngulorealbasadoenelvalordeh,ascomodeladistanciareal
paracadapuntodedatos.

AhoraquetenemosunTheta_actualparacadavalor,podemosllegaraunarelacinquenospermitecalcularthetadel
nmerodepxelesdelcentrodelaimagen.Heutilizadounarelacinlineal(porlotantounagananciayoffsetse
https://sites.google.com/site/todddanko/home/webcam_laser_ranger

4/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

necesitaba).Estoparecefuncionarbienapesardequenotieneencuentaelhechodequeelplanofocalesunplano
enlugardecurvadaenunradioconstantealrededordelcentrodelalente.
Desdemidatosdecalibracin,calcul:
Offset(ro)=0.056514344radianes
Ganancia(RPC)=0,0024259348radianes/pixel
Uso:

Heresueltopordistanciascalculadas,ascomodeerroresdeladistanciarealdelosdatosdecalibracin:
RealycalculadadedatosRango
pxelesdelcentro calcD(cm) realD(cm) Error%

https://sites.google.com/site/todddanko/home/webcam_laser_ranger

103

29.84

29

2.88

81

41.46

45

7.87

65

57.55

58

0.78

55

75.81

71

6.77

49

93.57

90

3.96

45

110.85

109

1.70

41

135.94

127

7.04

39

153.27

159

3.60

37

175.66

189

7.06

35

205.70

218

5.64
5/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

Componentes
Nohayunagrancantidaddepiezasenmitelmetromuestra.Usuntrozodecartnparamantenerunpunterolser
paraunacmarawebparaqueelpunterolserenunadireccinqueesparalelaaladelacmara.Laspartessevea
continuacinsecolocansobreunarejilladeunapulgadaparareferencia.

Mitelmetromontadoseveas:

https://sites.google.com/site/todddanko/home/webcam_laser_ranger

6/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

Software
Heescritosoftwaredosmaneras,unautilizandoVisualC++yelotroutilizandoVisualBasic.Esprobableque
encuentrequelaversinbsicavisualdelsoftwareesmuchomsfcildeseguirqueelcdigovc++,perocontodo,
hayunacompensacin.Elcdigovc++sepuedenponerjuntosdeformagratuita(asumiendoquetieneVisualStudio),
mientrasqueelcdigovbrequierelacompradeunpaquetedesoftwaredeterceros(tambinademsdevisualstudio).

VisualBasic
https://sites.google.com/site/todddanko/home/webcam_laser_ranger

7/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

ElcdigodeVisualBasicqueheescritoestdisponiblecomounpaquetellamadovb_laser_ranger.zipenlaparte
inferiordeestapgina.
Traducir
Paraqueestecdigofuncione,necesitarelVideoOCXcomponenteActiveXinstaladoensuequipo

Elcdigoquedescribelasfuncionesqueseencuentranenelformularioprincipalseveacontinuacin:
PrivateSubexit_Click()
"Slosiseejecuta...
Si(Timer1.Enabled)Acontinuacin,

Timer1.Enabled=False'Cronmetro
VideoOCX.Stop
VideoOCX.Close

EndIf

Fin
EndSub
PrivateSubStart_Click()'InitVideoOCXControl,asignarmemoriayempezaraagarrar

Si(NoTimer1.Enabled)Entonces
Start.Caption="Stop"

'mensajesdeerrorinternoDeshabilitarVideoOCX
VideoOCX.SetErrorMessagesfalsos

ControlInit
Si(NoVideoOCX.Init)Entonces
'Initfallado.Mostrarmensajedeerrorysubfinal
MsgBoxVideoOCX.GetLastErrorString,vbOKOnly"VideoOCXError"
Fin
Ms
https://sites.google.com/site/todddanko/home/webcam_laser_ranger

8/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

'Asignarmemoriaparacontroladordeimagenmundial
capture_image=VideoOCX.GetColorImageHandle
'Result_image=VideoOCX_Processed.GetColorImageHandle

Timer1.Enabled=True'Iniciartemporizadorcaptura

"IniciarelmodoCaptura
Si(NoVideoOCX.Start)Entonces
'Iniciofall.Mostrarmensajedeerrorysubfinal
MsgBoxVideoOCX.GetLastErrorString,vbOKOnly"VideoOCXError"
Fin
EndIf
EndIf
Ms
Start.Caption="Inicio"
Timer1.Enabled=False'Cronmetro
VideoOCX.Stop
VideoOCX.Close
EndIf

EndSub
PrivateSubTimer1_Timer()
'TemporizadorparacapturarmanejavideoOCXTools
MatrizDimcomovariante
Dimaltura,anchuraAsInteger
RDim,cAsInteger
Max_rDim,max_cAsInteger
Dimmax_redAsInteger
Dimganancia,offsetcomovariante
Dimh_cmcomovariante
GamaDimAsInteger
Dimpixels_from_centerAsInteger
https://sites.google.com/site/todddanko/home/webcam_laser_ranger

9/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

'Parmetrocalibradoparapixelalaconversindistancia
Ganancia=0,0024259348
offset=0.056514344
h_cm=5.842

max_red=0

'Capturarunaimagen
Si(VideoOCX.Capture(capture_image))Entonces

'Capture_imageVideoOCX.Show

'InicializacintransformacinMatrix
matriz=VideoOCX.GetMatrix(capture_image)

altura=VideoOCX.GetHeight
width=VideoOCX.GetWidth

'Cdigodeprocesamientodeimagen

'Elpuntolsernodebeservistaporencimadelafilacentral(conunpocodepad)
Parar=altura/220alaaltura1

'Nuestraconfiguracinfsicasecalibraomenosparaqueellser
'Puntoenlascolumnasdelmedio...nitemolesteslookngdemasiadolejos
Parac=ancho/225Paraanchura/2+24

"Busqueelvalormsgrandedepxelesdecolorrojoenlaescena(lserrojo)
Si(matriz(c,r,2)>max_red)Entonces
max_red=matriz(c,r,2)
Max_r=r
max_c=c
https://sites.google.com/site/todddanko/home/webcam_laser_ranger

10/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

EndIf
Siguientec
Siguienter

'Calculaladistanciaparaelpuntolserdelamediadelfotograma
pixels_from_center=Max_r120
'Calculagamaencmenbaseaparmetroscalibrados
rango=h_cm/Tan(pixels_from_center*ganancia+offset)
'Imprimirpuntolserfilaycolumnaposicinalapantalla
row_val.Caption=Max_r
col_val.Caption=max_c

'Intervalodeimpresinalseriluminadaobjetoalapantalla
range_val.Caption=gama

"Dibujaunalneaverticalrojaparaintersectarobjetivo
Parar=0Paraaltura1
matriz(max_c,r,2)=255
Siguienter

"Dibujaunalneahorizontalrojaparaintersectarobjetivo
Parac=0Paraancho1
matriz(c,Max_r,2)=255
Siguientec

VideoOCX.ReleaseMatrixToImageHandle(capture_image)

EndIf

Capture_imageVideoOCX.Show

https://sites.google.com/site/todddanko/home/webcam_laser_ranger

11/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

EndSub

Lascapturasdepantalladeestecdigosepuedeveracontinuacin:

https://sites.google.com/site/todddanko/home/webcam_laser_ranger

12/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

VisualC++
vacoCTripodDlg::doMyImageProcessing(LPBITMAPINFOHEADERlpThisBitmapInfoHeader)
{

//DoMyImageProcessing:Esteesellugardondequiereescribirsupropiocdigodeprocesamientodei

//Tarea:Leerelvalordeescaladegrisesdeunpixelyelprocesoenconsecuencia

unsignedintW,H;//anchurayalturadelfotogramaactual[pxeles]

intfilasinfirmar,col;//filaycolposicionesdepixel

ilargosinsigno;//Variabledummyparavectorfilacolumna

intmax_rowsinfirmar;//Filadelpxelmsbrillante

intmax_colsinfirmar;//Columnadelpxelmsbrillante

BYTEMAX_VAL=0;//Valordelpxelmsbrillante

//Losvaloresutilizadosparaelclculodeintervalodedatosdeimagencapturados

//Estosvaloressonsloparaunaconfiguracinespecficadelacmaraylser

https://sites.google.com/site/todddanko/home/webcam_laser_ranger

13/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

constdobleganancia=0,0024259348;//Gananciaconstanteusadaparaconvertir

constdoblecompensado=0.056514344;//Constantededesviacin

constdobleh_cm=5,842;//Distanciaentreelcentrodelacmaraylser

//Pxeldesplazamientoalnguloenradianes

rangodoble;//GamaCalculado

intpixels_from_centersinfirmar;//Ubicacinbrillantepxeldelcentro

//Noinferiordelmarco

Charstr[80];//Imprimirmensaje

CDC*pDC;//Contextodedispositivonecesitaimprimirmensaje

W=lpThisBitmapInfoHeader>biWidth;//BiWidth:nmerodecolumnas
H=lpThisBitmapInfoHeader>biHeight;//BiHeight:nmerodefilas

para(fila=0;fila<H;fila++){

para(col=0;col<W;col++){

//Recordemoscadapxelsecomponede3bytes

i=(unsignedlong)(fila*3*W+3*col);

//Sielvalordelpxelactualesmayorquecualquierotro,

//Eselnuevopxelmax

si(*(m_destinationBmp+i)>=MAX_VAL)

MAX_VAL=*(m_destinationBmp+i);

max_row=fila;

max_col=col;

//Despusdecadacuadro,restablezcavalordepxelmximoacero

MAX_VAL=0;
https://sites.google.com/site/todddanko/home/webcam_laser_ranger

14/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

para(fila=0;fila<H;fila++){

para(col=0;col<W;col++){

//Dibujaunblancoenformadecruzsobreelpxelmsbrillantedelapantallades

if((fila==max_row)||(col==max_col))

*(M_destinationBmp+i)=

*(M_destinationBmp+i+1)=

*(M_destinationBmp+i+2)=255;

//Calcularladistanciadelpxelmsbrillantedesdeelcentroenlugardelabasedelbastidor

i=(unsignedlong)(fila*3*W+3*col);

pixels_from_center=120max_row;

//Calcularrangoencmsegnlaubicacinpxelbrillante,ylasconstantesdeconfiguracinespecf

rango=h_cm/tan(pixels_from_center*ganancia+offset);

//Imprimirmensajeal(fila,columna)=(75,580)

pDC=GetDC();

//Marcosalascoordenadas,ascomorangocalculado

sprintf(str,"Valormximoenx=%u,y=%u,rango=%fcm",max_col,max_row,rango);

pDC>TextOut(75,580,str);

ReleaseDC(PDC);

MicdigocompletodeesteproyectoestdisponiblecomounpaquetellamadoLaserRange.zipenlaparteinferiorde
estapgina.
Tengaencuenta,paraejecutaresteejecutable,tendrquetenertantoqcsdkyelconductorqc543instaladoensu
https://sites.google.com/site/todddanko/home/webcam_laser_ranger

15/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

ordenador.Losentimos,peroustedestensupropiaparaencontrarambos.
Acontinuacinsepresentandosejemplosdelacmarawebconsedetelmetrolserenaccin.Tengaencuenta
cmosevequehaydospuntosdelserenelsegundoejemplo.Esta"luzparsita"escausadoporlosreflejosinternos
enlacmara.Elpuntoreflejadopierdeintensidad,yaquerebotadentrodelacmarademaneraquenointerfieraconel
algoritmoquedetectaelpxelmsbrillanteenlaimagen.

https://sites.google.com/site/todddanko/home/webcam_laser_ranger

16/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

TrabajoFuturo
Unamejoraespecficaquesepuedehaceraestacmarawebbasadotelmetrolseresproyectarunalneahorizontal
enlugardeunpuntosobreunadiana.Deestamanera,podramoscalcularelrangoparacadacolumnadelaimagenen
lugardeslounacolumna.Unaconfiguracindeestetiposeracapazdeserutilizadoparalocalizarreasdealcance
mximocomolugaresqueunvehculopodradirigirhacia.Delmismomodo,lasreasdealcancemnimoseran
identificadoscomoobstculosquedebenevitarse.

Seguimiento
https://sites.google.com/site/todddanko/home/webcam_laser_ranger

17/18

2/3/2015

WebcamBasedDIYtelmetrolserToddDanko

Sobrelabasedemuchaspreguntasycomentariosqueherecibido,parecequemuchagentehatratadodeduplicareste
esfuerzo.Porfavor,tengaencuentaqueestetrabajofuehechooriginalmenteantesde2004(unamaneramucho
tiempoatrs).Siyotuvieraquehacerlotodo,megustarautilizarOpenCVparaloscomponentesdelavisin.Sitengo
algomsdetiempo,voyacrearunejemployquelopongaaqu.

LaserRange.zip(2006k)

ToddDanko,27deagosto2009,18:30

laversin1

tripodDlg.cpp(15k)

ToddDanko,27deagosto2009,18:31

laversin1

vb_laser_ranger.zip(9k)

ToddDanko,27deagosto2009,18:31

laversin1

Comentarios
NoTienesPermisoparaAnadircomentarios.

SesinIniciar | ActividadRecientedelSitio | INFORMARdelaUSOinadecuado | ImprimirPgina | Conlatecnologade GoogleSites

https://sites.google.com/site/todddanko/home/webcam_laser_ranger

18/18

Você também pode gostar