Zacznijmy od uspokojenia Czytelników, że do budowy skanera 3D nie potrzeba aż setki komputerów. Właściwie to wystarczy jeden, ale kosztem znacznego zwiększenia wymagań odnośnie do zastosowanych elementów mechanicznych. Pojedyncza kamera musiałaby otaczać skanowany obiekt (lub musiałby się obracać na podstawce) np. po spirali, fotografując go z wielu punktów. Szybkość tego ruchu byłaby ograniczona przez precyzję mechaniki, czułość kamery oraz jasność oświetlenia, tak aby wykonywane fotografie nie były rozmazane (idealnie by było, gdyby kamera zatrzymywała się przed wykonaniem każdego zdjęcia). W efekcie konieczne byłoby użycie zaawansowanego systemu pozycjonowania kamery, a sam proces skanowania trwałby kilka-kilkanaście minut, w zależności od pożądanej dokładności skanu.
Geneza pomysłu
Autorowi projektu zależało jednak na tym, by skan wykonywany był błyskawicznie, gdyż celem było wykonanie modeli 3D jego dzieci, które trudno było zmusić do nieruchomego przebywania w jednej pozycji. Stąd powstała konieczność zastosowania wielu kamer, które wykonywałyby fotografię jednocześnie. Pierwszym pomysłem było użycie tanich aparatów fotograficznych, dla których opracowany zostałby system automatycznego wyzwalania, ale wtedy poszczególne zdjęcia byłyby zapisane na oddzielnych kartach pamięci, co znacząco utrudniłoby przetwarzanie ich.
Na szczęście autor trafił na artykuł opisujący Raspberry Pi z modułem Pi Camera, które choć nie wydawały się najtańszym rozwiązaniem dla skanera, dawały dużą elastyczność pracy. Płytki można ze sobą połączyć przez Ethernet i szybko wyzwalać, a wykonane zdjęcia w łatwy sposób zgrać na jeden, centralny serwer. W efekcie Richard postanowił nabyć 40 sztuk Raspberry Pi i po jednym module Pi Camera do każdego z nich, 40 kart SD o pojemności 8 GB, zasilacz 5-woltowy o prądzie znamionowym 60 A, celem zasilania komputerów oraz zestaw taśm LEDowych wraz z mocnym, 12-woltowym zasilaczem, które miały oświetlać skanowany obiekt. Okazało się, że podłączenie już 12 kamer daje bardzo dobre rezultaty, a zwiększenie liczby modułów pozwala polepszyć precyzję. Koniec końców, autor przygotował zestaw z 115 komputerów z kamerami, z których każda wykonuje dwa 5-megapikselowe zdjęcia na jeden skan, dostarczając w sumie ponad miliard pikseli, służących do stworzenia wirtualnego modelu. Naturalnie wykonanie projektu wymagało rozwiązania całego szeregu problemów, począwszy od fizycznego połączenia ze sobą tak dużej liczby komputerów, a kończąc na przełożeniu wykonanych zdjęć na model 3D.
Połączenia fizyczne
Autor podjął kilka różnych prób ustawienia sprzętu, przy czym zdecydowanie najwygodniejsze w użytkowaniu okazało się zamontowanie kamer na oddzielnych słupkach, ustawianych wokół skanowanego obiektu. Pierwsza wersja skanera miała słupki drewniane o łukowatym kształcie, na których były zamontowane po trzy kamery. W słupkach wywiercone zostały otwory do przykręcenia Raspberry Pi. Płytki modułu Pi Camera zostały natomiast zamontowane na niewielkich uchwytach, zaprojektowanych przez autora i wydrukowanych na drukarce 3D. Uchwyty te również zostały przykręcone do słupków. Dodatkowo, by uniezależnić jakość skanu od zewnętrznych warunków oświetleniowych, na każdym ze słupków zamontowano po 1-metrowej taśmie diodowej, z zainstalowanymi 60 białymi LEDami.
Niewątpliwie dużym wyzwaniem jest połączenie ze sobą oraz z zasilaniem kilkudziesięciu komputerów umieszczonych na przenośnych słupkach. Już przy 40 komputerach, poprowadzenie 40 przewodów sieciowych może być problematyczne, a dodatkowo pociągnięcie razem z nimi przewodów zasilających także nie będzie łatwe. Niestety, komputery Raspberry Pi nie obsługują technologii Power over Ethernet, która mogłaby znacznie ułatwić instalację. Autor postanowił jednak samodzielnie ją zaimplementować (w podstawowym zakresie), wykorzystując nieużywane żyły w kablach sieciowych do przesyłania napięcia zasilającego.
Kable ethernetowe zostały podzielone na równe kawałki – na potrzeby początkowego ustawienia z 40 komputerami wystarczyły 5-metrowe odcinki. Równa długość wszystkich przewodów jest o tyle istotna, ze nie są one idealnymi przewodnikami do zasilania, w związku z czym mogą powstawać na nich zbyt duże spadki napięcia, by móc zasilić Raspberry Pi z kamerą. Zastosowanie tej samej długości przewodów dla wszystkich komputerów sprawia, że spadek napięcia na złączu zasilania każdego z komputerów będzie identyczny. Można go zmierzyć i skorygować napięcie wspólnego zasilacza komputerów tak, by na wejściu każdego Raspberry Pi wynosiło właśnie 5 V.
Autor zamontował wtyczki 8P8N, popularnie określane mianem RJ-45, korzystając jedynie z 6 żył przewodów ethernetowych. Pozostałe dwie żyły wyprowadził obok, podłączając je z jednej strony do terminali śrubowych, do których dołączył kable biegnące z zasilacza. Z drugiej strony dolutowano wtyczki do goldpinów, które następnie można było wygodnie podłączać do komputerów Raspberry Pi. Zasilanie taśm diodowych zostało poprowadzone oddzielnie. W efekcie, udało się zredukować przewodów całej instalacji, co pozwoliło zarówno zmniejszyć jej koszty, jak i uprościć rozstawianie skanera.
Połączenie 40 komputerów do Ethernetu wymaga zastosowanie odpowiednio dużego switcha ethernetowego lub ich zestawu. Stosowny przełącznik można dobrać w zależności od liczby kamer. Na rynku łatwo dostępne są modele z kilkudziesięcioma portami ethernetowymi oraz wersje zarządzalne, z portami typu „uplink”, które pozwalają na zestawianie ze sobą kilku switchy bez wprowadzania dodatkowych, istotnych opóźnień w transmisji. W praktyce nawet dla ponad 100 komputerów w pełni wystarczające będą switche 100-megabitowe, przy czym warto, by łącze do komputera centralnego było gigabitowe. Nie ma potrzeby tworzenia sieci wirtualnych ani stosowania mechanizmów QoS, czy innych funkcji typowych dla przełączników zarządzalnych, ale szybkie, gigabitowe łącze do serwera lub pomiędzy switchami pozwoli znacznie szybciej wykonywać skan.
Naturalnie, moduły PI Camera został podłączone zgodnie z przeznaczeniem, a karty SD zostały umieszczone w czytnikach Raspberry Pi, po uprzednim nagraniu na nich oprogramowania.
Konfiguracja komputerów
Autor skorzystał z systemu operacyjnego Raspbian, w wersji domyślnej, oferowanej bezpłatnie przez twórców Raspberry Pi. Wszystkie Raspberry Pi podłączone do sieci otrzymały stałe numery IP w ramach jednej podsieci. Autor uznał, że optymalnym rozwiązaniem będzie, by kamery wyzwalać zdalnie z centralnego komputera (laptopa) i by same zapisywały dane na centralnym serwerze – albo tym samym laptopie, albo innym komputerze czy dysku sieciowym. Oznacza to konieczność zastosowania odpowiedniego nazewnictwa plików ze zdjęciami, by można było rozpoznać, z której kamery pochodzi. Aby umożliwić wykonywanie kilku skanów pod rząd, każde kolejne zadanie skanowania skutkuje stworzeniem nowego katalogu na centralnym serwerze, do którego komputery Raspberry Pi kopiują wykonane przez siebie zdjęcia.
Centralnie przechowywane są też ustawienia wszystkich komputerów Raspberry Pi, co znacząco ułatwia wprowadzanie wszelkich zmian w sposobie ich pracy. Skoro i tak muszą być podłączone do Ethernetu, by mogły wykonywać swoje zadanie i musza korzystać z zewnętrznego serwera, by zapisywać na niego pliki, na tym samym serwerze można też przechowywać pliki konfiguracyjne. Domyślnym programem do wykonywania fotografii za pomocą modułu Pi Camera jest raspistill, którego plik konfiguracyjny options.cfg autor umieścił na serwerze. W efekcie uzyskuje się pewność, że wszystkie kamery będą wykonywać zdjęcia z dokładnie takimi samymi ustawieniami.
Pewne obawy mogłaby budzić synchronizacja wykonywanych zdjęć. Ethernet nie jest siecią deterministyczną czasowo i dopiero jego przemysłowe odmiany pozwalają zapewnić wysoką precyzję synchronizacji pracy urządzeń. W przypadku skanera 3D, w którym fotografowane są obiekty względnie nieruchome nie powinno to stanowić jednak wielkiego problemu, a dokładność na poziomie połowy sekundy powinna być wystarczająca. Fakt, że wszystkie komputery są tak samo ustawione i mają tę samą wydajność ułatwia wykonywanie zdjęć w tym samym czasie – pojawiające się opóźnienia będą identyczne dla wszystkich kamer. Znaczenie może mieć też zastosowanie dużych switchy ethernetowych, zamiast długiej drzewiastej struktury, w której droga sygnału od komputera sterującego do najdalszego Raspberry Pi jest znacznie dłuższa niż w do najbliższego. Jednakże kluczowe jest zastosowanie pakietów typu multicast, które w sieciach lokalnych są całkiem poprawnie obsługiwane. Dzięki nim, komputer sterujący przesyła do komputerów Raspberry Pi polecenie tylko raz, a zadaniem switchy ethernetowych jest rozesłanie ich do wszystkich kamer. Ponieważ switche tworzą sobie mapę adresów IP dostępnych na poszczególnych swoich portach, błyskawicznie wiedzą, gdzie muszą przekazać otrzymany pakiet typu multicast i po prostu replikują go jednocześnie na wiele swoich wyprowadzeń. To sprawia, że wszystkie Raspberry Pi otrzymują polecenia jednocześnie, w efekcie czego autorowi udało się uzyskać synchronizację na poziomie poniżej 0,1 s.