10.33 쿼터니언 스플라인과 부드러운 자세 경로 생성

10.33 쿼터니언 스플라인과 부드러운 자세 경로 생성

1. 쿼터니언 스플라인의 필요성

여러 키 쿼터니언 사이의 매끄러운 보간이 필요한 경우가 많다. 단일 SLERP는 두 쿼터니언 사이만 다루고, Squad는 C¹ 연속성을 제공한다. 더 매끄러운 (C² 이상) 자세 경로가 필요하면 쿼터니언 스플라인(quaternion spline)이 사용된다.

쿼터니언 스플라인은 여러 키 쿼터니언을 매끄럽게 연결하는 곡선이며, 로봇 궤적 생성, 애니메이션, 카메라 경로 등에 사용된다.

2. 스플라인의 기본 개념

2.1 평면 스플라인

평면에서 스플라인은 여러 점을 매끄럽게 연결하는 곡선이다. 일반적인 형태는 다음과 같다.

  • 선형 스플라인: C⁰ 연속 (점 연속)
  • 2차 스플라인: C¹ 연속 (속도 연속)
  • 3차 스플라인: C² 연속 (가속도 연속)
  • B-스플라인: 차수에 따라 C^k 연속

2.2 쿼터니언 스플라인

쿼터니언은 S^3 매니폴드 상의 점이므로, 평면 스플라인을 직접 적용할 수 없다. 매니폴드 구조를 존중하는 스플라인이 필요하다.

3. 쿼터니언 스플라인의 종류

3.1 Squad 기반 스플라인

Squad를 여러 구간에 차례로 적용한 형태이다. C¹ 연속성을 보장한다.

3.2 큐빅 에르미트 스플라인

각 구간에서 시작점, 끝점, 시작 속도, 끝 속도를 지정한 큐빅 곡선이다.

3.3 Catmull-Rom 스플라인

지역 제어가 있는 큐빅 스플라인이다. 각 제어점을 통과하며 지역 속도가 자동으로 결정된다.

3.4 B-스플라인

매끄러운 전역 곡선이지만 일반적으로 제어점을 통과하지 않는다.

3.5 지수 사상 기반 스플라인

리 대수 공간에서 스플라인을 정의한 후 지수 사상으로 리 군으로 변환한다.

4. 큐빅 에르미트 쿼터니언 스플라인

각 구간 [\mathbf{q}_i, \mathbf{q}_{i+1}]에서 큐빅 에르미트 곡선은 다음의 4개 정보로 정의된다.

  • 시작 쿼터니언: \mathbf{q}_i
  • 끝 쿼터니언: \mathbf{q}_{i+1}
  • 시작 각속도: \boldsymbol{\omega}_i
  • 끝 각속도: \boldsymbol{\omega}_{i+1}

4.1 정의

평면 큐빅 에르미트 스플라인의 기저 함수는

h_{00}(t) = 2t^3 - 3t^2 + 1

h_{10}(t) = t^3 - 2t^2 + t

h_{01}(t) = -2t^3 + 3t^2

h_{11}(t) = t^3 - t^2

쿼터니언 버전은 이들을 리 대수 공간에서 결합한다.

4.2 리 대수 기반 공식

현재 쿼터니언을 기준으로 리 대수 공간에서 보간한 후 지수 사상으로 쿼터니언 공간으로 돌아온다.

\mathbf{q}(t) = \mathbf{q}_i \otimes \exp\left(h_{10}(t)\Delta t\boldsymbol{\omega}_i + h_{01}(t)\log(\mathbf{q}_i^{-1}\mathbf{q}_{i+1}) + h_{11}(t)\Delta t\boldsymbol{\omega}_{i+1}\right)

이는 근사이며, 구체적 형태는 정의에 따라 다르다.

5. Catmull-Rom 쿼터니언 스플라인

Catmull-Rom 스플라인은 각 제어점에서 속도가 인접 제어점들로부터 자동으로 결정되는 특별한 에르미트 스플라인이다.

5.1 속도 계산

i번째 제어점에서의 속도는

