Intel Realsense T265 – kamera śledząca!

Chciałbym Ci pokazać kamerę śledzącą, Intel Realsense T265. Jest to najnowszy model, który można zakupić, jako pre-order. Obecnie mój sensor ma już przebieg kilkudziesięciu kilometrów, więc zaczynam mieć wyczucie z czym radzi sobie lepiej, a z czym gorzej. Przejdźmy do specyfikacji.

Zalety i wady Realsense T265

Według specyfikacji:

  • przykręcane złącze Micro USB 3 (dokładnie: USB 3.1 Gen 1 Micro B)
  • 1,5 W poboru mocy
  • Precyzyjne śledzenie, 1% błędu przy zamknięciu pętli
  • 55 gramów, to jest mniej niż pół telefonu.
  • 2 kamery 848×800 @ 30 fps, skala szarości – dostępne
  • szeroki kąt: 163±5° FOV

Zalety z doświadczenia:

  • Niska cena za (w miarę) dokładną trajektorię
  • Za każdym razem się włacza i pracuje w miarę niezawodnie (patrz niżej)
  • Integracja z ROSem!!! Wyjściem z węzła jest trajektoria jako nav_msgs/Odometry oraz transformacja TF, w układzie od miejsca gdzie sensor został włączony. Wszystko 200Hz
  • Mały błąd kątowy nawet po kilkukrotnym zamknięciu pętli zarówno wewnątrz i na zewnątrz budynku,

Wady z doświadczenia:

  • Czasem przestaje działać i przekazuje NaN (not-a-number) zamiast pozycji, gdy zgubi tracking. Zwykle zdarza mi się to gdy sensor jest na samochodzie i przejadę jakiś kawałek. Trajektoria nie wraca po czasie.
  • Wymaga 1.5W na USB 3, co uniemożliwiło podłączenie do starszego komputera ze złączem 3.0. Po podłączeniu przez hub z zasilaniem, da się uruchomić, ale nie działa to stabilnie.
  • Mamy tylko kamery w skali szarości, 30 fps. Niestety kolor by się przydał.
  • Błąd skali jest spory – po przejściu 6 km trajektoria z sensora ma 5 km.
  • Wymaga światła, więc w nocy, czy w ciemnych miejscach polecam oświetlacz (ja kupiłem lampę led do terenówki).

Gdy przejdziemy się kilka metrów po pomieszczeniu po uprzednim wyzerowaniu położenia kamery widzimy że kamera wraca w to samo miejsce z bardzo małym błędem. Ja obszedłem stół, zawróciłem i jestem z powrotem. Na małej skali działa to bardzo dobrze, błędy nie są duże. Ja cały czas jestem w tym samym miejscu w miarę i widzimy, że to jest, tu gdzieś jest 0. Czyli błąd jest na poziomie kilku centymetrów, po przejściu kilku metrów. Realsense T265 wykorzystuje dwie kamery czarno-białe i jak się okazuje, mamy dostęp do obrazu z obu kamer. Możemy odczytywać obraz z prędkością 30 klatek na sekundę.

Unboxing Realsense T265

Możemy przystąpić do otwierania paczki, możesz to zobaczyć na filmie poniżej:

W środku jak zwykle, czyli tak jak w przypadku Intel Realsense D435 jest instrukcja, sensor i kabel. Muszę przyznać, że ten sensor wygląda dużo lepiej niż poprzedni. Poprzedni był z tandetnego plastiku, a tutaj też jest trochę tego plastiku z tyłu, ale mamy także coś podobnego do aluminium.

Poprzednia kamera była podłączana kablem USB C, natomiast ta kamera ma Micro USB 3 z możliwością przykręcenia. Niestety trudno jest znaleźć taki kabel, który będzie przykręcony. Ja na szczęście mam parę takich kabli z kamer, ale nic nie stoi na przeszkodzie aby używać kabla nieprzykręcanego. Pozostaje jedynie ryzyko, że kabel się odłączy.

Jakie dane uzyskasz z Realsense T265 w ROSie?

Aby uruchomić kamerę w ROS wykorzystamy demo:

roslaunch realsense2_camera demo_t265.launch

Po podniesieniu i przemieszczeniu kamery mamy trajektorię. Jeżeli odłożę kamerę z powrotem, kamera wraca do początku, do środka układu współrzędnych. Jeżeli będę kręcił po kwadracie tą kamerą to w widoku z góry mamy prawie w tym samym miejscu poruszającą się kamerę. A patrząc w drugiej płaszczyźnie widzimy kwadrat. Na trójwymiarowym widoku widać w jaki sposób ta kamera się poruszała.

I kiedy są problemy?

Bo są problemy z tą kamerą. Problem jest wtedy gdy szybko drgamy ręką trzymając kamerę. Widzimy, że tutaj parę metrów już kamera pokonała, mimo tego że w rzeczywistości wcale się nie poruszyła. To jest jeden z większych problemów, natomiast jeżeli zamontowalibyśmy tę kamerę np. na robocie, który jak wiadomo się w ten sposób nie porusza, to nie powinno być problemu.

