Coordinate Representation

상솜공방·2025년 4월 30일

Visual SLAM

목록 보기
9/10

Coordinate Representation

좌표 표현(Coordinate Representation)이란 회전(Rotation)이동(Translation)을 결합하여 물체의 자세(Pose)를 표현하는 것입니다.

1. Coordinate Representation = Rotation + Translation

  • Transformation Matrix TT는 보통 다음과 같이 구성됩니다:

    T=[R  t]T = [R\ |\ t]

    여기서 RR은 회전 행렬, tt는 평행이동 벡터입니다.

  • TT는 물체의 상태(state)를 표현하는 데 사용되며, 전체적인 구조는 Special Euclidean Group에 속합니다.

    • 이 그룹은 SE(n)이라 불리며, 회전과 평행이동을 함께 표현할 수 있는 군(group) 구조입니다.
    • 2차원 이동이라면 SE(2), 3차원 이동이라면 SE(3)으로 표현합니다.

2. 2차원 공간에서의 3 자유도 상태 표현 (SE(2))

(1) SE(2)의 3×3 행렬:

  • SE(2)는 2D 공간에서의 회전과 이동을 표현하는 3×3 행렬 그룹입니다.
Tvc=[cosθsinθΔxsinθcosθΔy001]T_{vc} = \begin{bmatrix} \cos \theta & -\sin \theta & \Delta x \\ \sin \theta & \cos \theta & \Delta y \\ 0 & 0 & 1 \end{bmatrix}

(2) 3 DOF Vector Form:

  • 이때 상태 벡터는 X=[Δx,Δy,θ]X = [\Delta x, \Delta y, \theta]로 표현됩니다.
    • θ\theta: 이동 평면에서의 방향 (heading)

3. 3차원 공간에서의 6 자유도 상태 표현 (SE(3))

(1) SE(3)의 4×4 행렬:

  • 그림은 로봇의 본체 프레임과 기준 프레임 간의 위치 관계를 이 TT 행렬로 표현하는 예시.
  • 예를 들어 TvcT_{vc}는 카메라 좌표계에서 로봇 본체 좌표계로의 변환을 나타냄.
  • 상태는 x,y,z,r,p,hx, y, z, r, p, h (roll, pitch, yaw)로 표현됩니다.
    • 앞의 x,y,zx, y, z는 위치
    • 뒤의 r,p,hr, p, h는 회전 (오일러 각으로 표현된 자세)

(2) 6 DOF Vector Form:

(3) 비교

  • SE(3)의 4×4 변환 행렬 TvcT_{vc}는 다음과 같은 4×4 SE(3) 형태로 표현됩니다.
Tvc=[ΔxRΔyΔz0001]T_{vc} = \begin{bmatrix} & & & \Delta x \\ & R & & \Delta y \\ & & & \Delta z \\ 0 & 0 & 0 & 1 \end{bmatrix}
  • 6 DOF Vector Form은 위치 오프셋 Δx,Δy,Δz\Delta x, \Delta y, \Delta z와 회전이 90도씩 있을 때 상태를 다음과 같이 표현합니다.
    Xvc=[Δx,Δy,Δz,90,0,90]X_{vc} = [\Delta x, \Delta y, \Delta z, 90^\circ, 0, 90^\circ]

3. 두가지 상태 표현의 선호도

(1) 매니퓰레이터(Manipulators)

  • 변환 행렬 T=[Rt01]SE(3)T = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \in SE(3)를 선호

  • 여러 관절(θ₁, θ₂, ...)의 조합을 통해 말단 위치를 계산하는 순방향 운동학(forward kinematics)을 수행하기 위해, 행렬 형태가 더 계산적으로 효율적

  • 각 관절 회전을 행렬 곱으로 표현하기 때문에 상태를 행렬 형태로 유지하는 것이 자연스러움

(2) 모바일 로봇(Mobile Robots)

  • 상태 벡터 X=[x,y,z,r,p,h]X = [x, y, z, r, p, h] 형식을 더 많이 사용

  • 로봇의 위치와 자세를 직접적으로 추적하기 위해서 벡터 형태가 직관적이고 유용

  • 예: SLAM에서 상태 벡터를 확장 칼만 필터나 그래프 형태로 추적

4. 축 변환의 관계

세 프레임 {a},{b},{c}\{a\}, \{b\}, \{c\} 사이의 관계를 SE(3) 행렬 곱으로 계산하는 과정을 보여줍니다.

