Lab12-Kamera-LiDAR

Nowoczesne Sensory w Robotyce

Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej

Laboratorium 12: Kalibracja Kamer i LiDAR

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 zrozumienie i praktyczne przeprowadzenie kalibracji zewnętrznej (extrinsic calibration) sensorów stosowanych w robotyce. Wykorzystamy narzędzie ros2_calib do manualnego wyznaczenia macierzy transformacji pomiędzy dwoma Lidarami (fuzja 3D-3D) oraz między Lidarem a kamerą (fuzja 3D-2D), a następnie wyeksportujemy wyniki kalibracji i zweryfikujemy je.

Wstęp

Kalibracja zewnętrzna (Extrinsic Calibration) to proces wyznaczania relacji przestrzennej (rotacji i translacji) pomiędzy układami współrzędnych różnych sensorów zamontowanych na robocie. W ROS2 te relacje są reprezentowane jako drzewo transformacji (TF Tree). > Podczas gdy kalibracja wewnętrzna (Intrinsic) kamery określa parametry jej soczewki (ogniskowa, dystorsja), kalibracja zewnętrzna pozwala odpowiedzieć na pytanie: “Gdzie dokładnie znajduje się kamera względem Lidara?”.

Na dzisiejszych zajęciach wykorzystamy pakiet ros2_calib. Jest to interaktywne, graficzne narzędzie działające w trybie offline (na nagraniach typu rosbag w formacie .mcap), które pozwala na precyzyjne dopasowanie danych z sensorów i eksport wyników bez konieczności używania specjalistycznych tarcz kalibracyjnych.

Istnieją też inne narzędzia, takie jak CalibrationTools rozwijane przez firmę Tier IV, które oferują podobną funkcjonalność, ale są bardziej złożone i wymagają większej ilości danych do przeprowadzenia kalibracji. Jest ono rozwijane przez osobę, która pracowała na naszym wydziele.

Z innych narzędzi do kalibracji można wymienić juz Wam znany Kalibr

Istnieją całe zestawienia narzędzi do kalibracji, np. Awesome-LiDAR-Camera-Calibration

Przygotowanie środowiska

Skorzystamy z wirtualnego środowiska, które zostało opisane w dokumentacji narzędzia. Paczkę można zainstalować z pip install lub z src.

pip install ros2-calib

Uruchamiamy ją następującą komendą:

ros2_calib

Jeżeli będą problemy z instalacją (np. przez inną wersję systemu operacyjnego), proszę skorzystać z Dockera.

Kalibracja LiDAR - Camera

Użyjemy nagranych wcześniej danych do pobrania tutaj.

Zawartość udostępnionego pliku wygląda następująco.

Files:             cam3_lidar_0.mcap
Bag size:          386.3 MiB
Storage id:        mcap
ROS Distro:        jazzy
Duration:          2.731895452s
Start:             Apr 24 2026 08:29:55.261625512 (1777019395.261625512)
End:               Apr 24 2026 08:29:57.993520964 (1777019397.993520964)
Messages:          77
Topic information: Topic: /events/read_split | Type: rosbag2_interfaces/msg/ReadSplitEvent | Count: 0 | Serialization Format: cdr
                   Topic: /events/write_split | Type: rosbag2_interfaces/msg/WriteSplitEvent | Count: 0 | Serialization Format: cdr
                   Topic: /lidar_points | Type: sensor_msgs/msg/PointCloud2 | Count: 22 | Serialization Format: cdr
                   Topic: /parameter_events | Type: rcl_interfaces/msg/ParameterEvent | Count: 0 | Serialization Format: cdr
                   Topic: /rosout | Type: rcl_interfaces/msg/Log | Count: 15 | Serialization Format: cdr
                   Topic: /sensing/camera/camera3/camera_info | Type: sensor_msgs/msg/CameraInfo | Count: 21 | Serialization Format: cdr
                   Topic: /sensing/camera/camera3/image_raw | Type: sensor_msgs/msg/Image | Count: 17 | Serialization Format: cdr
                   Topic: /tf_static | Type: tf2_msgs/msg/TFMessage | Count: 2 | Serialization Format: cdr
Service:           0
Service information: 

Do samej kalibracji będziemy potrzebować 1. Punktów z LiDARa 2. Danych z kamery 3. Informacji z kalibracji wewnętrznej kamery 4. Initial Guess TF (Na oko zmierzone, że kamera w tym przypadku jest 20cm pod LiDARem)

Tak wygląda interaktywne narzędzie do kalibracji. Ustawianie tego ręcznie jest trudne ze względu na 6 osi swobody układu. Dlatego najlepiej jest ręcznie wskazać elementy wspólne. W tym celu można sobie pomóc tak ustawiajac scene, żeby takie się znalazły.

Proszę zwrócić uwagę na camera_optical_link który jest w układzie współrzędnych kamery.

Obraz już po kalibracji. Zostanie zwrócona macierz TF między hesai_lidar → camera3/camera_link → camera3/camera_optical_link.

Teraz byśmy chcieli to wyświetlić w RViz/Foxglove.

Najpierw musimy uruchomić bag’a z zmienioną nazwą tf_static ros2 bag play cam3_lidar/ -l --remap /tf_static:=/tf_static_obsolete

Dalej chcemy opublikować ręcznie tf między hesai_lidar → camera3/camera_link z przesunięciami.

ros2 run tf2_ros static_transform_publisher --x <value> --y <value> --z <value> --yaw 0 --pitch 0 --roll 0 --frame-id hesai_lidar --child-frame-id camera3/camera_link 

Oraz camera3/camera_link → camera3/camera_optical_link

ros2 run tf2_ros static_transform_publisher --x 0 --y 0 --z 0 --roll <value> --pitch <value> --yaw <value> --frame-id camera3/camera_link --child-frame-id camera3/camera_optical_link

Aby finalnie wyświetlić wszystkie dane. Zwróćcie uwagę na TF oraz rodzaje wyświetlanych Topic’ów.

Zadanie Dodatkowe

Tutaj znajdują się dane z kamery która jest zamocowania w innej relacji do LiDARu oraz brak TF pomocniczych.

Kalibracja LiDAR - LiDAR

Następnym etapem jest zestrojenie ze sobą dwóch Lidarów, tak aby ich chmury punktów pokrywały się w przestrzeni, tworząc spójny model otoczenia robota.

Dane można pobrać tutaj

  1. Uruchomcie narzędzie ros2_calib
  2. Wybierzcie LiDAR-to-LiDAR oraz załadujcie dane.
  3. Lidary są odwrócone względem siebie o 180 stopni, w initial guess proszę skorzystać z tej wskazówki.
  4. Proszę manualnie ustawić dwie chmury punktów względem siebie.

Co na eKursy?

  1. Screen z ros2_calib z LiDAR-Camera.
  2. Wizualizacja w RViz2/Foxglove dla LiDAR-Camera
  3. Screen z ros2_calib dla LiDAR-LiDAR
  4. Wizualizacja w RViz2/Foxglove dla LiDAR-LiDAR