로봇 오일러 앵글 마스터하기: 완벽 이해 가이드
로봇 회전(Orientation) 이해하기 참 어렵죠? 오일러 앵글(Euler Angles)은 골칫거리입니다. 여기서 고통을 덜어줄 필수 입문서를 제공합니다.
오리엔테이션(자세)! 생각만 해도 머리가 아픕니다. 좌표와 회전으로 로봇 엔드 이펙터 포즈를 프로그래밍해 본 분이라면 공감하실 겁니다.
처음엔 로봇 툴 포즈 설정이 단순해 보이지 않나요?
"로봇 툴을 이 위치로 이동시키고 이 방향을 향하게 하고 싶다."
직관적으로 원하는 툴 방향을 정확히 압니다. 하지만 정확한 숫자로 방향을 표현하려 하면 갑자기 단순 작업이 혼란의 늪이 됩니다.
로봇 오리엔테이션이 이해하기 어려운 이유
로봇 툴의 X, Y, Z(병진) 좌표 표현은 쉽습니다.
병진 표현은 단순히 좌표 입력—예: Point[X, Y, Z] = [100, 1000, 1500] mm—으로 끝납니다. 동일한 베이스 레퍼런스 사용 시 이 좌표가 가리키는 위치는 단 하나뿐입니다. X축 100mm, Y축 1m, Z축 1.5m를 의미할 뿐이죠.
하지만 툴의 오리엔테이션(자세)은 어떻게 표현할까요?
다음처럼 쓸 수 있습니다:
Rotation[XYZ] = [5, 45, 15]°
하지만 똑같이 (반올림해) 이렇게 표현할 수도 있습니다:
Rot[XY'Z"] = [-7.9, 44.7, 16.2]°
또는
Rot[ZY'Z"] = [7.9, 45.2, 5.0]°
심지어
Quaternion[q1-q4] = [0.9, -0.1, 0.4, 0.1]
이 모든 것이 완전히 동일한 오리엔테이션을 가리킵니다!
더 골치 아픈 건 로봇 제조사마다 다른 컨벤션(규약)을 쓴다는 점. 3D 기하학에 익숙해도 두통이 옵니다.
근본 원인: 우리는 회전으로 생각하지 않는다
진짜 문제는 우리가 자연스럽게 회전으로 생각하지 않는다는 점입니다.
병진 좌표는 일상에서 쓰니 직관적입니다(예: "두 번째 선반 아래쪽, 왼쪽에서 네 번째 책"). 하지만 방향을 표현하려 하면 손가락으로 가리키며 "저쪽 방향이야"라고 할 수밖에 없습니다.
안타깝게도 로봇은 "저기쯤" 같은 모호한 지시로는 안 됩니다. 정확한 정보가 필요합니다.
우리에게 필요한 건 오일러 앵글에 대한 확실한 이해입니다.
오일러 앵글이란?
기초부터 차근차근 시작합시다.
로봇 오리엔테이션 표현에 가장 흔히 쓰이는 것이 오일러 앵글입니다. 오일러 앵글은 세 숫자로 구성되며, 각 숫자는 한 축 주위 회전을 나타냅니다. 회전 순서에 따라 여러 오일러 앵글 컨벤션이 존재합니다.
먼저 단일 축 예로 단순화해 봅시다.
나침반을 상상해 보세요.
흔히 월드 Z축은 하늘에서 땅으로 향하는 축입니다. 나침반 바늘이 Z축 주위 회전(Rot[Z])이라 볼 수 있습니다. 나침반을 수평으로 들고 화살표가 135°를 가리키면 북쪽이 왼쪽 어깨 너머, 즉 현재 남동쪽을 보고 있다는 뜻입니다. 나침반 위치(바닥, 머리 위 등)와 무관하게 방향이 같으면 각도는 항상 135°입니다.
여기까진 단순합니다.
나침반은 회전 값 하나(Rot[Z])만 있지만, 임의 3D 오리엔테이션을 표현하려면 세 값이 필요합니다. 여기서 복잡해집니다.
로봇 오리엔테이션 표현의 다른 방법으로는 쿼터니언(Quaternion)이나 포즈(4×4 행렬)가 있습니다.
직접 만져보며 익히기
이제부터 대화형 시각 도구가 도움이 됩니다.
RoboDK 무료 버전 다운로드를 추천합니다. 레퍼런스 프레임 시각화와 결과 좌표 확인에 최적화되어 있습니다.
RoboDK 실행 후 '레퍼런스 프레임 추가' 버튼이나 Program 메뉴에서 옵션 선택으로 레퍼런스 프레임 생성. 화면 중앙에 빨강(X), 초록(Y), 파랑(Z) 프레임이 나타납니다.
프레임 회전 방법: Alt 키를 누른 채 나타나는 곡선 화살표를 클릭·드래그하세요.
비행기 조종으로 이해하기 
robot-forum에서 잘 설명된 비행기 비유를 사용하겠습니다.
레퍼런스 프레임을 비행기라 칩시다. 직선 빨강 화살표(X축) 끝이 기수(노즈 콘), 직선 초록 화살표(Y축)가 왼쪽 날개입니다.
이때 곡선 화살표 조작은 다음 기능을 합니다:
- 곡선 빨강 화살표 = Rot[X]: 롤(Roll), 비행기가 수평 축을 중심으로 회전.
- 곡선 초록 화살표 = Rot[Y]: 피치(Pitch), 기수를 위아래로 향하게 함.
- 곡선 파랑 화살표 = Rot[Z]: 요(Yaw), 비행기 진행 방향 결정.
조종사가 비행기를 왼쪽 아래로 서서히 돌리고 싶다면 Z축만 돌리는 게 아닙니다—비행기는 그렇게 안 움직입니다.
대신 비행기는:
- 기수를 아래로: Rot[Y]
- 비행기 왼쪽으로 롤: -Rot[X]
- 왼쪽으로 요: Rot[Z]
이 전체 움직임은 Rot[XYZ]로 표현됩니다. RoboDK에서 프레임을 직접 움직여 보며 개념에 익숙해지세요.
편안해지면 메인 윈도우 좌상단 프레임 이름을 더블클릭해 '프레임 상세(Frame Details)' 패널을 여세요.
하나의 오리엔테이션, 여러 가능한 회전
RoboDK로 다음 과제를 해보세요.
각 과제 전, 프레임 상세 패널의 '햄버거' 메뉴(세 줄 아이콘)에서 '초기화(Reset - set identity)' 선택해 프레임 리셋.
- 좌표 위 드롭다운에서 Generic 대신 Stäubli 회전(X→Y'→Z") 선택.
- 파랑(Z)이 아래, 빨강(X)이 뒤쪽(시작 위치에서 둘 다 뒤집힘, 초록(Y)은 그대로)을 가리키도록, Y축 회전만으로 이동.
- 리셋 후 같은 자세로. 단, Z축 회전 한 번, X축 회전 한 번만 사용.
- 리셋 후 같은 자세로. 단, X축 회전 한 번, Z축 회전 한 번만 사용.
보셨듯 동일한 오리엔테이션을 여러 방식으로 달성할 수 있습니다.
첫 번째는 Rot[Y]라 부를 수 있습니다(Y축 회전만 포함). 두 번째는 Rot[Z, X'](Z축 회전 후 새로운 X축 회전). 세 번째는 Rot[X, Z'](X축 회전 후 새로운 Z축 회전). 프라임 기호(')는 정적 축이 아닌 직전 움직임 기준 회전임을 뜻합니다.
이것이 오일러 앵글의 핵심 개념입니다. 축 순서와 회전을 바꿔 같은 오리엔테이션에 여러 경로로 도달할 수 있습니다.
로봇 제조사마다 다른 조합을 채택했습니다. 예: Stäubli XY'Z", Adept ZY'Z", KUKA ZY'X", Fanuc & Motoman XYZ. 반면 ABB는 쿼터니언, Universal Robots는 오리엔테이션 벡터 사용. 하지만 모든 컨벤션이 공간의 모든 오리엔테이션을 표현 가능합니다.
자세한 내용은 RoboDK 문서 참조.
다양한 로봇 컨벤션 테스트해 보기
이제 좀 감이 오시나요? 하지만 이건 시작에 불과합니다. RoboDK에서 오일러 앵글 컨벤션을 진정 마스터하려면 소프트웨어로 직접 실험하며 이 가이드를 따라해 보세요.
'프레임 상세' 패널의 연파랑, 보라, 노랑 박스에서 회전 수치 효과를 실시간 확인할 수 있습니다.
기본값은 Generic XYZ 컨벤션. 드롭다운에서 다양한 로봇 제조사 선택해 보세요. 색상 박스에 수치 직접 입력해 프레임 변화 관찰.
오일러 앵글 심화 튜토리얼은 Mecademic 페이지도 추천합니다.