1. 회전 관계:

Rac=RabRbcR_{ac} = R_{ab} R_{bc}

즉, abca \to b \to c의 회전은 각각의 회전을 곱한 결과입니다.

2. 위치 관계:

변수 이해

  • 벡터 vv는 프레임 {b} 기준에서 {c}의 위치를 나타내는 벡터입니다. 이 벡터를 vbv_b라고 부릅니다.
  • 하지만 우리는 이 벡터를 프레임 {a} 기준에서 표현하고 싶습니다. 이걸 vav_a라고 부릅니다.
  • {b}는 {a}에 대해 회전한 좌표계이기 때문에, {b}에서 본 벡터 vbv_b를 단순히 더할 수는 없고, 회전을 먼저 적용해야 합니다.

va=Rabvbv_a = R_{ab} v_b인가?

  • RabR_{ab}는 프레임 {b} 기준 벡터를 프레임 {a} 기준으로 변환해주는 회전 행렬입니다.

  • 따라서 프레임 {b} 기준의 벡터 vbv_b를 프레임 {a}에서 표현하려면:

    va=Rabvbv_a = R_{ab} v_b
  • 즉, 좌표 변환의 기본 원칙:
    벡터가 표현된 좌표계에서 목표 좌표계로 바꾸려면 회전 행렬을 곱한다.

비유적 예

  • 예를 들어 {b} 프레임이 {a} 프레임에 대해 90도 회전했다면,
    {b} 기준에서 오른쪽 방향 벡터는 {a} 기준에서는 위쪽이 된다.
    이 변화는 RabR_{ab}에 의해 이루어진다.

전체 변환 관계

이 회전이 포함되기 때문에 전체 위치 관계는 다음처럼 이어집니다:

wa=ua+va=ua+Rabvbw_a = u_a + v_a = u_a + R_{ab} v_b
  • 여기서:
    • uau_a: 프레임 {a} 기준에서 프레임 {b}의 위치
    • vbv_b: 프레임 {b} 기준에서 프레임 {c}의 위치
    • waw_a: 프레임 {a} 기준에서 프레임 {c}의 위치

3. 정리:

벡터 vv가 프레임 {b}에서 표현된 것이므로, 이를 프레임 {a}로 바꾸려면 회전 변환이 필요합니다.
그래서 va=Rabvbv_a = R_{ab} v_b가 되는 것입니다.

SE(3) 행렬 곱 표현:
전체적인 변환은 다음과 같은 SE(3) 행렬 곱으로 표현됩니다:

[Racwa01]=[Rabua01][Rbcvb01]\begin{bmatrix} R_{ac} & w_a \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} R_{ab} & u_a \\ 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} R_{bc} & v_b \\ 0 & 1 \end{bmatrix}

이 식은 "프레임 a에서 프레임 c까지의 변환"은 "a→b 변환"과 "b→c 변환"을 차례로 곱해주면 된다는 것을 의미합니다.

5. 축 변환의 예시

핵심 개념: 좌표계가 바뀌면 벡터의 성분값도 달라진다

왼쪽 수식 설명

  • 벡터 v\mathbf{v}는 두 좌표계 {a}, {b} 기준으로 각각 다음처럼 표현됩니다:

    v=va1e1+va2e2+va3e3=vb1f1+vb2f2+vb3f3\mathbf{v} = v_{a1}\mathbf{e}_1 + v_{a2}\mathbf{e}_2 + v_{a3}\mathbf{e}_3 = v_{b1}\mathbf{f}_1 + v_{b2}\mathbf{f}_2 + v_{b3}\mathbf{f}_3

    여기서:

    • ei\mathbf{e}_i: 좌표계 {a}의 기저 벡터
    • fi\mathbf{f}_i: 좌표계 {b}의 기저 벡터
    • va=(va1,va2,va3)\mathbf{v}_a = (v_{a1}, v_{a2}, v_{a3}): {a} 기준 성분
    • vb=(vb1,vb2,vb3)\mathbf{v}_b = (v_{b1}, v_{b2}, v_{b3}): {b} 기준 성분
  • 같은 벡터라도 좌표계가 바뀌면 벡터의 성분값이 달라집니다. 실제 방향은 변하지 않습니다.

