Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
https://sites.google.com/site/todddanko/home/webcam_laser_ranger
18/18