Lab02-Kalibracja-wewnetrzna

Nowoczesne Sensory w Robotyce

Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej

Laboratorium 2: Kalibracja wewnętrzna

Powrót do wyboru zajęć ## Ważne uwagi organizacyjne

Ze sprzętem laboratoryjnym należy obchodzić się ostrożnie. Nie odłączać kabli sieciowych od komputerów.

Cel zajęć

Celem zajęć jest uruchomienie kamery w kontenerze Docker oraz wizualizacja danych w różnych narzędziach przeznaczonych do tego.

Dostępne kamery

Materiały do pracy

Wstęp do kalibracji kamery

Kalibracja kamery jest procesem, który pozwala na określenie parametrów wewnętrznych i zewnętrznych kamery. Parametry wewnętrzne opisują właściwości optyczne kamery, takie jak ogniskowa, punkt główny, czy współczynnik kształtu pikseli. Parametry zewnętrzne opisują położenie i orientację kamery w przestrzeni.

Artykuł o kalibracji kamery.

Na tych zajęciach spróbujemy skalibrować wewnętrznie parametry kamery, a następnie wykorzystać je do rektyfikacji obrazu, czyli usunięcia zniekształceń optycznych. Następnie zbierzemy dane które wykorzystamy w kolejnym tygodniu.

Proszę pobrać i zainstalować pakiet camera_calibration, który jest częścią ROS 2, aby móc przeprowadzić kalibrację kamery. Można to zrobić za pomocą polecenia:

sudo apt install ros-humble-camera-calibration

Następnie, należy uruchomić narzędzie do kalibracji kamery poleceniem:

ros2 run camera_calibration cameracalibrator --size <size> --square <square_size> --ros-args -r image:=camera_topic_example/image_raw

Uwaga dotycząca planszy kalibracyjnej

  1. Plansza kalibracyjna powinna być dobrze oświetlona, aby narzędzie mogło łatwo wykryć wzór.
  2. Ważne żeby ruchy planszy pokryły cały obszar widzenia kamery.
  3. Proszę też zwrócić uwagę na kąty widzenia planszy, powinny być one różne, aby narzędzie mogło lepiej oszacować parametry kamery.

Po zakończeniu kalibracji w terminalu należy znaleźć wyniki.

image_width: 1440
image_height: 1080
camera_name: "camera_name_example"
camera_matrix:
  rows: 3
  cols: 3
  data: [1182.076341466904, 0.0, 745.719763960083, 0.0, 1182.1562723312031, 586.9611143687932, 0.0, 0.0, 1.0]
distortion_model: "plumb_bob"
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.23696461760800433, 0.08719420863808569, 0.00031189430352460666, -0.0003178248640267326, 0.0]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
projection_matrix:
  rows: 3
  cols: 4
  data: [1076.090576171875, 0.0, 749.3348798443039, 0.0, 0.0, 1120.1810302734375, 591.6241031923128, 0.0, 0.0, 0.0, 1.0, 0.0]

To są wyniki uzyskane podczas mojej kalibracji, każda kalibracja będzie się różnić, proszę jej użyć jako sugestii, a nie jako gotowego rozwiązania :D

Rektyfikacja obrazu

Proszę zwrócić uwagę, że w powyższej grafice po lewej stronie znajduje się surowy obraz z kamery, a po prawej stronie znajduje się obraz po kalibracji. Jak widać, obraz po kalibracji jest wyprostowany i pozbawiony zniekształceń optycznych (widać to po zakrzywieniu na dole i górze obrazu).

Teraz będziemy dążyć do uzyskania wyprostowanego obrazu z kamery, który będzie pozbawiony zniekształceń optycznych. Aby to osiągnąć, należy wykorzystać parametry kalibracji do przekształcenia surowego obrazu z kamery. Można to zrobić za pomocą narzędzia image_proc, które jest częścią ROS 2. Należy uruchomić to narzędzie poleceniem:

ros2 run image_proc image_proc --ros-args -r image:=/camera_node_example/image_raw -r camera_info:=/camera_node_example/camera_info

W tym celu należy zmodyfikować pliki kamery, aby na topic’u /camera_info były publikowane poprawne dane kalibracji.

Flir

Proszę dodać w pliku driver_node.launch.py camerainfo_url': 'file://<path_to_calibration_file>/camera_info.yaml'

Basler

W pliku default.yaml należy podać ścieżkę do pliku kalibracji. Na przykłąd: camera_info_url: "file:///root/ros2_ws/camera_info.yaml"

Zadanie do wykonania:

  1. Skonfiguruj sterownik kamery i upewnij się, że obraz jest dobrze widoczny, dostosuj paramery jeśli potrzeba.
  2. Przeprowadź kalibrację używając camera_calibration.
  3. Wygeneruj plik .yaml, umieść go w odpowiednim folderze i skonfiguruj sterownik tak, by publikował camera_info.
  4. Uruchom image_proc i porównaj obraz surowy z wyprostowanym.
  5. Na koniec: Nagraj paczkę danych ros2 bag do wykorzystania podczas kalibracji na kolejnych zajęciach. Potrzebny jest topic /image_raw. ## Co wrzucić na eKursy?
  6. Plik .yaml z kalibracją kamery.
  7. Zrzut ekranu z wyprostowanym obrazem z kamery.