3D laserscanner van de omgeving, en wel vanaf nul (5 / 7 stap)

Stap 5: 2de Processing programma


Herinner me al die 3D-vector wiskunde uit school dat je dacht dat je nooit zou gebruiken? We zullen u nog steeds niet hoeft te gebruiken omdat ik het heb gedaan voor u.

In dit laatste deel zullen we een ander Processing schets waarin die witte pixelcoördinaten en hen op het vliegtuig door de lineaire laser gemaakt projecten schrijven. Elke witte pixel wordt een denkbeeldige lijn coming out van de camera in 3D-ruimte. Waar elke lijn met het denkbeeldige laser-vliegtuig snijdt, worden een gegevenspunt getekend. Dit wordt herhaald voor elke witte pixel in elk frame van de webcam, uiteindelijk een 3D puntenwolk opbouwen. Gewoon kijken naar de video...

Het enige deel van de setup die ik hier zal vermelden is de parameter 'rotcam'. Dit is waar u wilt invoegen op de hoek van de webcam, waar 0deg kampt ongecompliceerd, en 90deg is kijken van de laser. Het moet zitten tussen 10 en 40 graden, afhankelijk van wat u scant. Kleine hoeken ver weg voor objecten en grotere hoeken voor close ones.

Om te beginnen met in de lus van de loting moeten we uitbreiden van de vliegtuigen van de knippen met behulp van 'perspectief' is dit ver weg en dingen die zeer close van verdwijnen. Moeten wij 3 lijnen vertegenwoordigen de X-, Y- en z-as te laten rood, groen en blauw te maken.

We kunnen vervolgens onze camera die we gebruiken om de 3D-ruimte rondkijken instellen. We kunt sin en cos samen met de X-positie van de muis op het scherm om een draaitafel effect om weer te geven van het onderwerp gemakkelijker te maken. Spelen rond met deze dienovereenkomstig om iets comfortabel te gebruiken.

Dus nu zijn we springen in de lus die alle de wiskunde doet. Maar we willen alleen wordt uitgevoerd als een toets wordt ingedrukt. Dit betekent dat er alleen om te doen de berekeningen eenmaal in plaats van het herhalen over en voorbij.

Hier moeten we het tekstbestand met de witte pixelcoördinaten laden en opslaan op een tekenreeksvector 'myString'. Eerlijk gezegd, ik weet niet waarom het moet worden een vector, het neemt slechts het eerste element maar weigert om te werken als er alleen een tekenreeks. Oke moeten we dan zijn om het enorme lege float vectoren X, Y- en Z-coördinaten waar elk zal worden gevuld met de overeenkomstige XYZ-component voor elke één gegevenspunt in de puntenwolk.

'myString 'needs worden onderverdeeld in elk frame van de webcam met splitTokens voor';'. Dit heeft herschreven 'myString' als een vector met coördinaten van het ene frame van de camera in elk element.

We kunnen nu springen in een for-lus dat wordt eenmaal herhaald voor elke camera frame opgeslagen in myString.

Daarna nodig hebben wij om een ander tekenreeksvector genaamd 'stringPart', die nog verder 'myString' splitst. Het opsplitsen in persoon X en Y witte pixelcoördinaten nu deel uitmaakt van elk element. Dit is alleen bespaart één frame tegelijk.

De huidige hoek van de motor wordt opgeslagen in 'rotmot' en komt uit het eerste element van de 'stringPart', vector geconverteerd naar een float.

Voor dit volgende beetje is onze 3D ruimte vertrekpunt (0,0,0) het centrum van de de motor schacht op het oppervlak van de arm.

Hier gebruiken we een functie genaamd pushMatrix. Dit wordt gebruikt om onze lokale positie in de 3D-ruimte te wijzigen, in principe verandert het waar het centrum van ons universum 3D is. Wij vervolgens kunt de modelX, Y, Z-functies te vinden van de echte mondiale coördinaten van een punt na pushMatrix vertalingen en rotaties. Zeer nuttig spul! Dus in deze eerste pushMatrix draaien we in Y door de huidige hoek van motoren.

Vervolgens gaan in een andere pushMatrix (een binnen een andere) en vertalen van de motoras centrum langs de arm aan de laser. Hier kunnen we de vergelijking voor de lineaire lasers vlak maken. Als ik zeg laser vliegtuig, spreek ik over een vliegtuig waar de laser kan schijnen op een punt langs het vliegtuig. Dus het vliegtuig door middel van de laser en om het even wat gaat schijnt het op.

