1 kh5hxxzrzoocruvavtbjzg

Podjęcie wyzwań 16 kamer Intel RealSense

Autorstwa Piotra Rybickiego

W Nomagic uczymy roboty rozumieć prawdziwy świat. Nie jest tajemnicą, że świat jest naprawdę uniwersalny i wykonuje pewne zadania, które mogą być potrzebne do stosowania na oczy. Niektóre z naszych robotów czuły na samo, więc postanowiliśmy im pomóc.

W tym poście udostępniamy nasze doświadczenie w budowie systemu, który umożliwia szybkie robienie zdjęć kolorowych io wysokiej głębi z maksymalnym 16 kamerami Intel RealSense przy obciążeniu dodatkowym, z użyciem systemu operacyjnego robota (ROS1). Dołączamy kod źródłowy!

Połączenie fizyczne

Na pierwszy rzut oka można to zrobić, wystarczy kupić kilka koncentratorów USB 3, podłączyć wszystkie urządzenia i urządzenie. Jednak wymagana liczba portów USB 3 to tylko liczba powierzchownych wyzwań.

Prawdziwym wyzwaniem jest ograniczona przepustowość USB 3. Firma Intel opublikowała artykuł wyjaśniający różne szczegóły związane z podłączeniem wielu kamer. Główne wnioski polegają na tym, że należy podążać za maksymalizacji liczby i jakości kontrolerów USB 3 wydajnych kamer. Ponieważ nasze komputery mają tylko jeden kontroler USB, zdecydowaliśmy się na zakup karty PCIe USB, która ma oddzielny kontroler USB dla każdego portu: https://www.delock.com/produkte/2072_Type-A/89365/merkmale.html.

Wyzwanie: Kontroler USB dla kamer RealSense

Aby uzyskać dostęp do portów (16) i poszczególnych kamerze zasilania moc, zakupiliśmy także cztery dodatkowe źródła zasilania zewnętrznego koncentratory USB: https://www.delock.de/produkte/G_64053/merkmale.html.

Wyzwanie: koncentratory USB dla kamer RealSense

Pod wyłączeniem wszystkich kamer było możliwe zabawą:

Pod ekstremalnym nadzorem

Przed wieloma robotami można się wydostać, ale nie przed tym 🙂

Bitwa

robot wymaga tylko jednej kamery, a nawet gdy używa ich więcej, zwykle jest ich od 2 do 4. Podłączenie 16 kamer do jednego komputera brzmi ambitnie. Pomyśleliśmy więc: zróbmy to!

Podłączyliśmy i aktywowaliśmy kamery po kolei, na ekranie wideo z głębokością ros-realsense i RViz. Po chwili zauważyliśmy spadek liczby sekund (FPS). Szybkie dotarcie do przyczyny:

Kod FPS

Jeden ze znaków, że kamery istnieją 🙂

Powyższy zrzut ekranu będzie znajomy użytkowników Linuksa — pełne wykorzystanie, co jest częścią składową, szczególnie części uruchamiających na komputerach innych programów. Na naszym komputerze pojedyncza kamera stosowana około 1,2 podziemnego. Konieczne było dostarczenie dodatkowego źródła.

Kod dodatkowy procesora

Profilowanie problemu

Przeprowadziliśmy połączenie profilowania i doprowadziliśmy do tego, że system operacyjny został wprowadzony w końcowym ros-realsense. zamknięta klatka wychodząca z kamer jest filtrowana w celu usunięcia szumu i uzupełnienia hamulców danych za pomocą interpolacji przestrzennej i/lub czasowej. Filtrowanie wyprowadzania wyprowadza kilka milisekund, więc około 10 kamer wystarczających, aby obsłużyć nawet dostępny procesor. Podczas filtrowania w ros-realsense jest opcjonalny, dostępny w wersjach głębinowych, więc chcieliśmy go zastosować.

Zauważyliśmy, że naprawdę nie trzeba filtrować wszystkich klatek, ponieważ ostatecznie wynikają tylko z jednej klatki co kilka sekund. Aby rozwiązać dziesięć problemów, rozwiedliśmy i rozwinęliśmy ros-realsense użycie dziesięciu przypadków użycia. Oprócz filtrowania dostępu, przechowujemy najnowsze klatki w buforze zestawowym i stosowaliśmy filtry tylko na żądanie za pośrednictwem usługi ROS. Zachowanie i filtrowanie kilku klatek (zamiast tylko jednego) było konieczne, ponieważ niektóre procesy filtrowania są następstwem na wystąpieniu.

Ta optymalizacja zabezpieczeń obciążeniowych około 20% na kamerę. Jednak walk jeszcze się nie rozpada. Niska liczba klatek na sekundę została zastosowana, chociaż schemat został zmieniony — zamiast dotyczyć wszystkich kamer, problem stał się bardziej lokalny, dotyczy okresu, który wpływa na poszczególne kamery. (Przewidywalny) winowajca został zidentyfikowany w ros-realsense dzienniki, które zostały wypełnione wiadomościami elektronicznymi jak:

13/05 10:16:06,190 OSTRZEŻENIE [140247325210368] (backend-v4l2.cpp:1057) Odebrano niekompletną ramkę: Wykryto niekompletną ramkę wideo! Rozmiar 541696 z 1843455 bajtów (29%)

Mimo że przepustowość USB była niższa od teoretycznej, kamery powodują problemy z przesyłaniem całych klatek. Zmniejszyliśmy liczbę urządzeń na sekundę do 6 i wyłączyliśmy strumienie radiowe. Na szczęście to wystarczające, aby uzyskać źródło.

Wyniki

Po zwycięstwie, sprawdziliśmy nasze rozwiązanie, aby ocenić skutki, które można zastosować.

Walka z opóźnieniami

Kolorowe ramki (niebieskie) nie wymagają przetwarzania, więc można je szybko wysłać – zwykle poniżej 10 milisekund. Żądanie ramki głębokości (zielona) uruchamia filtrowanie oczekujące, które trwa około 150 ms, w zależności od harmonogramu. Wyrównane ramki głębokości (czerwone) wymagają więcej przetwarzania, stąd niewielkie zwiększenie szerokości.

Kamera z dostępnymi składnikami na drugim końcu stosowania oznacza, że klatki dostarczane przez nasze usługi są lekko przestarzałe. Jeśli jednak scena jest większa statyczna, tak jak nasza, wspólna 0,5 sekundy jest akceptowalna.

Walka z wyczerpami i zwycięstwem

Powyższy histogram przedstawia wiek odebranych klatek, mierzony przy użyciu znaczników czasu wprowadzonych na początku ekspozycji (stąd wiek jest równy odstępowi między klatkami — 166 milisekund).

Port

nasza modyfikacja powoduje zmniejszenie obciążenia przez kamery Intel RealSense, gdy tylko jest to konieczne od czasu do czasu. Dzięki tej funkcjonalności i dodatkowemu sprzętowi możliwe jest korzystanie z ponad tuzina kamery.

Kod źródłowy tej wersji można znaleźć tutaj: https://github.com/NoMagicAi/realsense-ros.

Udostępnij artykuł:

Może Ci się też spodobać

Twoja przyszłość w robotyce zaczyna się tutaj

Skontaktuj się z Nomagic i przekonaj się, jak nasza innowacyjna technologia może skutkować Twoimi konsekwencjami realizacji, które wynikają z poziomu.