변환 행렬 사용

  • 벡터 성분을 {a} 기준에서 {b} 기준으로 바꾸는 회전 행렬이 RbaR_{ba}입니다.

  • 그러면 다음 관계가 성립합니다:

    vb=Rbava또는va=Rabvb\mathbf{v}_b = R_{ba} \mathbf{v}_a \quad \text{또는} \quad \mathbf{v}_a = R_{ab} \mathbf{v}_b

    Rab=Rba1=RbaTR_{ab} = R_{ba}^{-1} = R_{ba}^T, 즉 역행렬은 전치 행렬

행렬로 표현된 기저 변환

  • 아래 수식은 전체 기저 벡터 묶음으로 표현한 것입니다:

    [e1 e2 e3]=[f1 f2 f3]Rba[\mathbf{e}_1\ \mathbf{e}_2\ \mathbf{e}_3] = [\mathbf{f}_1\ \mathbf{f}_2\ \mathbf{f}_3] R_{ba}
  • 즉, 각 기저벡터 ei\mathbf{e}_ifi\mathbf{f}_i들을 회전시켜 얻을 수 있다는 의미입니다.

유도 과정

  • v\mathbf{v}는 공간상 고정된 벡터이며, 두 좌표계에서 기저 벡터와 좌표 성분으로 표현할 수 있습니다.
    v=[e1 e2 e3]va=[f1 f2 f3]vb\mathbf{v} = [\mathbf{e}_1\ \mathbf{e}_2\ \mathbf{e}_3] \mathbf{v}_a = [\mathbf{f}_1\ \mathbf{f}_2\ \mathbf{f}_3] \mathbf{v}_b
  • 두 성분 벡터 사이에는 회전 관계가 있습니다:
    vb=Rbavava=Rba1vb=Rabvb\mathbf{v}_b = R_{ba} \mathbf{v}_a \Rightarrow \mathbf{v}_a = R_{ba}^{-1} \mathbf{v}_b = R_{ab} \mathbf{v}_b
  1. 위 두 표현을 같은 v\mathbf{v}에 대해 등식으로 둡니다:

    [e1 e2 e3]va=[f1 f2 f3]vb[\mathbf{e}_1\ \mathbf{e}_2\ \mathbf{e}_3] \mathbf{v}_a = [\mathbf{f}_1\ \mathbf{f}_2\ \mathbf{f}_3] \mathbf{v}_b
  2. 이제 vb=Rbava\mathbf{v}_b = R_{ba} \mathbf{v}_a를 대입:

    [e1 e2 e3]va=[f1 f2 f3]Rbava[\mathbf{e}_1\ \mathbf{e}_2\ \mathbf{e}_3] \mathbf{v}_a = [\mathbf{f}_1\ \mathbf{f}_2\ \mathbf{f}_3] R_{ba} \mathbf{v}_a
  3. 좌변과 우변 모두 va\mathbf{v}_a에 대해 선형 연산이므로, 행렬이 같아야 합니다:

    [e1 e2 e3]=[f1 f2 f3]Rba[\mathbf{e}_1\ \mathbf{e}_2\ \mathbf{e}_3] = [\mathbf{f}_1\ \mathbf{f}_2\ \mathbf{f}_3] R_{ba}

의미

  • 이 결과는 좌표계 a의 기저 벡터들을 좌표계 b의 기저 벡터들로 표현하는 관계입니다.
  • 다시 말해, {a}의 기저 벡터들을 {b}의 기저 벡터들을 회전시켜 얻을 수 있다는 뜻입니다.

오른쪽 그림 설명

  • 로봇 본체 {v}와 카메라 좌표계 {c}가 주어졌고,
  • 카메라 기준 방향 벡터 zcz_c를 로봇 본체 좌표계에서 표현한 것이 zvz_v입니다.
  • 관계식:
    zv=Rvczcz_v = R_{vc} z_c
    이는 카메라에서의 방향을 본체 좌표계로 변환한 것입니다.

핵심 요약

용어설명
va\mathbf{v}_a, vb\mathbf{v}_b동일한 벡터의 다른 좌표계에서의 성분 표현
RbaR_{ba}좌표계 {a}에서 {b}로의 회전 변환 행렬
목적기준 좌표계 변경에 따른 벡터 표현 변환

