3D-miljö Laser Scanner från början (5 / 7 steg)

Steg 5: 2. bearbetningsprogram




Kom ihåg alla att 3D vektor matematik från skolan du trodde du skulle aldrig använda? Vi kommer du fortfarande behöver inte använda det eftersom jag har gjort det för dig.

I denna sista del kommer vi skriva en annan bearbetning skiss som tar de vita bildpunktskoordinater och projekt dem på planet skapad av linjära laser. Varje vit pixel blir en tänkt linje från kameran i 3D-rymden. Där varje linje skär med imaginära laserplanet, ritas en datapunkt. Detta upprepas för varje vit pixel i varje webcam ram, så småningom bygga upp en 3D punktmoln. Bara titta på videon...

Den enda del av den setup jag ska nämna här är parametern "rotcam". Det är där du ska infoga vinkeln på webbkameran, där 0deg är vänd rakt fram och 90deg tittar på lasern. Det ska sitta mellan 10 och 40 grader beroende på vad du skannar. Små vinklar för långt bort objekt och större vinklar för nära och kära.

Till att börja med i lottningen slingan vi behöver expandera de klippning plan med "perspektiv" är detta långt bort och nära ting från försvinna. Vi måste skapa 3 rader för att representera X, Y och z-axeln och gör dem röda, gröna och blå.

Därefter kan vi ställa in vår kamera som vi använder för att titta runt i 3D-rymden. Vi kan använda sin och cos tillsammans med musens X-position på skärmen för att skapa en skivspelare effekt för att visa ämnet lättare. Leka med detta följaktligen för att få något bekväm att använda.

Så nu vi hoppar in i en slinga som gör alla matematik. Men vi vill bara ha den att köra om någon knapp trycks. Detta innebär att den bara har att göra beräkningar en gång istället för att upprepa om och om igen.

Här måste vi läsa in textfilen med vit pixel koordinaterna och spara den på en sträng vektor "myString". Ärligt talat, jag vet inte varför det måste vara en vektor, det tar bara upp det första elementet men det vägrar att arbeta om det är bara en sträng. Okej behöva vi då göra massiva Tom float vektorer för X, Y och Z koordinater där varje kommer att fyllas med komponenten motsvarande XYZ i varje enskild datapunkt i punktmoln.

'myString 'needs delas i varje webcam ram med hjälp av splitTokens för';'. Detta har omskrivna "myString" som en vektor med koordinater från en kamera ram i varje element.

Vi kan nu hoppa in i en for-loop som upprepas en gång för varje kamera bild sparas i myString.

Sedan behöver vi göra en annan sträng vektor kallas "stringPart" som delar 'myString' upp ytterligare. Det delar det in i individ X och Y vit bildpunktskoordinater som nu finns i varje element. Detta är bara sparar en bildruta i taget.

Motorns aktuella rotationsvinkel sparas i "rotmot" och kommer från det första elementet i den 'stringPart', vektor konverteras till ett flyttal.

För denna nästa bit är vår 3D-rymden startpunkt (0,0,0) centrum av motoraxeln på ytan av armen.

Här använder vi en funktion som kallas pushMatrix. Detta används för att ändra våra lokala position i 3D-rymden, det ändrar i grunden där i mitten av vårt 3D universum är. Vi kan sedan använda funktionerna modelX, Y, Z för att hitta verkligt globala koordinaterna för en punkt efter pushMatrix översättningar och rotationer. Mycket användbara grejer! Så inom denna första pushMatrix rotera vi i Y av motorer nuvarande vinkeln.

Vi går in i en annan pushMatrix (en i en annan) och översätta från motoraxelns centrum längs armen till lasern. Här kan vi skapa ekvationen för linjära lasrar planet. När jag säger laserplan, talar jag om ett plan där Lasern kan lysa på någon punkt längs planet. Så planet går genom laser och genom allt lyser det på.

För att göra plan ekvationen, behöver vi två saker som gör en linje vinkelrätt mot fordonets laser. Detta är planets NORMAL VEKTOR. Ekvationen härstammar från detta och en punkt på planet.

Vi använder sedan popMatrix för att ångra vad pushMatrix gjorde. Vi bara använda den en gång så vi åker tillbaka till stadens motorer men fortfarande med sin rotation omvandling.

