Al enige jaren ben ik bezig met het creëren van een kerstboom. In 2016 heb ik mijn kerstboom in de tuin gepland en elk jaar is er weer extra verlichting voor het vullen van de boom nodig.
In 2018 zijn er voor het eerst adresseerbare leds in de boom gehangen en sinds die tijd speel ik met idee van een automatische 3d mapping zodat er animaties over de boom afgespeeld kunnen worden.
Het plan is om dit jaar uit te breiden naar 500 pixels en deze mbv. een webcam te mappen.
Voor het berekenen van de pixel locaties wil ik uit verschillende hoeken met een webcam foto's van de pixel locaties maken. Vanuit verschillende hoeken wil ik een serie foto's maken waarbij in elke foto andere leds branden.
Ik wil het mappen van de pixels iets generieker aanpakken door de pixels vanuit willekeurige camera posities te mappen.
Theoretisch heb ik wel enkele gegevens waarmee ik aan de slag kan.
- Pixels zitten max 10 cm uit elkaar. Op overgangen tussen strings kan dit groter zijn omdat pixels met connectoren ertussen verder uit elkaar zitten. (afstand tussen pixel 50 en 51, 100 en 101 etc).
- Pixels zitten op een vaste plek in de boom. Afhankelijk van de hoek van de camera kunnen 2 naastliggende pixels gezien worden als 2 individuele pixels, of als 1 pixel wat precies op dezelfde plek ligt.
- Uit eerdere jaren weet ik dat pixels eigenlijk altijd wel minimaal 5 cm uit elkaar zitten en max 10. De afstand is constant genoeg in alle richtingen om de gemaakte foto's te kunnen schalen.
- Afhankelijk van hoe ver 2 pixels bij 2 verschillende camera posities uit elkaar liggen moet het mogelijk zijn om te bepalen waar de camera heen verplaatst is.
Als 2 pixels op foto A 10 cm uit elkaar liggen is de foto "loodrecht" op de pixels genomen. Als op foto B de 2 pixels precies "achter" elkaar liggen, dan is de foto van de zijkant genomen. De camera is dan dus 90 graden verplaatste tussen beide foto's
/f/image/7TXBwafB7NotOWT5WRv2ge5V.png?f=fotoalbum_large)
Bovenstaande afbeelding is een schets van hoe ik de automatische camera mapping wil maken. In de afbeelding staan 4 pixels/leds (rood, groen, blauw en geel).
Er zijn 5 camera posities geschetst (1, 2, 3, 4 en alfa). Vanaf elke positie heb ik een loodrechte projectie van de leds genomen en deze projectie als lijn onder de afbeelding gezet.
Enkele gedachten experimenten bij deze afbeelding :
Bij positie 1 en 3 vallen de rode en blauwe led precies op dezelfde positie. Hieruit valt af te lijden dat de camera precies op de lijn rood/blauw staat. Positie 1 en 3 zijn precies gespiegeld wat betekend dat de camera 180 graden verplaatst is.
Hetzelfde geld voor positie 2 en 4. Deze projecties zijn ook gespiegeld.
Vergelijken we positie 1 met 2, dan valt op dat in beeld 1 rood en blauw dezelfde plek hebben, terwijl ze in beeld 2 ver uit elkaar liggen.
Lijn alfa (paarse lijn) is getekend omdat ik in praktijk willekeurige hoeken wil kunnen gebruiken. Vergelijken we lijn 2 en lijn alfa, dan zien we dat de leds op beide lijnen op totaal andere plekken liggen. Het verschil van de positie van de led correspondeert met hoek alfa. Door naar het verschuiven van de leds in beeld 2 en alfa te kijken, moet het mogelijk zijn om de hoek te berekenen.
Als de hoek tussen 2 camera onderling bekend is, is het met voldoende kanten mogelijk om alle camera posities terug te rekenen. Als de posities van de camera berekend zijn kan daarna de exacte posities van alle leds berekend worden.
Uiteindelijk zal de software een paar flinke matrix berekening krijgen en de uiteindelijke posities van de led een gemiddelde positie zijn. Factoren als leds die verplaatsen door de wind, vervormingen van de camera lens etc. zullen uitmiddelen. Ik verwacht dat de aanname dat het camera beeld een "perfecte" loodrechte 2d projectie is geen grote invloed op de eindresultaat heeft.
Mochten mensen zin hebben om mee te knutselen, een setje pixels + adapter + Arduino is te bestellen voor zo'n €25,- . Bij interesse kunnen we de code gezamenlijk maken. Ik heb namelijk wel ideeën over het mappen van de pixels, maar nog niet nagedacht over animaties. Ook kunnen ander opensource projecten interessant als basis zijn.
In 2018 zijn er voor het eerst adresseerbare leds in de boom gehangen en sinds die tijd speel ik met idee van een automatische 3d mapping zodat er animaties over de boom afgespeeld kunnen worden.
Het plan is om dit jaar uit te breiden naar 500 pixels en deze mbv. een webcam te mappen.
Hardware
Software
Voor de software heb ik nog geen definitieve keuzes, behalve dat ik het project in python ga maken.Voor het berekenen van de pixel locaties wil ik uit verschillende hoeken met een webcam foto's van de pixel locaties maken. Vanuit verschillende hoeken wil ik een serie foto's maken waarbij in elke foto andere leds branden.
Matt Parker
Afgelopen jaren heeft Matt Parker een paar video's op youtube gezet met een vergelijkbaar idee.Ik wil het mappen van de pixels iets generieker aanpakken door de pixels vanuit willekeurige camera posities te mappen.
Eerste generatie boom met pixel mapping. | Error Correctie op de pixel locaties |
Pixel mapping
Waar Matt zijn boom 90 graden kon draaien is dat voor mijn boom geen optie. De boom zit vast in de grond en door planten en het huis kan ik niet vanuit alle kanten een mapping maken.Theoretisch heb ik wel enkele gegevens waarmee ik aan de slag kan.
- Pixels zitten max 10 cm uit elkaar. Op overgangen tussen strings kan dit groter zijn omdat pixels met connectoren ertussen verder uit elkaar zitten. (afstand tussen pixel 50 en 51, 100 en 101 etc).
- Pixels zitten op een vaste plek in de boom. Afhankelijk van de hoek van de camera kunnen 2 naastliggende pixels gezien worden als 2 individuele pixels, of als 1 pixel wat precies op dezelfde plek ligt.
- Uit eerdere jaren weet ik dat pixels eigenlijk altijd wel minimaal 5 cm uit elkaar zitten en max 10. De afstand is constant genoeg in alle richtingen om de gemaakte foto's te kunnen schalen.
- Afhankelijk van hoe ver 2 pixels bij 2 verschillende camera posities uit elkaar liggen moet het mogelijk zijn om te bepalen waar de camera heen verplaatst is.
Als 2 pixels op foto A 10 cm uit elkaar liggen is de foto "loodrecht" op de pixels genomen. Als op foto B de 2 pixels precies "achter" elkaar liggen, dan is de foto van de zijkant genomen. De camera is dan dus 90 graden verplaatste tussen beide foto's
/f/image/7TXBwafB7NotOWT5WRv2ge5V.png?f=fotoalbum_large)
Bovenstaande afbeelding is een schets van hoe ik de automatische camera mapping wil maken. In de afbeelding staan 4 pixels/leds (rood, groen, blauw en geel).
Er zijn 5 camera posities geschetst (1, 2, 3, 4 en alfa). Vanaf elke positie heb ik een loodrechte projectie van de leds genomen en deze projectie als lijn onder de afbeelding gezet.
Enkele gedachten experimenten bij deze afbeelding :
Bij positie 1 en 3 vallen de rode en blauwe led precies op dezelfde positie. Hieruit valt af te lijden dat de camera precies op de lijn rood/blauw staat. Positie 1 en 3 zijn precies gespiegeld wat betekend dat de camera 180 graden verplaatst is.
Hetzelfde geld voor positie 2 en 4. Deze projecties zijn ook gespiegeld.
Vergelijken we positie 1 met 2, dan valt op dat in beeld 1 rood en blauw dezelfde plek hebben, terwijl ze in beeld 2 ver uit elkaar liggen.
Lijn alfa (paarse lijn) is getekend omdat ik in praktijk willekeurige hoeken wil kunnen gebruiken. Vergelijken we lijn 2 en lijn alfa, dan zien we dat de leds op beide lijnen op totaal andere plekken liggen. Het verschil van de positie van de led correspondeert met hoek alfa. Door naar het verschuiven van de leds in beeld 2 en alfa te kijken, moet het mogelijk zijn om de hoek te berekenen.
Als de hoek tussen 2 camera onderling bekend is, is het met voldoende kanten mogelijk om alle camera posities terug te rekenen. Als de posities van de camera berekend zijn kan daarna de exacte posities van alle leds berekend worden.
Uiteindelijk zal de software een paar flinke matrix berekening krijgen en de uiteindelijke posities van de led een gemiddelde positie zijn. Factoren als leds die verplaatsen door de wind, vervormingen van de camera lens etc. zullen uitmiddelen. Ik verwacht dat de aanname dat het camera beeld een "perfecte" loodrechte 2d projectie is geen grote invloed op de eindresultaat heeft.
Kerstboom
Nu is bovenstaand een redelijk technisch verhaal. Voor de lief hebber nog wat foto's van de knutsel van afgelopen jaren.2017 ![]() Boom 1 jaar met een standaard led verlichting | 2018 ![]() Uitbreiding met 50 pixels | 2019 ![]() Boom word groter. Uitgebreid met 4 led bollen. |
2020 ![]() Weinig knutsel tijd boom uitgebreid met een standaard verlichting | 2021 ![]() Uitbreiding naar 250 pixels. mrs Sgrovert heeft geholpen met de versiering. |
Mochten mensen zin hebben om mee te knutselen, een setje pixels + adapter + Arduino is te bestellen voor zo'n €25,- . Bij interesse kunnen we de code gezamenlijk maken. Ik heb namelijk wel ideeën over het mappen van de pixels, maar nog niet nagedacht over animaties. Ook kunnen ander opensource projecten interessant als basis zijn.
[ Voor 5% gewijzigd door Sgrovert op 18-11-2024 23:17 . Reden: Plaatjes update 2022/2023 ]