Om de vergelijking van het vliegtuig, moeten we twee punten waardoor een lijn loodrecht op het vlak van de laser. Dit is van het vliegtuig normaal VECTOR. De vergelijking is afgeleid van dit en een punt op het vliegtuig.

Vervolgens gebruiken we popMatrix ongedaan maken wat de pushMatrix deed. Wij gebruiken alleen het eenmaal dus we gaan terug naar het centrum van de motoren, maar nog steeds met de transformatie van haar rotatie.

In dit volgende deel werken wij binnen een andere for-lus dat loopt eenmaal voor elke witte pixel, dus de lengte van de stringPart halen maar het doormidden verhogen. Dit is omdat we gebruik wilt maken van X-en Y-coördinaten in deze lus op hetzelfde moment.

We zijn nu bezig met een enkele witte pixel die een afzonderlijk gegevenspunt worden zal. In deze lus moeten we eerst om te zetten van de witte pixel XY-coördinaten in hoeken die fungeren als de XY voor de projectie van de denkbeeldige lijn vanuit de camera's centrum... check hoeken de beelden om te zien wat ik over spreek.

Nu moeten we gebruik van pushMatrix opnieuw te verplaatsen van de as van de motor langs de arm naar het centrum van camera's. Vervolgens draaien we in Y door de camerahoek, we draaien in X en Y opnieuw met behulp van de hoeken die ik beschreven in de laatste alinea. Dus nu zijn onze lokale coördinaten in de camera, die gericht zijn rechtstreeks uit een enkele witte pixel projectie lijn.

Nu we de projectie-lijn op dezelfde manier maken maakten we de normaalvector voor het vliegtuig. Maak een punt op de camera's centrum en een ander punt uit enige afstand langs de lijn van de projectie. Hieruit maken wij de vergelijking voor de lijn.

Hier duiken we de matrix weer terug te keren naar de de motor as met de rotatie van de motor.

Nu we een herschikt versie van de vliegtuig-vergelijking met de vergelijking van de regel ingevoegd in het gebruiken en op te voor 't lossen '. Zie de vergelijking herschikt in de beelden. Vervolgens spul het resultaat voor 't' in de vergelijkingen van de lijn voor XY en Z. Dus nu hebben we onze XYZ coördinaten voor een afzonderlijk gegevenspunt! Duw het in de 'drawpoint'-vectoren die in het bezit van elk punt.

PopMatrix opnieuw terug te keren naar het begin van de wereldwijde coördinatensysteem zonder vertalingen of rotatie transformaties gebruiken.

Dus nu hebben we 3 grote vectoren voor XY en Z-componenten van elke gegevens wijzen maar geen punten voor de puntenwolk eigenlijk nog niet getrokken. Zo kunnen we dat nu doen. Gebruik een for-lus te doorlopen elk gegevenspunt daarmee als lang als 'drawpointX' en in de lus, gebruik ' point(drawpointX[i],drawpointY[i],drawpointZ[i]). Dit percelen een punt op elk snijpunt tussen een witte pixel projectie lijn en de laser-vliegtuig.

Thats it, goed gedaan! Net hit lopen en treffer ieder toonsoort te geven van de scène. Controleer of het bestand dat u probeert te lezen van is opgeslagen in de map van deze schets.

Gerelateerde Artikelen

Saus van tomaat en rundvlees volledig vanaf nul

Saus van tomaat en rundvlees volledig vanaf nul

dit is ongeveer zoals "from scratch" als kunt u het zonder het moeten uitgaan van de slager uw eigen vlees. Ik heb deze saus meerdere malen nu en ik voel mijn methoden worden verfijnd genoeg waar ik ben comfortabel met de Instructable Gemeenscha
Cm7b5 - het maken van een compiler voor x86 vanaf nul

Cm7b5 - het maken van een compiler voor x86 vanaf nul

Dit is een tutorial voor het maken van een compiler voor een eenvoudige subset van de C taal op x86 het platform. De broncode en de voorbeelden zijn op github.comCm7b5 broncodeCm7b5 wikiDe codevoorbeelden doorlopen progressieve stappen:Tekenreeks tok
Geklonken Maille vanaf nul.

Geklonken Maille vanaf nul.