Obecnie mam informację o kolegi który wykorzystuje T265 na dronie, że działa to całkiem dobrze, więc moje obawy się nie potwierdzają. Inna rzecz to wykorzystanie sensora pod wodą – tu nie mam jeszcze informacji o wynikach, czekam na doświadczenia kolegi. Wydaje się, że racjonalnym wymaganiem będzie duża przejrzystość wody i niska odległość od przeszkód czy po prostu dna.

Dane z Realsense T265

Po uruchomieniu sensora za pomocą poniższego polecenia :

roslaunch realsense2_camera rs_t265.launch

Możemy zobaczyć jakie dane otrzymujemy w ROSie, gdy uruchomimy kamerę. Aby to sprawdzić możemy wykorzystać polecenie:

rostopic list

Jako wynik otrzymujemy listę wszystkich topiców w ROSie. Poniższe wyniki otrzymasz gdy uruchomisz sensor za pomocą:

roslaunch realsense2_camera rs_t265.launch

/camera/accel/imu_info
/camera/accel/sample
/camera/fisheye1/camera_info
/camera/fisheye1/image_raw
/camera/fisheye1/image_raw/compressed
/camera/fisheye1/image_raw/compressed/parameter_descriptions
/camera/fisheye1/image_raw/compressed/parameter_updates
/camera/fisheye1/image_raw/compressedDepth
/camera/fisheye1/image_raw/compressedDepth/parameter_descriptions
/camera/fisheye1/image_raw/compressedDepth/parameter_updates
/camera/fisheye1/image_raw/theora
/camera/fisheye1/image_raw/theora/parameter_descriptions
/camera/fisheye1/image_raw/theora/parameter_updates
/camera/fisheye2/camera_info
/camera/fisheye2/image_raw
/camera/fisheye2/image_raw/compressed
/camera/fisheye2/image_raw/compressed/parameter_descriptions
/camera/fisheye2/image_raw/compressed/parameter_updates
/camera/fisheye2/image_raw/compressedDepth
/camera/fisheye2/image_raw/compressedDepth/parameter_descriptions
/camera/fisheye2/image_raw/compressedDepth/parameter_updates
/camera/fisheye2/image_raw/theora
/camera/fisheye2/image_raw/theora/parameter_descriptions
/camera/fisheye2/image_raw/theora/parameter_updates
/camera/gyro/imu_info
/camera/gyro/sample
/camera/odom/sample
/camera/realsense2_camera_manager/bond
/camera/tracking_module/parameter_descriptions
/camera/tracking_module/parameter_updates
/diagnostics
/rosout
/rosout_agg
/tf
/tf_static

Mamy dwa obrazy z kamer, mamy żyroskop, mamy odometrię i przyśpieszenie. Wartości z akcelerometrów pojawiają się z częstotliwości 600 Hz. Częstotliwość żyroskopu to 200 Hz, więc to jest bardzo dobra rzecz. Spójrzmy sobie, jak często jest publikowana kamera, 30 Hz. Druga tak samo, nie jest to strasznie dużo. Nie wiem, czy wewnątrz nie jest więcej klatek na sekundę. A jaka jest rozdzielczość tej kamery? Zobaczmy sobie na zdjęcie i na zapisanym zdjęciu sprawdzimy, jaka jest rozdzielczość 848×800. Nie ma tutaj kalibracji kamery, są zerowe macierze w camera info.

Przykładowe trajektorie

Poniżej zamieszczam kilka przykładów, gdzie algorytm Visual Odometry zintegrowany w sensorze Realsense T265 był wykorzystany do budowania map. Niewątpliwą zaletą sensora jest możliwość pracy zarówno wewnątrz jak i na zewnątrz budynków.

Przykład 1

W przykładzie pierwszym pokazana jest najtrudniejsza trajektoria dotychczas jaką udało mi się przejść z sensorem. Widać na niej kilka przerw, które nie wiadomo czym są spowodowane. Warunki oświetleniowe były bardzo dobre, także wewnątrz gdzie otoczenie było dodatkowo doświetlane. Wnętrze budynku obróciło się o około 30 stopni względem tego co na zewnątrz. Natomiast 40 metrowa klatka schodowa zachowała kształt.

Realsense T265 indoor outdoor trajectory
Widok z góry, ponad 3km. Błąd początek-koniec 35m. Najpierw do okoła budynku, potem w środku i znów na zewnątrz.
Trajektoria z tego samego eksperymentu, widok z boku (tak schody 40m)

Przykład 2

W tym przykładzie pokazuję jeszcze dłuższą trajektorię, niestety bez domkniętej pętli. Po 6 km skończyły się baterie w systemie, bo nie przygotowaliśmy się na tak długi dystans.