\boldsymbol{\omega}_i = \frac{1}{2}(\mathbf{q}_{i+1} - \mathbf{q}_{i-1})

쿼터니언에서는 차이 대신 로그를 사용한다.

\boldsymbol{\omega}_i = \frac{1}{2}\log(\mathbf{q}_{i-1}^{-1}\mathbf{q}_{i+1})

이는 인접 제어점들 사이의 “평균 방향“을 나타낸다.

6. 지수 사상 기반 스플라인

리 대수 공간에서 일반 스플라인을 정의한 후 지수 사상으로 쿼터니언 공간으로 변환한다.

6.1 절차

  1. 각 키 쿼터니언 \mathbf{q}_i를 기준으로 리 대수 공간에서 점 \boldsymbol{\phi}_i를 정의한다.
  2. 리 대수 공간에서 큐빅 스플라인(또는 다른 스플라인)을 구성한다.
  3. 지수 사상으로 쿼터니언 공간으로 변환한다.

이 방법은 매끄러움을 보장하지만, 리 대수 좌표의 선택에 의존한다.

7. 쿼터니언 스플라인의 응용

7.1 애니메이션

3D 애니메이션에서 매끄러운 캐릭터 움직임을 생성한다. 키프레임 사이의 가속도가 연속적으로 변하여 자연스러운 운동을 만든다.

7.2 카메라 경로

가상 카메라가 여러 시점을 매끄럽게 통과하는 경로를 생성한다. 움직임의 급격한 변화를 피한다.

7.3 매니퓰레이터 궤적

매니퓰레이터의 말단 장치가 여러 자세를 거치는 작업에서 매끄러운 궤적을 생성한다. 가속도의 연속성이 모터에 가해지는 부하를 줄인다.

7.4 우주선 자세 명령

여러 단계의 자세 변경이 필요한 임무에서 매끄러운 자세 전이를 계산한다.

8. 매끄러움과 제약의 관계

8.1 제약 조건

쿼터니언 스플라인은 여러 제약을 만족해야 한다.

  • 단위 노름 유지
  • 키 쿼터니언 통과 (일반적으로)
  • 미분 연속성

이러한 제약이 스플라인의 설계를 제한한다.

8.2 절충

더 높은 미분 연속성을 추구하면 계산 복잡도가 증가한다. 응용에 맞는 균형이 중요하다.

9. 매끄러운 경로의 평가

쿼터니언 스플라인의 품질을 평가하는 지표는 다음과 같다.

9.1 경로 길이

스플라인의 총 호 길이이다. 짧은 경로가 일반적으로 선호된다.

9.2 곡률

스플라인의 곡률 변화이다. 매끄러운 경로는 곡률이 부드럽게 변한다.

9.3 각속도 변화

각속도의 최대값과 표준 편차이다. 안정한 경로는 각속도가 일정하거나 매끄럽게 변한다.

9.4 가속도 변화

각가속도의 크기이다. 작은 가속도는 매끄러운 운동을 나타낸다.

10. 시간 매개변수

스플라인을 시간과 연결하는 방법은 다음과 같다.

10.1 균일 시간

각 키 사이의 시간 간격이 일정하다. 가장 단순한 방법이다.

10.2 호 길이 매개변수

스플라인의 호 길이에 비례하여 시간을 배정한다. 일정한 속도의 운동을 생성한다.

10.3 비균일 시간

사용자가 각 구간의 시간을 지정한다. 가속/감속 효과를 만들 수 있다.

11. 경계 조건

스플라인의 시작과 끝에서 경계 조건이 필요하다.

11.1 자유 경계

끝점에서 속도나 가속도가 자유롭다. 곡선이 자연스럽게 끝난다.

11.2 고정 경계

끝점에서 특정 속도나 가속도가 강제된다. 예를 들어, 정지 상태에서 시작하여 정지 상태에서 끝나는 경로이다.

11.3 주기 경계

처음과 끝이 부드럽게 연결되어 주기적 경로를 형성한다. 순환 애니메이션에 사용된다.

12. 실시간 구현

12.1 사전 계산