Er zijn al een aantal Instructables op maken van maille, en verschillende projecten uit maille. Het één ding dat ik vond dat ontbrak was hoe maak geklonken maille.Nu, in het verleden ik heb dabbled in geklonken maille een beetje, mijn maille en plate
Lekker brood van de banaan (vanaf nul)

Lekker brood van de banaan (vanaf nul)

dit is mijn eerste instructable. En dit is banaanbrood die ik... vanaf nul gemaakt. Reactie hieronder en vertel me wat je denkt. Als ik genoeg goede reacties te krijgen zou kunnen ik proberen een ander instructable!!!Stap 1: Ingrediënten en benodigdh
Hoe het bouwen van een zeilboot roer vanaf nul

Hoe het bouwen van een zeilboot roer vanaf nul

deze bijzondere roer is gebouwd op het oorspronkelijke roer voor een ~ 20' Bayliner Buccaneer zeilboot.  Het origineel had gekraakt en rotten vrij slecht.  De eigenaar van de zeilboot afgesneden van de bovenkant van het roer en gemaakt van een houten
Een spiraal Rainbow Kite staart vanaf nul

Een spiraal Rainbow Kite staart vanaf nul

Ik heb willen om een staart voor mijn kite voor geruime tijd nu. Ik vlieg een prisma Quantum stunt vlieger die - op 84 inch over de spanwijdte - een behoorlijk indrukwekkend vlieger, waardoor er een vrij indrukwekkende staart. Toen ik voor het eerst
79cc gemotoriseerde fiets vanaf nul

79cc gemotoriseerde fiets vanaf nul

Hallo weer iedereen! In dit instructable ik zal je laten zien hoe het bouwen van een 79cc, 4 takt gemotoriseerde fiets vanaf nul (niet een motor kit). De fiets die we zullen bouwen is veruit superieur aan kit motoren op vrijwel alle gebieden, met inb
Een carbon fibre viool ik vanaf nul maakte

Een carbon fibre viool ik vanaf nul maakte

vorig jaar maakte ik een carbon fibre viool,Ik begon door het opstellen van een viool op papier, uitwerken van de hoogten van de kromme, plotten van de partij op papier,Zodra ik had mijn plannen het tijd was om te beginnen met het maken van mallen, d
HacKeyboard, een mechanisch toetsenbord gebouwd vanaf nul

HacKeyboard, een mechanisch toetsenbord gebouwd vanaf nul

Hallo collega 'instructablers'! In dit instructable zult presenteer ik u een gloednieuw project dat ik net heb voltooid. In feite ben ik met behulp van het project zelf te schrijven dit instructable. Presenteer ik u de verbazingwekkende, het fantasti
Lederen Spiked manchet vanaf nul

Lederen Spiked manchet vanaf nul

Hallo iedereen, dit is mijn eerste Instructable. Ik heb genoten van deze site al enkele jaren, en ik denk dat it's about time die ik terug te aan de prachtige gemeenschap hier geven.Ik ben een internationale student die momenteel studeren in China, e
Shoji stijl kast schuifdeuren, vanaf nul.

Shoji stijl kast schuifdeuren, vanaf nul.

Mijn huis had de generieke metalen bi-fold kast deuren die er erg goedkoop uitzien. Ik wilde een hogere einde blik maar niet een hogere einde prijskaartje. Na de echte Shoji prijzen is deuren op in de omgeving van $1000 die heb ik besloten dat ik kon
Hoe maak je een Arduino vanaf nul

Hoe maak je een Arduino vanaf nul

Zuinig Engineering is de beste weg vooruit voor de wetenschap.Bent u geïnteresseerd in het maken van enkele arduino vanaf nul, bent u bij ons aan het juiste adres.Ziet u een video tutorial van dit instructable: hierHet zal vullen alle mazen of twijfe
Maak een Bahut, vanaf nul

Maak een Bahut, vanaf nul

Meer opslagruimte en oppervlakte, hopelijk unclutter onze keukeneiland, te creëren zochten we een brede bahut.Uiteindelijk heb ik een, met enkel basishulpmiddelen handheld. Dit alles duurde minder dan drie dagen. Klinkt interessant? Stem dan alstubli
Passievruchten azijn (vanaf nul) met wortel paprika salade

Passievruchten azijn (vanaf nul) met wortel paprika salade

Ik kwam over fruit smaak azijn en was gefascineerd door het concept. Passievruchten was mijn eerste keuze, aangezien er een unieke smaak van zijn eigen. de zure smaak is net wat ik wil voor een salade. Dus ik probeerde het maken van passievruchten az