Realsense T265 long trajectory
Wieczór, ulice miasta, pętla w lesie między drzewami i pola (na żółto), tam bateria się zużyła. Widok z góry.

Przykład 3

Eksperyment drugi od góry pod względem skomplikowania, natomiast i tak znacznie prostszy niż elektrownia atomowa. Mamy tu wiele przejść przez budynki, także wielopoziomowo.

Realsense T265 multilevel trajectory
Eksperyment z kilkoma przejściami outdoor->indoor->outdoor.

Przykład 4 – porównanie z GPS

Krótkie porównanie wyników z sensora z wynikami z GPS. Otóż to cow sumie jest oczywiste – GPS gwarantuje nam większe błędy i nieciągłość. Tutaj użyto GPS bez RTK, więc dokładność powinna być poniżej 1 m, natomiast odchyłki potrafią być znacznie większe. Nie należy zwracać uwagi na obrót między trajektoriami, są one w innych układach odniesienia.

Realsense T265 trajectory
Eksperyment z GPS. Trajektoria z sensora.
Eksperyment z GPS. Trajektoria z GPS.

Przykład 5 – Visual Odometry vs Lidar Odometry vs SLAM

Trochę porównania – czyli jaki błąd daje nam sensor? Widzimy, że trajektoria z sensora obarczona jest błędem skali co może wynikać z względnie odległych cech w obrazie. Mimo tego, że sensor wyposażony jest w stereo parę, możemy otrzymywać błędy niczym w pojedynczej kamerze i wynika to z braku charakterystycznych punktów w pobliżu kamer. Gdy punkty są daleko od kamer (daleko w stosunku do bazy) stereoparę możemy traktować jako pojedyńczą kamerę, więc napotykamy na problem wyznaczenia skali obiektów. To są moje podejrzenia, a wynikają one z zastosowania odometrii na podstawie lidaru (Lidar Odometry) oraz wykorzystaniu SLAMu do ostatecznego wyrównania danych.

Realsense T265 vs SLAM

Przykład 6 – montaż w samochodzie (dane do pobrania)

W tym przykładzie zamontowałem kamerę na samochodzie, z przodu, na szybie. Rzecz działa się w Poznaniu, możesz obejrzeć VLOGa z tego dnia:

Dane (rosbag) możesz pobrać stąd: https://archive.org/details/20190709092008realsenset265onacar

Trajektoria zakończyła się spektakularnie wartościami NaN.
Trajektoria zaczęła się nie od samego początku (na dole). Sensor zwracał NaN przed dojechaniem do rzeki.

Przykład 7 – outdoor

Wykorzystanie samego sensora na zewnątrz naraża nas na dość duży błąd skali, który wynika najprawdopodobniej z dużej odległości cech od kamery względem bazy, rozstawu kamer. W tym przypadku sensor traci poczucie skali i zaczyna działać jak pojedyncza kamera, która owszem dostarczy nam trajektorię, ale będzie wymagać przeskalowania. Tu z pomocą przychodzą dane z lasera, które można wykorzystać do poprawienia trajektorii. A na koniec trajektorię możemy wpisać w georeferencję by uzyskać informację o położeniu obiektów na mapie.

Porównanie surowej trajektorii z sensora, bez georeferencji (stąd obrót) z trjaektorią z GPS i wyrównaną. W jednym miejscu sensor przeskoczył o kilkadziesiąt metrów tworząc nieciągłość na trajektorii. Zauważ że GPS niekiedy bardzo ‚odskakuje’.
Widok z góry, chmury punktów powstałej przy założeniu wyrównanej trajektorii.
Wynik mapowania z wykorzystaniem trajektorii z sensora Realsense T265, oczywiście po wyrównaniu z wykorzystaniem informacji z lidarów. Kolory odpowiadają intensywności odbicia. Fragment z powyższej chmury punktów.

Podsumowanie

Zastanawiasz się do czego możesz użyć takiego sensora?

  • śledzenie ruchu człowieka
    • VR
    • budowanie map
    • trajektoria indoor/outdoor
  • wyznaczanie trajektorii robota
    • w fabryce, magazynie
    • przedewszystkim indoor, albo outdoor w okolicy dużych budynków, tam gdzie GPS nie wystarczy

Zastosowanie w robotyce ma dodatkową zaletę – dzięki wykorzystaniu np. filtru Kalmana możemy zrobić fuzję informacji z sensorów takich jak enkodery, IMU i uzyskać bardzo dokładną trajektorię eliminując błedy odometrii czy skali sensora.

Czy polecam?
Owszem!

Czy mam w tym interes?
Niestety nie!

Czy chcesz mnie wesprzeć?
Są na to sposoby:
1. dobre słowo, komentarz, subskrypcja kanału na YT
2. możesz kupić mi kawę http://bit.ly/KawaDlaKarola

Linki

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.