좌표 변환의 기본 개념

좌표 변환은 로봇 시스템에서 매우 중요한 요소이다. 로봇의 센서나 액추에이터는 각각의 좌표계를 가지고 있으며, 이를 일관된 좌표계로 변환하는 것이 필수적이다. 특히 ROS2에서 TF 및 TF2는 이러한 좌표 변환을 효과적으로 관리하고 적용할 수 있는 도구를 제공한다.

좌표계의 정의

로봇 시스템에서 좌표계는 특정 지점에 대해 위치 및 방향을 설명하기 위한 기준이다. 각 좌표계는 다음과 같이 정의된다:

  1. 원점: 좌표계의 기준점이다.

  2. : 좌표계의 방향을 나타낸다 (보통 $x$, $y$, $z$ 축으로 구분).

  3. 회전: 좌표계가 특정 각도로 회전할 수 있다.

좌표계는 정적 좌표계동적 좌표계로 나눌 수 있다. 정적 좌표계는 시간에 따라 변하지 않지만, 동적 좌표계는 움직임에 따라 변화한다.

좌표 변환 수식

좌표 변환은 주로 회전과 평행이동(translation)으로 이루어진다. 한 좌표계에서 다른 좌표계로 변환하기 위해서는 다음과 같은 변환이 필요하다:

  1. 평행이동 변환: 평행이동은 좌표계의 원점을 다른 위치로 이동시키는 변환이다. 이를 수식으로 표현하면 다음과 같다:

p=p+t\mathbf{p}' = \mathbf{p} + \mathbf{t}

여기서:

  • $\mathbf{p}$는 원래 좌표계에서의 위치 벡터이다.

  • $\mathbf{t}$는 평행이동 벡터이다.

  • $\mathbf{p}'$는 변환된 좌표계에서의 위치 벡터이다.

  1. 회전 변환: 회전 변환은 좌표계를 일정한 각도만큼 회전시키는 변환이다. 회전 행렬 $\mathbf{R}$을 이용하여 다음과 같이 표현할 수 있다:

p=Rp\mathbf{p}' = \mathbf{R} \mathbf{p}

여기서:

  • $\mathbf{R}$은 3x3 회전 행렬이다.

  • $\mathbf{p}$는 원래 좌표계에서의 위치 벡터이다.

  • $\mathbf{p}'$는 변환된 좌표계에서의 위치 벡터이다.

  1. 복합 변환: 실제로는 평행이동과 회전이 함께 적용되는 경우가 많다. 이를 **동차 변환(homogeneous transformation)**이라고 부른다. 다음과 같은 방식으로 표현된다:

T=[Rt01]\mathbf{T} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \\ 0 & 1 \end{bmatrix}

좌표 변환은 $\mathbf{T}$를 이용하여 다음과 같이 표현된다:

p=Tp\mathbf{p}' = \mathbf{T} \mathbf{p}

여기서 $\mathbf{p}$는 4x1 동차 좌표(homogeneous coordinates)로 표현된다.

p=[xyz1]\mathbf{p} = \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}

동차 좌표는 3D 공간에서 위치뿐만 아니라 변환을 간단하게 계산할 수 있도록 해준다.

회전 행렬의 정의

회전 행렬은 3D 공간에서의 회전을 표현하는 수학적 방법이다. 주로 세 가지 축을 기준으로 한 회전으로 나눌 수 있다:

  • x축 회전: 각도 $\theta$만큼의 x축 회전은 다음과 같은 회전 행렬을 갖는다.

Rx(θ)=[1000cosθsinθ0sinθcosθ]\mathbf{R}_x(\theta) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{bmatrix}
  • y축 회전: 각도 $\theta$만큼의 y축 회전은 다음과 같은 회전 행렬을 갖는다.

Ry(θ)=[cosθ0sinθ010sinθ0cosθ]\mathbf{R}_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix}
  • z축 회전: 각도 $\theta$만큼의 z축 회전은 다음과 같은 회전 행렬을 갖는다.

Rz(θ)=[cosθsinθ0sinθcosθ0001]\mathbf{R}_z(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}

세 가지 회전이 함께 사용될 수 있으며, 이를 합성 회전이라고 한다.

합성 회전

3D 공간에서의 회전은 세 축을 기준으로 한 회전의 조합으로 이루어진다. 이를 합성 회전이라고 부른다. 예를 들어, 먼저 $z$축을 기준으로 회전한 후, $y$축을 기준으로 회전하고 마지막으로 $x$축을 기준으로 회전한다고 하면, 전체 회전 행렬 $\mathbf{R}$는 다음과 같이 합성된다:

