Webcam Based DIY telémetro láser - Todd Danko.pdf

Post on 26-Sep-2015

18 views 1 download

Transcript of Webcam Based DIY telémetro láser - Todd Danko.pdf

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    ToddDankoProyectosrecientes

    OtrosProyectosytutorialesStepperMotorApplianceWebcamBasedDIYtelmetrolser

    Mapadelsitio

    ContactoEscrbame

    ProyectosRecientes>

    WebcamBasedDIYtelmetrolser

    Introduccin

    Haymuchosfueradelagamaestanteencontrarcomponentesdisponibles,incluyendotelmetrosultrasnicos,infrarrojos,einclusolser.Todosestosdispositivosfuncionanbien,peroenelcampodelarobticaarea,elpesoesunapreocupacinprimordial.Esdeseableobtenerlamayorfuncionalidaddecadacomponentequeseaadeaunaclula.Helicpterosrobticoenminiatura,porejemplo,puedellevaraproximadamente100gdecargatil.Esposiblerealizartareasdevisinartificial,comolaidentificacindeobstculosylaevitacindequeelusodeunacmaraweb(ominicmarainalmbricainterfazconunordenadoratravsdeladaptadorUSB).Mejoran,doscmaraswebpuedenproporcionarlavisinartificialestreomejorandoaslaevasindeobstculosporquelaprofundidadsepuededeterminar.Elinconvenientedeestesupuestoeslaadicindeelpesodeunasegundacmara.Estapginadescribecomounpunterolserdeminisepuedeconfigurarjuntoconunasolacmaraparaproporcionarunavisinmonomquinaconinformacindedistancia.

    Esteproyectosebasaengranmedidadeuntutorialencontradoaqu

    Teoradeoperacin

    Elsiguientediagramamuestracmolaproyeccindeunpuntodelsersobreunobjetivoqueestenelcampodevisindeunacmara,sepuedecalcularladistanciaaeseobjetivo.Lamatemticaesmuysimple,porloqueestatcnicafuncionamuybienparaaplicacionesdevisinartificialquenecesitanparafuncionarrpidamente.

    Buscarenestesitio

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    Aspues,aquescmofunciona.Ahazdelserseproyectasobreunobjetoenelcampodevisindeunacmara.Esterayolseresidealmenteparaleloalejepticodelacmara.Elpuntodellserescapturadojuntoconelrestodelaescenaporlacmara.Unsimplealgoritmoseejecutasobrelaimagenenbuscadelospxelesmsbrillantes.Suponiendoqueellsereselreamsbrillantedelaescena(quepareceserciertoparamitiendadedlarpunterolserenelinterior),esconocidalaposicindepuntosenelcuadrodeimagen.Entoncestenemosquecalcularladistanciaalobjetobasadoendondealolargodelejeydelaimagendeestepuntolsercae.Cuantomscercadelcentrodelaimagen,cuantomslejosestelobjeto.

    Comopodemosvereneldiagramaenestamismaseccin,ladistancia(D)sepuedecalcular:

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    Porsupuesto,pararesolverestaecuacin,loquenecesitasaberh,queesunaconstantefijacomoladistanciaentreelpunterolserylacmara,ytheta.Thetasecalcula:

    Pongalasdosecuacionesanterioresjuntos,obtenemos:

    Aceptar,porloqueelnmerodepxelesdesdeelcentrodelplanofocalqueapareceelpuntolserpuedeslosecontarapartirdelaimagen.Qupasaconlosotrosparmetrosdeestaecuacin?Tenemosquerealizarunacalibracinparaderivarestos.

    Paracalibrarelsistema,vamosarecogerunaseriedemedicionesdondesladistanciaalblanco,ascomoelnmerodepxelesdelpuntoesdesdeelcentrodelaimagencadavez.Estosdatossonacontinuacin:

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    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,ascomodeladistanciarealparacadapuntodedatos.

    AhoraquetenemosunTheta_actualparacadavalor,podemosllegaraunarelacinquenospermitecalcularthetadelnmerodepxelesdelcentrodelaimagen.Heutilizadounarelacinlineal(porlotantounagananciayoffsetse

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    necesitaba).Estoparecefuncionarbienapesardequenotieneencuentaelhechodequeelplanofocalesunplanoenlugardecurvadaenunradioconstantealrededordelcentrodelalente.

    Desdemidatosdecalibracin,calcul:

    Offset(ro)=0.056514344radianes

    Ganancia(RPC)=0,0024259348radianes/pixel

    Uso:

    Heresueltopordistanciascalculadas,ascomodeerroresdeladistanciarealdelosdatosdecalibracin:

    RealycalculadadedatosRango

    pxelesdelcentro calcD(cm) realD(cm) Error%

    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

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    Componentes

    Nohayunagrancantidaddepiezasenmitelmetromuestra.Usuntrozodecartnparamantenerunpunterolserparaunacmarawebparaqueelpunterolserenunadireccinqueesparalelaaladelacmara.Laspartesseveacontinuacinsecolocansobreunarejilladeunapulgadaparareferencia.

    Mitelmetromontadoseveas:

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    Software

    Heescritosoftwaredosmaneras,unautilizandoVisualC++yelotroutilizandoVisualBasic.Esprobablequeencuentrequelaversinbsicavisualdelsoftwareesmuchomsfcildeseguirqueelcdigovc++,perocontodo,hayunacompensacin.Elcdigovc++sepuedenponerjuntosdeformagratuita(asumiendoquetieneVisualStudio),mientrasqueelcdigovbrequierelacompradeunpaquetedesoftwaredeterceros(tambinademsdevisualstudio).

    VisualBasic

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    ElcdigodeVisualBasicqueheescritoestdisponiblecomounpaquetellamadovb_laser_ranger.zipenlaparteinferiordeestapgina.

    Paraqueestecdigofuncione,necesitarelVideoOCXcomponenteActiveXinstaladoensuequipo

    Elcdigoquedescribelasfuncionesqueseencuentranenelformularioprincipalseveacontinuacin:

    PrivateSubexit_Click()"Slosiseejecuta...Si(Timer1.Enabled)Acontinuacin,Timer1.Enabled=False'CronmetroVideoOCX.StopVideoOCX.CloseEndIfFinEndSub

    PrivateSubStart_Click()'InitVideoOCXControl,asignarmemoriayempezaraagarrarSi(NoTimer1.Enabled)EntoncesStart.Caption="Stop"'mensajesdeerrorinternoDeshabilitarVideoOCXVideoOCX.SetErrorMessagesfalsosControlInitSi(NoVideoOCX.Init)Entonces'Initfallado.MostrarmensajedeerrorysubfinalMsgBoxVideoOCX.GetLastErrorString,vbOKOnly"VideoOCXError"FinMs

    Traducir

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    'Asignarmemoriaparacontroladordeimagenmundialcapture_image=VideoOCX.GetColorImageHandle'Result_image=VideoOCX_Processed.GetColorImageHandleTimer1.Enabled=True'Iniciartemporizadorcaptura"IniciarelmodoCapturaSi(NoVideoOCX.Start)Entonces'Iniciofall.MostrarmensajedeerrorysubfinalMsgBoxVideoOCX.GetLastErrorString,vbOKOnly"VideoOCXError"FinEndIfEndIfMsStart.Caption="Inicio"Timer1.Enabled=False'CronmetroVideoOCX.StopVideoOCX.CloseEndIfEndSub

    PrivateSubTimer1_Timer()'TemporizadorparacapturarmanejavideoOCXToolsMatrizDimcomovarianteDimaltura,anchuraAsIntegerRDim,cAsIntegerMax_rDim,max_cAsIntegerDimmax_redAsIntegerDimganancia,offsetcomovarianteDimh_cmcomovarianteGamaDimAsIntegerDimpixels_from_centerAsInteger

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    'ParmetrocalibradoparapixelalaconversindistanciaGanancia=0,0024259348offset=0.056514344h_cm=5.842max_red=0'CapturarunaimagenSi(VideoOCX.Capture(capture_image))Entonces'Capture_imageVideoOCX.Show'InicializacintransformacinMatrixmatriz=VideoOCX.GetMatrix(capture_image)altura=VideoOCX.GetHeightwidth=VideoOCX.GetWidth'Cdigodeprocesamientodeimagen'Elpuntolsernodebeservistaporencimadelafilacentral(conunpocodepad)Parar=altura/220alaaltura1'Nuestraconfiguracinfsicasecalibraomenosparaqueellser'Puntoenlascolumnasdelmedio...nitemolesteslookngdemasiadolejosParac=ancho/225Paraanchura/2+24"Busqueelvalormsgrandedepxelesdecolorrojoenlaescena(lserrojo)Si(matriz(c,r,2)>max_red)Entoncesmax_red=matriz(c,r,2)Max_r=rmax_c=c

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    EndIfSiguientecSiguienter'Calculaladistanciaparaelpuntolserdelamediadelfotogramapixels_from_center=Max_r120

    'Calculagamaencmenbaseaparmetroscalibradosrango=h_cm/Tan(pixels_from_center*ganancia+offset)

    'Imprimirpuntolserfilaycolumnaposicinalapantallarow_val.Caption=Max_rcol_val.Caption=max_c'Intervalodeimpresinalseriluminadaobjetoalapantallarange_val.Caption=gama"DibujaunalneaverticalrojaparaintersectarobjetivoParar=0Paraaltura1matriz(max_c,r,2)=255Siguienter"DibujaunalneahorizontalrojaparaintersectarobjetivoParac=0Paraancho1matriz(c,Max_r,2)=255SiguientecVideoOCX.ReleaseMatrixToImageHandle(capture_image)EndIfCapture_imageVideoOCX.Show

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    EndSub

    Lascapturasdepantalladeestecdigosepuedeveracontinuacin:

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    VisualC++

    vacoCTripodDlg::doMyImageProcessing(LPBITMAPINFOHEADERlpThisBitmapInfoHeader){ //DoMyImageProcessing:Esteesellugardondequiereescribirsupropiocdigodeprocesamientodeimgenes //Tarea:Leerelvalordeescaladegrisesdeunpixelyelprocesoenconsecuencia

    unsignedintW,H;//anchurayalturadelfotogramaactual[pxeles] intfilasinfirmar,col;//filaycolposicionesdepixel ilargosinsigno;//Variabledummyparavectorfilacolumna intmax_rowsinfirmar;//Filadelpxelmsbrillante intmax_colsinfirmar;//ColumnadelpxelmsbrillanteBYTEMAX_VAL=0;//Valordelpxelmsbrillante

    //Losvaloresutilizadosparaelclculodeintervalodedatosdeimagencapturados //Estosvaloressonsloparaunaconfiguracinespecficadelacmaraylser

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    constdobleganancia=0,0024259348;//Gananciaconstanteusadaparaconvertir //Pxeldesplazamientoalnguloenradianes constdoblecompensado=0.056514344;//Constantededesviacin constdobleh_cm=5,842;//Distanciaentreelcentrodelacmaraylserrangodoble;//GamaCalculado intpixels_from_centersinfirmar;//Ubicacinbrillantepxeldelcentro //Noinferiordelmarco Charstr[80];//Imprimirmensaje CDC*pDC;//Contextodedispositivonecesitaimprimirmensaje

    W=lpThisBitmapInfoHeader>biWidth;//BiWidth:nmerodecolumnasH=lpThisBitmapInfoHeader>biHeight;//BiHeight:nmerodefilas para(fila=0;fila

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    para(fila=0;fila

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    ordenador.Losentimos,peroustedestensupropiaparaencontrarambos.

    Acontinuacinsepresentandosejemplosdelacmarawebconsedetelmetrolserenaccin.Tengaencuentacmosevequehaydospuntosdelserenelsegundoejemplo.Esta"luzparsita"escausadoporlosreflejosinternosenlacmara.Elpuntoreflejadopierdeintensidad,yaquerebotadentrodelacmarademaneraquenointerfieraconelalgoritmoquedetectaelpxelmsbrillanteenlaimagen.

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    TrabajoFuturo

    Unamejoraespecficaquesepuedehaceraestacmarawebbasadotelmetrolseresproyectarunalneahorizontalenlugardeunpuntosobreunadiana.Deestamanera,podramoscalcularelrangoparacadacolumnadelaimagenenlugardeslounacolumna.Unaconfiguracindeestetiposeracapazdeserutilizadoparalocalizarreasdealcancemximocomolugaresqueunvehculopodradirigirhacia.Delmismomodo,lasreasdealcancemnimoseranidentificadoscomoobstculosquedebenevitarse.

    Seguimiento

  • 2/3/2015 WebcamBasedDIYtelmetrolserToddDanko

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

    Sobrelabasedemuchaspreguntasycomentariosqueherecibido,parecequemuchagentehatratadodeduplicaresteesfuerzo.Porfavor,tengaencuentaqueestetrabajofuehechooriginalmenteantesde2004(unamaneramuchotiempoatrs).Siyotuvieraquehacerlotodo,megustarautilizarOpenCVparaloscomponentesdelavisin.Sitengoalgomsdetiempo,voyacrearunejemployquelopongaaqu.

    SesinIniciar | ActividadRecientedelSitio | INFORMARdelaUSOinadecuado | ImprimirPgina | Conlatecnologade GoogleSites

    LaserRange.zip ToddDanko, (2006k) 27deagosto2009,18:30 laversin1 tripodDlg.cpp ToddDanko, (15k) 27deagosto2009,18:31 laversin1 vb_laser_ranger.zip ToddDanko, (9k) 27deagosto2009,18:31 laversin1

    Comentarios

    NoTienesPermisoparaAnadircomentarios.