좋습니다. 이 두 슬라이드는 "Change of Basis", 즉 좌표계 변경(root shifting)의 실제 적용을 보여줍니다. 특히 포인트 클라우드 데이터를 글로벌 좌표계 {G}에서 로컬 좌표계 {v}로 변환하는 과정을 다루고 있습니다.

그림 설명

  • 파란 점들은 포인트 클라우드로, {G} 좌표계에서 측정된 3D 점들입니다.
  • 우리는 이 점들을 {v} 좌표계로 옮기고 싶습니다. 즉, 기준을 global에서 local로 바꾸는 것입니다.
  • 위에서 유도했던 아래 두 식을 적용합시다.
[Racwa01]=[Rabua01][Rbcvb01]\begin{bmatrix} R_{ac} & w_a \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} R_{ab} & u_a \\ 0 & 1 \end{bmatrix} \begin{bmatrix} R_{bc} & v_b \\ 0 & 1 \end{bmatrix}
wa=ua+Rabvbw_a = u_a + R_{ab} v_b

위 식을 이해하면, PgP_g와 관련된 정보로 PvP_v를 표현하는 아래 수식도 유추할 수 있습니다.

Pv=tvg+RvgPgP_v = t_{vg} + R_{vg} P_g
  • 그러나 tvgt_{vg}RvgR_{vg}는 {g}에서 측정한 값이 아니므로 우리가 알 수 없습니다.
  • 따라서 이들을 각각 tgvt_{gv}RgvR_{gv}에 관련된 식으로 바꾸어야 합니다.
  • 그리고 이 관계가 최종적으로 반영된 수식은 아래와 같습니다.

Global 기준 포인트를 Local 기준으로 역변환 하기

  • PvP_v: 로컬 기준에서 포인트의 상대적 위치
  • PgP_g: 글로벌 기준에서 포인트의 상대적 위치
  • RgvR_{gv}: 글로벌 기준에서의 로컬 좌표계 {v}의 상대적 회전 각도
  • tgvt_{gv}: 글로벌 기준에서의 로컬 좌표계 {v}의 상대적 위치

이므로 좌표계 {g}에서 {v}로 가는 변환 행렬을 다음과 같이 정의합시다:

Tgv=[Rgvtgv01]T_{gv} = \begin{bmatrix} R_{gv} & t_{gv} \\ 0 & 1 \end{bmatrix}

이제 이 변환의 역행렬은 좌표계 {v}에서 {g}로 가는 변환입니다:

Tvg=[Rvgtvg01]T_{vg} = \begin{bmatrix} R_{vg} & t_{vg} \\ 0 & 1 \end{bmatrix}

이 때 SE(3) 행렬의 역행렬이 아래와 같으므로:

T=[Rt01]T1=[RRt01]T = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \quad \Rightarrow \quad T^{-1} = \begin{bmatrix} R^\top & -R^\top t \\ 0 & 1 \end{bmatrix}

해당 수식을 유도할 수 있습니다:

Tvg=[Rvgtvg01]=Tgv1=[RgvRgvtgv01]T_{vg} = \begin{bmatrix} R_{vg} & t_{vg} \\ 0 & 1 \end{bmatrix} = T_{gv}^{-1} = \begin{bmatrix} R_{gv}^\top & -R_{gv}^\top t_{gv} \\ 0 & 1 \end{bmatrix}

여기서 해당 행렬의 대응 요소들의 의미를 짚고 넘어가자면,

  • Rvg=RgvR_{vg} = R_{gv}^\top: RR은 회전 행렬이므로 R1=RR^{-1} = R^\top이 자명

  • tvg=Rgvtgvt_{vg} = -R_{gv}^\top t_{gv}: 위치 tt는 회전된 좌표계를 기준으로 다시 기준점으로 돌려야 하므로, 단순히 부호를 바꾸는 게 아니라 다시 역회전한 후 뒤로 이동해야 합니다. 그래서 단순히 t-t가 아니라 Rt-R^\top t입니다.

따라서 이 두 연관관계를 이전 과정에서 얻은 수식에 대입하여 최종 식을 유도할 수 있습니다:

Pv=tvg+RvgPg,P_v = t_{vg} + R_{vg} P_g,
Pv=Rgvtgv+RgvPg=Rgv(Pgtgv)P_v = -R_{gv}^\top t_{gv} + R_{gv}^\top P_g = R_{gv}^\top (P_g - t_{gv})
profile
상어 인형을 좋아하는 사람

0개의 댓글