이번 글에서는 Camera Transformation 개념에 대해서 간단히 언급하겠습니다.
우선 Camera Transformation 은
카메라에 보인 물체를 실제 좌표계의 위치로 옮기는 작업입니다.
카메라 상에서 물체의 x, y pixel 좌표와 Depth 를 이용하여
물체의 Camera coordinate를 얻고,
Camera의 x, y, z 좌표와 w, x, y, z 쿼터니언을 이용해
Camera Transformation Matrix를 획득해
Camera Coordinate를 Real World Coordinate로 변환하게 됩니다.
잠시 넘어가기 전에 쿼터니언에 대해서 간단하게만 설명하겠습니다.
쿼터니언은 굉장히 비직관적인 개념입니다.
대부분의 회전은 Roll Pitch Yaw라고 하는 방식으로 설명이 되는데요,
이러한 Euler 의 RPY 방식은 특정 축의 회전에 의해 하나의 축의 자유도가 소실되는
짐벌락 문제가 발생합니다.
예를 들어 아래 비행기의 회전을 생각해 보았을 때,
만약 비행기가 Pitch 방향으로 90도의 회전이 발생하면,
Roll 과 Yaw의 회전을 구분할 수 없는 현상이 발생합니다.
그리하여, 절대적으로 물체의 회전을 표현하기 위한 개념이 필요했는데요,
이를 위해 등장한 것이 쿼터니언입니다.
쿼터니언은 하나의 실수축과 3개의 허수축을 가지는 4차원 벡터입니다.
w 는 회전 각에 대한 scalar 값을 의미하며,
x, y, z는 각 회전 축에 대해 어느 정도의 회전이 이루어졌는지를 나타냅니다.
정규화된 쿼터니언은 항상 크기가 1 인 특징을 지닙니다.
RPY는 다음과 같은 방식으로 쿼터니언으로 변환이 될 수 있습니다.
그럼 다시 돌아가서 이렇게 얻은 쿼터니언을 이용해서
어떻게 Image로부터 real world 좌표를 얻는지 그 과정을 정리하도록 하겠습니다.
Camera Intrinsic Matrix
먼저 카메라의 특성을 결정하는 Camera Intrinsic Matrix는 다음과 같이 정의됩니다.
해당 값을 얻는 방법과 설명은 아래 글을 참조하시기 바랍니다.
Camera Coordinate
Depth Camera 이미지로부터 물체의 pixel x좌표 x_p , pixel y좌표 y_p , Depth Z를 얻었을 때
Camera Coordinate X_c, Y_c, Z_c는 다음과 같이 획득이 가능합니다.
Camera Transformation Matrix
카메라 coordinate를 real world coordinate로 바꾸기 위한 Camera Transformation Matrix는
카메라의 현재 위치의 x, y, z 좌표 (T_x, T_y, T_z)와
쿼터니언 w, x, y, z를 이용하여 다음과 같이 정의됩니다.
이제 이를 이용하여 real world coordinate X_w, Y_w, Z_w를 얻는 방식은 다음과 같습니다.
결론적으로 image 에 대하여 어떤 물체의 x, y pixel 좌표와 Depth,
카메라의 x, y, z 좌표와 쿼터니언, Camera Intrinsic Matrix를 알고 있으면,
해당 물체의 Real world coordinate를 계산할 수 있습니다.
실제로 아래 글들의 작업에서
vision을 이용한 로봇팔에서 이를 구현하기 위해
하나씩 해당 Input들을 얻는 과정을 쌓아왔습니다.
그럼 다음 글에선 실제로 ROS2에서 Real World Coordinate를 얻도록 cpp 코드를 작성하고
UR3e가 해당 인식 위치로 이동하여 Pick and Place task를 수행하는 글을 작성하겠습니다.
'Machine Learning > Computer Vision' 카테고리의 다른 글
Intel RealSense 를 활용한 YOLOv8 RealTime Object Segmentation (0) | 2024.01.29 |
---|---|
YOLOv8 으로 RealTime Object Segmentation 수행하기 (3) | 2024.01.29 |
BundleSDF (3D Pose Estimation & Reconstruction) Example 수행 (7) | 2024.01.24 |
[논문 리뷰] BundleSDF: Neural 6-DoF Tracking and 3D Reconstruction of Unknown Objects (1) | 2024.01.24 |
Python3 에서 Intel RealSense Camera Intrinsic Matrix 얻기 (0) | 2024.01.22 |