Denna nästa del arbetar vi inom en annan for-loop att körs en gång för varje vit pixel, så gör det längden på stringPart men ökar den i två. Detta beror på att vi vill använda X och Y-koordinater i denna slinga på samma gång.

Så nu arbetar vi med en vit pixel som kommer att bli en enstaka datapunkt. I denna slinga måste först aktivera vit pixel XY-koordinater i vinklar som fungerar som XY vinklar för imaginära projektion raden ur kamerans centrum... kolla bilderna för att se vad jag pratar om.

Nu måste vi använda pushMatrix igen och flytta från motoraxeln längs armen till stadens kameror. Sedan vi rotera i Y av kamerans vinkel, och slutligen vi rotera i X och Y igen med vinklar jag beskrev i förra stycket. Så nu är våra lokala koordinater i kameran, siktar rakt ut längs en enda vit pixel projektion linje.

Nu gör vi raden projektion på samma sätt gjorde vi den normala vektorn för planet. Göra en punkt i kamerans centrum och en annan punkt ut en bit längs linjen, projektion. Från detta vi ekvationen för linjen.

Här pop vi matrisen igen för att återgå till motoraxeln med motorns rotation.

Nu vi använder en ordnas version av planet ekvationen med ekvationen för den linje som infogas i det och lösa 't '. Se ekvation ordnas i bilderna. Sedan grejer resultatet för 't' i rad ekvationer och Z. Så nu har vi våra XYZ-koordinater för en enstaka datapunkt! Stoppa i "drawpoint" vektorer som håller varje punkt.

Använd popMatrix igen för att återgå till början av det globala koordinatsystemet utan översättningar eller rotation transformationer.

Så nu har vi 3 enorma vektorer för XY och Z komponenter för alla data pekar men faktiskt inte har dragit någon poäng för punktmoln. Så kan vi göra det nu. Använda en for-loop gå igenom varje datapunkt att göra den så länge som 'drawpointX' och i slingan, använda ' point(drawpointX[i],drawpointY[i],drawpointZ[i]). Detta tomter en punkt vid varje korsning mellan en vit pixel projektion linje och laserplanet.

Det är det, bra gjort! Tryck bara kör och tryck på valfri tangent om du vill återge scenen. Kontrollera att filen du försöker läsa från sparas i mappen för denna skiss.

Se Steg
Relaterade Ämnen

Bygga en 30$ laser Scanner

IntroduktionDetta instructable hjälper dig att bygga en 3D-scanner för mindre än $30, eller ens $12 om du redan har en USB webbkamera.Se prislapp och begränsningar av kommersiella skannrar jag beslutat att utmana mig själv att bygga min egen. Det sku...

3-D Laser Scanner

skapa din egen super högteknologiska 3-D laserscanner. Använder bara en laserpekare, vinglas, roterande plattform och en digital videokamera, kan du göra exakt 3-D modeller av ett objekt eller en person.Nu vet hur! Klicka på stegen ovan för mer infor...

Laser skär intarsia

jag var nyligen inspirerad att skapa min egen brickspelet. Målet med spelet är att skapa banor runt bordet och försöka bo i styrelsen så länge som möjligt. Jag tycker spelet fungerar bra i är det aktuella läget så jag beslöt att göra något lite mer b...

En linjär laser borste för att måla med ljus

om du älskar fotografi och experimentera med specialeffekter kommer du bli glad att veta att med en mycket enkel krets och en billig laser kan du enkelt bygga ett slags laser "scanner" för att ta imponerande bilder och porträtt.Mitt projekt var...

Chefbot: En DIY autonoma mobil robot för att servera mat på Hotell

Som titeln säger, ska vi se hur man bygger en autonom mobil robot kallas Chefbot som är för servering av mat och dryck i hotell och restauranger.Detta var ett hobbyprojekt och jag byggde denna robot efter att ha sett en robot som kallas Turtlebot2. H...

Arduino-drivna A-10 stick grepp remote w/Emergency Party knappen!

jag kom över Plama2002's "Emergency Party Button" bygga ett tag tillbaka och ville ha något liknande för min bar. Jag hade också en gammal USAF B-8 stick grepp från en A-10A som jag plockade upp i mitt tidigare liv. Jag tänkte att istället för a...

Hur man köper en laserskrivare.

