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.
- Uruchomcie narzędzie
ros2_calib - Wybierzcie LiDAR-to-LiDAR oraz załadujcie dane.
- Lidary są odwrócone względem siebie o 180 stopni, w initial guess proszę skorzystać z tej wskazówki.
- Proszę manualnie ustawić dwie chmury punktów względem siebie.
Co na eKursy?
- Screen z ros2_calib z LiDAR-Camera.
- Wizualizacja w RViz2/Foxglove dla LiDAR-Camera
- Screen z ros2_calib dla LiDAR-LiDAR
- Wizualizacja w RViz2/Foxglove dla LiDAR-LiDAR