zielone logo nomagic
1 kh5hxxzrzoocruvavtbjzg

Podjęcie wyzwania 16 kamer Intel RealSense

Autorstwa Piotra Rybickiego

W Nomagic uczymy roboty rozumieć prawdziwy świat. Nie jest tajemnicą, że świat realny jest niezwykle złożony i do niektórych zadań możesz potrzebować dodatkowej pary oczu. Niektóre z naszych robotów czuły to samo, więc postanowiliśmy im pomóc.

W tym poście dzielimy się naszym doświadczeniem w budowaniu systemu, który umożliwia szybkie robienie zdjęć kolorowych i o wysokiej głębi z maksymalnie 16 kamer Intel RealSense przy minimalnym obciążeniu procesora, z wykorzystaniem systemu operacyjnego robota (ROS1). Dołączamy kod źródłowy!

Połączenie fizyczne

Na pierwszy rzut oka można by pomyśleć, że wystarczy kupić kilka koncentratorów USB 3, podłączyć wszystkie aparaty i po sprawie. Jednak zdobycie wystarczającej liczby portów USB 3 to tylko powierzchowne wyzwanie.

Prawdziwym wyzwaniem jest ograniczona przepustowość USB 3. Firma Intel opublikowała świetny artykuł wyjaśniający różne szczegóły związane z podłączaniem wielu kamer. Głównym wnioskiem jest to, że należy dążyć do maksymalizacji liczby i jakości kontrolerów USB 3 zarządzających kamerami. 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 kamery RealSense

Aby uzyskać pożądaną liczbę portów (16) i zapewnić każdej kamerze odpowiednią moc, zakupiliśmy również cztery dodatkowe zasilane zewnętrzne koncentratory USB: https://www.delock.de/produkte/G_64053/merkmale.html.

Wyzwanie: koncentratory USB dla kamery RealSense

Podłączanie wszystkich kamer było świetną zabawą:

Pod ekstremalnym nadzorem

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

Bitwa

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

Podłączaliśmy i aktywowaliśmy kamery po kolei, obserwując na ekranie wideo z głębokością ros-realsense i RViz. Po pewnym czasie zauważyliśmy spadek liczby klatek na sekundę (FPS). Szybkie dochodzenie ujawniło przyczynę:

Kod FPS

Jeden ze znaków, że kamery działają 🙂

Powyższy zrzut ekranu prawdopodobnie będzie znajomy użytkownikom Linuksa — pełne wykorzystanie procesora, co jest niepożądane, zwłaszcza jeśli zamierzasz uruchamiać na komputerze inne programy. Na naszym komputerze pojedyncza kamera zużywała około 1,2 rdzenia procesora. Kolejnym krokiem było ustalenie źródła obciążenia procesora.

Kod obciążenia procesora

Profilowanie problemu

Przeprowadziliśmy ćwiczenie profilowania i odkryliśmy, że większość obciążenia procesora była spowodowana przetwarzaniem końcowym w ros-realsense. Każda klatka pochodząca z kamery jest filtrowana w celu usunięcia szumu i uzupełnienia brakujących danych za pomocą interpolacji przestrzennej i/lub czasowej. Filtrowanie pojedynczej klatki zajmuje kilka milisekund, więc około 10 kamer wystarczy, aby obsłużyć nawet wydajny procesor. Podczas filtrowania w ros-realsense jest opcjonalny, znacznie poprawia jakość obrazów głębi, więc chcieliśmy go zachować.

Zauważyliśmy, że tak naprawdę nie musieliśmy filtrować wszystkich klatek, ponieważ ostatecznie używamy tylko jednej klatki co kilka sekund. Aby rozwiązać ten problem, rozwidliliśmy i zmodyfikowaliśmy ros-realsense rozważyć ten przypadek użycia. Zamiast filtrować każdą klatkę, przechowywaliśmy najnowsze klatki w buforze pierścieniowym i stosowaliśmy filtry tylko na żądanie za pośrednictwem wywołania usługi ROS. Zachowanie i filtrowanie kilku klatek (zamiast tylko jednej) było konieczne, ponieważ niektóre procesy filtrowania opierają się na wcześniejszych obrazach.

Ta optymalizacja znacznie zmniejszyła obciążenie procesora do około 20% na kamerę. Jednak walka jeszcze się nie skończyła. Niska liczba klatek na sekundę utrzymywała się, choć schemat uległ zmianie — zamiast dotyczyć wszystkich kamer, problem stał się bardziej lokalny, powodując okresowe obniżanie wydajności poszczególnych kamer. (Przewidywalny) winowajca został zidentyfikowany w ros-realsense dzienniki, które zostały wypełnione wiadomościami takimi 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 miały problemy z przesyłaniem całych klatek. Zmniejszyliśmy liczbę klatek na sekundę do 6 i wyłączyliśmy strumienie podczerwieni. Na szczęście to wystarczyło, aby osiągnąć stabilność.

Wyniki

Po wygraniu bitwy przetestowaliśmy nasze rozwiązanie, aby ocenić opóźnienia, jakie możemy osiągnąć.

Walka z opóźnieniami

Kolorowe ramki (niebieskie) nie wymagają przetwarzania, więc można je odebrać szybko – zazwyczaj 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 wątków. Wyrównane ramki głębokości (czerwone) wymagają nieco więcej przetwarzania, stąd niewielki wzrost opóźnienia.

Praca kamer z niską liczbą klatek na sekundę i dłuższym czasem przetwarzania oznacza, że klatki dostarczane przez naszą usługę są lekko przestarzałe. Jeśli jednak scena jest w większości statyczna, tak jak nasza, opóźnienie 0,5 sekundy jest akceptowalne.

Walka z opóźnieniami i zwycięstwo

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

Wniosek

Podsumowując, nasza modyfikacja znacząco zmniejsza obciążenie procesora spowodowane przez kamery Intel RealSense, gdy potrzeba pobrać tylko jedną klatkę od czasu do czasu. Dzięki tej modyfikacji i dodatkowemu sprzętowi możliwe jest podłączenie i korzystanie z ponad tuzina kamer.

Kod źródłowy tej modyfikacji 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 przenieść Twoje procesy realizacji zamówień na wyższy poziom.