코딩 및 기타
Rotations, Orientation, and Quaternions
정지홍
2025. 5. 6. 10:17
Rotations, Orientation, and Quaternions - MATLAB & Simulink
Rotations, Orientation, and Quaternions - MATLAB & Simulink
This example reviews concepts in three-dimensional rotations and how quaternions are used to describe orientation and rotations.
kr.mathworks.com
Rotations, Orientation, and Quaternions
- 해당 예제에서는 3차원 회전 개념과 방향 및 회전을 설망하는데 사용하는 quaternions에 대해서 설명한다.
- dr = HelperDrawRotation과 같이 선언하는 HelperDrawRotation클래스는 예제에서 시각화를 위해서 사용된다.
dr = HelperDrawRotation();
Rotations in Three Dimensions
- 3차원 공간에서의 모든 회전( rotation )은 회전 축( axis of Rotation )와 그 축을 중심으로 한 회전 각도( angle of rotation)로 정의할 수 있습니다.
- 아래 왼쪽은 주전자가 있습니다. 2번째 그림은 z축을 중심으로 45도 회전 시킨 모습이니다. 3번째는 [ 1 0 1 ]축을 중심으로 15도 회전한 예시입니다.
- Quaternion은 회전 축과 각도를 하나의 객체로 캡슐화하고, 이를 조작하는 연산을 제공합니다.
- Quatertnion클래스와 아래 예제에서는 오른손 법칙을 따라서 회전을 정의합니다.
- 즉, 원점에서 바라볼 때 회전 축 주위를 시계방향으로 도는 것이 양의 회전으로 간주합니다.

dr = HelperDrawRotation();
dr.drawTeapotRotations();
Point Rotation( 점 회전 )
- 주전자의 꼭짓점들은 기준 좌표계(reference frame )에서 회전 축을 중심으로 회전합니다。
- 아래는 점 ( 0.7 , 0.5 , 0 )를 z축을 중심으로 30도 회전시킨 경우 입니다.

Frame Rotation( 좌표계 회전 )
- 좌표계 회전은 점 회전의 ‘반대’라고 할 수 있습니다.
- 이 경우 물체의 점들은 고정되어 있고, 기준 좌표계만 회전합니다.
- 다시 점 (0.7, 0.5)를 예로 들어, 기준 좌표계를 Z축을 중심으로 30도 회전시킵니다.
이때 점의 실제 위치는 변하지 않지만, 새로운 회전된 좌표계에서 보는 점의 좌표 값은 달라집니다.

Orientation( 방향 )
- 방향이란 대상이 기준 좌표계에 대해 갖는 각 변위( angular displacement)를 의미합니다.
- 일반적으로 방향은 시작 방향에서 이 각 변위를 일으키는 회전으로 설명됩니다.
- 이 예제에서는, 상위 기준 좌표계(parent reference frame)을 하위 기준 좌표계(child reference frame)로 옮기는 회전을 방향으로 정의합니다.
- 방향은 보통 쿼터니언, 회전 행렬, 오일러 각 또는 회전 벡터로 표현됩니다.
- 방향을 ‘좌표계 회전(frame rotation)’으로 이해하면 유용한데, 즉 하위 기준 좌표계가 상위 기준 좌표계에 대해 회전한 것으로 볼 수 있습니다.
- 예를 들어, 하위 기준 좌표계가 벡터 [1/3 2/3 2/3]를 축으로 30도 회전했다고 가정합니다.

Quaternions
- 쿼터니언은 다음과 같은 형태의 수입니다.
- 여기서, i^2 = j^2 = k^2 = ijk = −1
- 는 모두 실수입니다.
- 이 예제의 나머지 부분에서는 a,b,c,를 쿼터니언의 ‘성분(parts)’이라고 부릅니다.
Quaternions for Rotations and Orientation
- 회전축과 회전 각도는 Quaternion의 성분에 캡슐화 된다.
- 단위 벡터 축 [x,y,z]와 회전 각도 가 주어졌을 때, 이 회전을 나타내는 Quaternions은 아래와 같다.

- Quaternion 을 사용해서 회전을 기술하려면, Quaternion이 반드시 단위 쿼터니언(unit quaternion)이어야 합니다.
- 단위 쿼터니언은 노름(norm)이 1인 Quaternion을 말하며, 노름은 다음과 같이 정의됩니다.

- matlab에서 quaternion을 생성하는 방법은 여러가지가 존재한다.
q1 = quaternion( 1 , 2 , 3 , 4 )

- 위의 예시1과 같은 방법으로 2x2의 배열을 만들어보자
quaternion([1 10; -1 1], [2 20; -2 2], [3 30; -3 3], [4 40; -4 4])