Ny INFORMATION!Det här är en länk till en PDF-fil av hur Fyll nästan alla typer av laserskrivare patron. Det verkar som Samsung har tagit till lödning sina ID marker till en sekundär styrelse att göra det svårare.Detta är en lista med instruktioner,...

En sandsten block byggt av lego, blanda riktiga objekt med 3d Tryck

genom att kombinera 3d-scanning, 3d digital modellering och 3d-utskrifter, är det möjligt att skapa fantastiska och överraskande effekter, föremål som kan sömlöst smälter mellan verklighet och fantasi. I denna tutorial kommer beskriva jag processen a...

Raspberry Pi och ROS (Robotic Operating System)

i den här guiden vi ska gå över att inrätta en Raspberry Pi med Linux och ROS. Samt att bekanta sig med några av grunderna genom att köra några enkla handledning program från "ROS WIKI" . Om du är obekant med ROS kan du kolla in WIKI eller en av...

Testa 3D tryckta rigg för en R/C Wing segel mark Yacht prototyp

Mitt namn är Ernest Leigh och mitt företag heter Dragonfly HC3D Studios, LLC. Det är en start-up koncept designstudio tillägnad att skapa helt unika tre dimensionella modeller av futuristiska luftfartyg, fordon, tecken och andra fantasifulla skapelse...

Parámetros de Skeinforge en español

SkeinforgeSkeinforge es una herramienta para los programas ReplicatorG y MakerWare. ESTA herramienta recibe todas las configuraciones que desees para tus impresiones 3D y las släkten sv Gcode, es decir, las convierte sv archivos .x3g o .s3g antes de...

Copal - oslagbar i branschen för mycket tillförlitlig elektronisk komponent

Veta om Copal elektronik-del av gruppen Nidec:Som en del av gruppen Nidec är Copal Electronics en tillverkning av elektroniska komponenter. Företaget grundades i April 1967. Den första produkten som de utvecklat var wire wound trimmern som användes i...

Början Microcontrollers del 4: Installera programmering miljö (WinAVR)

Välkommen till nästa steg i vår serie. Vi kommer att introducera några grundläggande programmeringselement nu. Denna handledning är helt enkelt om hur du installerar din programmeringsmiljö. Den programmeringsmiljö som vi kommer att använda kallas Wi...

DIY High-Speed bok Scanner från skräp och billiga kameror

jag älskar böcker. Det finns några verkligt fantastiska kunskap och information dold ute i hårt för att hitta, sällsynta och inte kommersiellt gångbara böcker. Jag tycker att jag vill ha mina böcker med mig överallt. Men det är där problemen börjar....

CNC Laser för utskrift av bilder och gravyr - Shapeoko 2 baserade

Om du äger eller planerar att bygga en Shapeoko 2 CNC-maskinen, kommer att detta Instructable gå igenom stegen för att lägga till en 2 watt laser kan skriva ut gråskala bilder på många ytor. Du hittar också Detaljer om hur man gravera på full effekt....

3D-Scanner: FabScan Pi

Det finns flera sätt att bygga en prisvärd 3D scanner för ditt hem. Ett sätt är att göra bilder (kanske även automatisied) från alla sidor av ett objekt och låta Autodesk 123D fångsten gör sin magi. Ett annat alternativ är att använda en djup kamera...

Laser intarsia & Inlays - avancerad teknik

Att skapa trä inlays för en trälådaFör att skapa inlaga designen på denna trälåda (8 x 4 tum), använder jag Adobe Illustrator att rita vektor design och sedan använder ImagePaint programvara, som är en plug-in för Adobe Illustrator, för att använda t...

Configurando la Grabadora Laser Benbox DIY | Ställa in Benbox DIY laser gravörens

Hola! en este Instructable voy en compartir con ustedes el como configurar el programvara e instalar los förare para la maquina de grabado laser Benbox DIY.Primeramente compartir con ustedes que inget tengo ninguna relación con la empresa Benbox. Yo...

CS4985 Projekt: rörelse Scanner

Någonsin undrat om någon eller något kryper om ditt hus? Någonsin velat få realtidsdata om rörligheten några fot ifrån dig? Någonsin velat göra en revolver som upptäcker rörelse, bara för skojs skull? Sedan har jag projektet för dig!Enkelt. Lightweig...