R=Rx(θx)Ry(θy)Rz(θz)\mathbf{R} = \mathbf{R}_x(\theta_x) \mathbf{R}_y(\theta_y) \mathbf{R}_z(\theta_z)

여기서:

  • $\mathbf{R}_x(\theta_x)$는 $x$축 회전 행렬,

  • $\mathbf{R}_y(\theta_y)$는 $y$축 회전 행렬,

  • $\mathbf{R}_z(\theta_z)$는 $z$축 회전 행렬이다.

이러한 합성 회전은 순서에 따라 결과가 달라지기 때문에, 회전의 순서가 중요하다. 로봇 공학에서는 종종 ZYX 오일러 각이나 XYZ 회전 순서를 사용하여 합성 회전을 정의한다.

오일러 각

회전을 표현하는 방법 중 하나로 오일러 각(Euler Angles)이 있다. 이는 세 축을 기준으로 차례대로 회전시키는 방식으로, 다음과 같은 세 가지 각도로 표현된다:

  1. $\alpha$: $z$축을 기준으로 회전한 각도

  2. $\beta$: $y$축을 기준으로 회전한 각도

  3. $\gamma$: $x$축을 기준으로 회전한 각도

이때, 회전 순서는 ZYX 회전으로 먼저 $z$축을 기준으로 회전한 후, $y$축, 그리고 $x$축을 기준으로 회전하는 방식이다. 이를 수식으로 표현하면 다음과 같다:

REuler=Rx(γ)Ry(β)Rz(α)\mathbf{R}_{\text{Euler}} = \mathbf{R}_x(\gamma) \mathbf{R}_y(\beta) \mathbf{R}_z(\alpha)

오일러 각의 사용은 직관적이지만, 특정 각도에서 깁싱 문제(gimbal lock)가 발생할 수 있다. 이는 두 개의 회전 축이 정렬되면서 회전 자유도가 하나 감소하는 현상이다. 이를 극복하기 위해 쿼터니언 방식이 사용된다.

쿼터니언

쿼터니언(Quaternion)은 3D 회전을 나타내는 또 다른 방법으로, 회전 축과 회전 각도를 이용하여 정의된다. 4차원 벡터로 표현되며, 다음과 같은 형식을 갖는다:

q=w+xi+yj+zk\mathbf{q} = w + xi + yj + zk

여기서:

  • $w$는 스칼라 부분 (회전의 크기),

  • $x, y, z$는 회전 축을 나타내는 벡터 성분이다.

쿼터니언은 복잡한 회전을 계산하는데 매우 효율적이며, 오일러 각에서 발생하는 깁싱 문제를 해결할 수 있다. 쿼터니언을 이용한 좌표 변환은 다음과 같이 정의된다:

p=qpq1\mathbf{p}' = \mathbf{q} \mathbf{p} \mathbf{q}^{-1}

여기서:

  • $\mathbf{p}$는 원래 좌표계에서의 위치 벡터,

  • $\mathbf{q}$는 쿼터니언,

  • $\mathbf{q}^{-1}$은 쿼터니언의 역원이다.

쿼터니언은 각도와 회전 축을 모두 포함하고 있어, 회전 행렬보다 계산이 간결하고, 누적된 회전의 정밀도도 유지할 수 있다.

동차 좌표계 (Homogeneous Coordinates)

동차 좌표계를 사용하면 회전과 평행이동을 하나의 변환 행렬로 통합하여 다룰 수 있다. 이를 위해 3차원 좌표를 4차원 동차 좌표로 확장한다. 동차 좌표에서의 변환은 다음과 같은 행렬로 표현된다:

T=[Rt01]\mathbf{T} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \\ 0 & 1 \end{bmatrix}

여기서:

  • $\mathbf{R}$은 회전 행렬 (3x3),

  • $\mathbf{t}$는 평행이동 벡터 (3x1),

  • $\mathbf{T}$는 동차 변환 행렬이다.

이때, 변환된 좌표 $\mathbf{p}'$는 다음과 같이 계산된다:

p=Tp\mathbf{p}' = \mathbf{T} \mathbf{p}

동차 좌표계를 사용하면 회전과 평행이동을 동시에 처리할 수 있어 로봇 시스템에서 매우 유용하다.

Last updated