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.
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
- Plansza kalibracyjna powinna być dobrze oświetlona, aby narzędzie mogło łatwo wykryć wzór.
- Ważne żeby ruchy planszy pokryły cały obszar widzenia kamery.
- 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:
- Skonfiguruj sterownik kamery i upewnij się, że obraz jest dobrze widoczny, dostosuj paramery jeśli potrzeba.
- Przeprowadź kalibrację używając camera_calibration.
- Wygeneruj plik .yaml, umieść go w odpowiednim folderze i skonfiguruj sterownik tak, by publikował camera_info.
- Uruchom image_proc i porównaj obraz surowy z wyprostowanym.
- Na koniec: Nagraj paczkę danych ros2 bag do wykorzystania podczas
kalibracji na kolejnych zajęciach. Potrzebny jest topic
/image_raw. ## Co wrzucić na eKursy? - Plik .yaml z kalibracją kamery.
- Zrzut ekranu z wyprostowanym obrazem z kamery.