스플라인의 제어점과 계수를 사전 계산하여 실행 시 빠르게 보간할 수 있다.

12.2 지역 평가

Catmull-Rom 등의 지역 스플라인은 각 구간이 주변의 몇 개 점에만 의존한다. 이는 효율적 평가를 가능하게 한다.

12.3 캐싱

자주 사용되는 t 값의 결과를 캐싱할 수 있다.

13. 쿼터니언 스플라인의 한계

13.1 계산 비용

고차 스플라인은 많은 계산을 요구한다. 실시간 시스템에서 부담이 될 수 있다.

13.2 오버슈트

스플라인이 제어점을 지나가는 과정에서 의도하지 않은 방향으로 “밀려날” 수 있다. 경로 설계가 신중해야 한다.

13.3 부호 일관성

쿼터니언의 부호 이중성이 스플라인 경계에서 문제가 될 수 있다. 일관된 부호 처리가 필요하다.

13.4 매개변수화의 선택

리 대수 좌표의 선택, 시간 매개변수의 선택 등이 결과에 영향을 준다.

14. 스플라인의 비교

스플라인 유형연속성지역성복잡도
SLERP 체인C⁰낮음
Squad 체인중간
큐빅 에르미트중간
Catmull-Rom중간
B-스플라인C² 이상부분높음

15. 구현 예시: Squad 체인

가장 일반적인 쿼터니언 스플라인은 Squad 체인이다.

function squad_spline(quaternions, t):
    n = len(quaternions) - 1
    i = int(t * n)
    s = t * n - i
    
    if i == 0:
        q_prev = quaternions[0]
    else:
        q_prev = quaternions[i - 1]
    
    q_curr = quaternions[i]
    q_next = quaternions[i + 1]
    
    if i == n - 1:
        q_nextnext = quaternions[n]
    else:
        q_nextnext = quaternions[i + 2]
    
    a = control_point(q_prev, q_curr, q_next)
    b = control_point(q_curr, q_next, q_nextnext)
    
    return squad(q_curr, a, b, q_next, s)

16. 응용에서의 실용적 고려

16.1 키 쿼터니언의 분포

키 쿼터니언이 너무 멀리 떨어져 있으면 스플라인이 큰 회전을 다루어야 하므로 오차가 커질 수 있다. 충분히 많은 키를 배치한다.

16.2 시간 매개변수의 선택

응용의 요구에 따라 균일, 호 길이, 비균일 중 선택한다. 애니메이션에는 호 길이나 비균일이, 로봇 궤적에는 균일이 일반적이다.

16.3 경계 처리

스플라인의 시작과 끝의 경계 조건을 응용에 맞게 선택한다.

16.4 검증

생성된 스플라인을 시각화하고 검증한다. 오버슈트, 급격한 변화 등의 문제를 확인한다.

17. 결론

쿼터니언 스플라인은 여러 키 자세 사이의 매끄러운 자세 경로를 생성하는 도구이다. Squad 체인, 큐빅 에르미트, Catmull-Rom 등 다양한 방법이 있으며, 응용에 따라 적절한 방법이 선택된다. 매끄러움과 계산 복잡도의 균형이 중요하며, 대부분의 실용적 응용에서 Squad 체인이 충분한 품질을 제공한다.

18. 참고 문헌

  • Shoemake, K. (1985). “Animating Rotation with Quaternion Curves.” SIGGRAPH Computer Graphics, 19(3), 245–254.
  • Park, F. C., & Ravani, B. (1997). “Smooth Invariant Interpolation of Rotations.” ACM Transactions on Graphics, 16(3), 277–295.
  • Kim, M. J., Kim, M. S., & Shin, S. Y. (1995). “A General Construction Scheme for Unit Quaternion Curves with Simple High Order Derivatives.” Proceedings of SIGGRAPH, 369–376.
  • Kuipers, J. B. (1999). Quaternions and Rotation Sequences. Princeton University Press.
  • Biagiotti, L., & Melchiorri, C. (2008). Trajectory Planning for Automatic Machines and Robots. Springer.

version: 1.0