스크류 이론

편집 역사 토론
시뮬레이션 물리 게임 개발 마지막 수정: 2026-09-05 04:14:22

1. 개요[편집]

스크류 이론
Screw Theory
기본 대상직선 하나 + 피치 하나 = 스크류
두 얼굴트위스트(순간 운동) · 렌치(힘+모멘트)
좌표플뤼커 6성분 $(\mathbf{s};\,\mathbf{s}_0)$
핵심 연산상반곱 = 렌치가 트위스트에 하는 일률
대수적 정체$\mathfrak{se}(3)$ 와 그 쌍대공간
정본Ball, A Treatise on the Theory of Screws (1900)
한 줄 요약운동도 힘도 결국 나사 하나로 적힌다

회전과 병진을 따로 적던 사람들이, 어느 날 둘을 6개짜리 벡터 하나로 묶고 나서 식이 절반으로 줄어드는 것을 목격했다.

스크류 이론(screw theory)은 강체의 순간 운동과 강체에 걸리는 하중을, 공간의 직선 하나와 그 직선에 붙은 피치(pitch) 하나로 이루어진 「스크류」라는 단일 기하 객체로 통일해 기술하는 체계다. 운동 쪽 화신이 트위스트(twist), 하중 쪽 화신이 렌치(wrench)이며, 둘 다 6개의 수로 적힌다. 회전과 병진, 힘과 모멘트를 각각 따로 굴리던 3차원 벡터 대수가 이 6차원 언어로 넘어오면 곱해야 할 행렬의 개수와 유도해야 할 식의 줄 수가 눈에 띄게 줄어든다.

출발점은 기구학에서 이미 만난 샤슬 정리다 — 임의의 강체 변위는 어떤 직선을 중심으로 한 회전과 그 직선 방향 병진의 합성이다. 나사를 돌려 박는 운동 하나가 모든 강체 변위를 덮는다는 뜻이고, 그 나사의 축과 “한 바퀴에 얼마나 파고드는가”(피치)를 적어 놓은 것이 스크류다. 로버트 스토웰 볼이 1876년 논문과 1900년의 『나사 이론 개론』에서 이 관점을 체계화했고, 20세기 후반 로보틱스가 이 언어를 통째로 수입해 오늘날 로봇 기구학 교과서의 표준 표기가 되었다.1

샤슬 정리·트위스트의 개념적 소개, 자유도 세기, 조작성 타원 같은 일반론은 기구학이 이미 다루므로 반복하지 않는다. 이 문서는 스크류의 대수 — 플뤼커 좌표, 상반성, 스크류계의 랭크, 지수곱 정식화, 그리고 특이점을 랭크 결손으로 읽는 법 — 을 담당한다.

2. 스크류의 좌표 — 플뤼커 6성분[편집]

공간의 유향 직선은 방향벡터 하나만으로는 정해지지 않는다. 방향이 같고 위치가 다른 직선이 무수히 많기 때문이다. 그래서 방향 s\mathbf{s} 와 원점에 대한 모멘트 s0=r×s\mathbf{s}_0=\mathbf{r}\times\mathbf{s} 를 짝지어

L=(s;s0),ss0=0\mathcal{L}=(\mathbf{s};\,\mathbf{s}_0),\qquad \mathbf{s}\cdot\mathbf{s}_0=0

로 적는 것이 플뤼커 좌표다(r\mathbf{r} 은 직선 위 아무 점). 6개의 수를 쓰되 전체 스케일이 무의미하고 위의 항등식 하나가 걸려 있으므로 실질 자유도는 4이며, 이것이 3차원 공간의 직선 전체가 이루는 4차원 다양체다. 사영기하학의 언어로는 이 항등식이 5차원 사영공간 안의 2차 초곡면(클라인 2차식)을 정의하고, 직선의 집합이 곧 그 초곡면이다.

스크류는 여기에 피치 hh 를 얹어 항등식을 깬 물건이다.

S=(s;  r×s+hs),h=ss0ss,r=s×s0ss\mathcal{S}=(\mathbf{s};\;\mathbf{r}\times\mathbf{s}+h\,\mathbf{s}),\qquad h=\frac{\mathbf{s}\cdot\mathbf{s}_0}{\mathbf{s}\cdot\mathbf{s}},\qquad \mathbf{r}=\frac{\mathbf{s}\times\mathbf{s}_0}{\mathbf{s}\cdot\mathbf{s}}

우변의 두 공식이 요점이다. 6개의 수만 던져 주면 축의 방향·축의 위치·피치를 전부 되뽑아낼 수 있다. 피치는 라디안당 길이의 차원을 가지며, 특수한 두 경우가 우리가 아는 것들이다.

  • h=0h=0 — 순수 회전. 스크류가 플뤼커 항등식을 만족하는 진짜 직선이 된다. 힘 쪽에서는 작용선을 가진 순수한 힘이 여기 해당한다.
  • h=h=\infty(s=0\mathbf{s}=\mathbf{0}) — 순수 병진, 힘 쪽에서는 순수 우력(couple). 축의 위치가 의미를 잃고 방향만 남는다.

성분의 순서 규약은 문헌마다 갈린다. 로보틱스 교과서(리 군 계열)는 각속도를 앞에 두어 V=(ω;v)\mathcal{V}=(\boldsymbol\omega;\mathbf{v}) 로 적고, 고전 스크류 문헌은 힘을 앞에 두는 광선 좌표(ray coordinates)를 쓴다. 남의 식을 가져올 때 이 순서부터 확인하지 않으면 부호와 블록이 조용히 어긋난다. 이 문서는 각속도 우선 규약을 쓴다.

3. 트위스트와 렌치, 그리고 일률[편집]

강체의 순간 운동은 각속도 ω\boldsymbol\omega물체에 고정된 점 중 지금 기준점에 와 있는 점의 속도 v\mathbf{v} 를 묶은 트위스트

V=[ωv]R6\mathcal{V}=\begin{bmatrix}\boldsymbol\omega\\ \mathbf{v}\end{bmatrix}\in\mathbb{R}^6

로 적는다. v\mathbf{v} 가 “기준점의 속도”가 아니라 강체를 무한히 늘렸을 때 기준점에 겹치는 물질점의 속도라는 점이 초심자를 반드시 한 번 태우는 부분이다. 이렇게 정의해야만 V\mathcal{V} 가 좌표계 변환에서 선형으로 변환된다.

하중 쪽은 모멘트 m\mathbf{m} 과 힘 f\mathbf{f} 를 묶어 렌치 F=(m;f)\mathcal{F}=(\mathbf{m};\mathbf{f}) 로 적는다. 순서를 이렇게 맞춰 놓으면 일률이 그냥 내적이 된다.

P=fv+mω=FTVP=\mathbf{f}\cdot\mathbf{v}+\mathbf{m}\cdot\boldsymbol\omega=\mathcal{F}^{\mathsf T}\mathcal{V}

트위스트는 se(3)\mathfrak{se}(3) 의 원소이고 렌치는 그 쌍대공간의 원소이며, 둘을 짝지으면 일률이 나온다. 스크류 이론이 리 군의 언어와 정확히 같은 물건이라는 사실이 여기서 드러난다 — 트위스트를 4×4 행렬로 올린

[V]=[[ω]×v0T0][\mathcal{V}]=\begin{bmatrix}[\boldsymbol\omega]_\times & \mathbf{v}\\ \mathbf{0}^{\mathsf T} & 0\end{bmatrix}

의 지수 exp([V]θ)\exp([\mathcal{V}]\theta)SE(3)SE(3) 원소이고, 그것이 바로 나사 운동이다.

좌표계를 바꿀 때 쓰는 것이 수반 사상(adjoint)이다. T=(R,p)T=(R,\mathbf{p}) 에 대해

[AdT]=[R0[p]×RR],Va=[AdTab]Vb,Fb=[AdTab]TFa[\mathrm{Ad}_T]=\begin{bmatrix}R & 0\\ [\mathbf{p}]_\times R & R\end{bmatrix}, \qquad \mathcal{V}_a=[\mathrm{Ad}_{T_{ab}}]\mathcal{V}_b, \qquad \mathcal{F}_b=[\mathrm{Ad}_{T_{ab}}]^{\mathsf T}\mathcal{F}_a

트위스트는 Ad\mathrm{Ad} 로, 렌치는 AdT\mathrm{Ad}^{\mathsf T} 로 변환된다. 이 전치 하나가 힘과 운동의 쌍대성을 코드 수준에서 구현한 것이며, 실수하면 모멘트 팔이 반대 부호로 붙어 조용히 틀린 값이 나온다. 다물체 동역학의 재귀 알고리즘이 쓰는 공간 벡터 대수(페더스톤 표기)가 정확히 이 구조이고, 페더스톤의 운동 벡터/힘 벡터가 여기서의 트위스트/렌치다.

4. 상반적 스크류 — 구속 해석의 본체[편집]

이 이론이 실제로 밥값을 하는 자리가 상반성(reciprocity)이다. 두 스크류 S1=(s1;s01)\mathcal{S}_1=(\mathbf{s}_1;\mathbf{s}_{01}), S2=(s2;s02)\mathcal{S}_2=(\mathbf{s}_2;\mathbf{s}_{02}) 에 대해 상반곱

S1S2=s1s02+s2s01\mathcal{S}_1\circ\mathcal{S}_2=\mathbf{s}_1\cdot\mathbf{s}_{02}+\mathbf{s}_2\cdot\mathbf{s}_{01}

로 정의하고, 이 값이 0이면 두 스크류가 상반적이라고 한다. 한쪽을 트위스트로, 다른 쪽을 렌치로 읽으면 의미가 곧바로 나온다 — 그 렌치는 그 트위스트에 대해 일을 하지 않는다. 가상일의 원리가 스크류 언어로 번역된 형태다.

여기서 구속 해석의 표준 절차가 나온다. 어떤 조인트나 기구가 물체에 허용하는 순간 운동들이 nn 차원 부분공간(nn-계 스크류계)을 이루면, 그 조인트가 전달할 수 있는 하중은 정확히 그 부분공간에 상반적인 (6n)(6-n)-계를 이룬다. 자유도와 구속이 6에서 서로를 보완한다는 이 정리가 볼의 결과이고, 실무에서는 이렇게 쓰인다.

조인트허용 트위스트계전달 렌치계(상반)
회전(R)1-계, 축 직선(피치 0)5-계 — 축과 만나거나 평행한 모든 힘 + 축에 수직인 우력
병진(P)1-계, 피치 무한5-계 — 모든 우력 + 이동방향에 수직인 힘
구면(S)3-계, 중심을 지나는 모든 회전3-계 — 중심을 지나는 모든 힘
원통(C)2-계, 같은 축의 회전+병진4-계

특히 구면 조인트 두 개로 양 끝이 잡힌 링크는 오직 자기 축선을 따르는 순수한 힘만 전달한다(피치 0 렌치 = 직선). 이 한 줄이 스튜어트 플랫폼의 정역학과 특이점 해석 전체를 굴리는 엔진이다.

스크류계의 기하는 그 자체로 연구 주제다. 2-계 스크류계는 일반적으로 실린드로이드(cylindroid)라 불리는 3차 선직면을 이루고, 3-계는 볼과 헌트가 분류표를 만들어 두었다. 코드에서는 이 모든 것이 6×n 행렬의 랭크와 영공간 계산으로 내려온다 — 상반 스크류계를 구하는 것은 ΔS\Delta\, S 의 영공간을 구하는 일이고, 여기서 Δ\Delta 는 위아래 3성분 블록을 맞바꾸는 치환행렬이다.

5. 지수곱 정식화 — 관절 하나 = 스크류 하나[편집]

직렬 기구의 순기구학을 스크류로 적으면 관절 축을 공간에 그대로 적어 놓고 지수를 곱하는 형태가 된다. 브로켓이 1984년에 정리한 지수곱(product of exponentials, PoE) 공식이다.

T(θ)=e[S1]θ1e[S2]θ2e[Sn]θnMT(\theta)=e^{[\mathcal{S}_1]\theta_1}\,e^{[\mathcal{S}_2]\theta_2}\cdots e^{[\mathcal{S}_n]\theta_n}\,M

MM 은 모든 관절각이 0일 때의 말단 자세, Si\mathcal{S}_i그 영자세에서 본 ii번째 관절의 스크류 축이다. 회전관절이면 피치 0, 병진관절이면 피치 무한으로 적으면 된다. 각 지수는 리 군 문서의 로드리게스 공식을 SE(3)SE(3) 로 확장한 닫힌 형태로 계산된다(ω=1\lVert\boldsymbol\omega\rVert=1 로 정규화했을 때).

e[S]θ=[e[ω]×θG(θ)v0T1],G(θ)=Iθ+(1cosθ)[ω]×+(θsinθ)[ω]×2e^{[\mathcal{S}]\theta}=\begin{bmatrix}e^{[\boldsymbol\omega]_\times\theta} & G(\theta)\mathbf{v}\\ \mathbf{0}^{\mathsf T} & 1\end{bmatrix},\qquad G(\theta)=I\theta+(1-\cos\theta)[\boldsymbol\omega]_\times+(\theta-\sin\theta)[\boldsymbol\omega]_\times^2

데나비트-하르텐베르크 표기와 비교하면 장단이 분명하다. DH는 관절당 4개의 수만 쓰지만 좌표계 붙이는 규칙이 까다롭고 축이 평행하거나 교차하면 파라미터가 퇴화한다. PoE는 관절당 6개를 쓰지만 규칙이랄 것이 없고(“축 방향과 축 위의 점 하나를 적어라”) 퇴화가 없으며, 중간 링크 좌표계를 정의할 필요조차 없다. URDF가 관절마다 원점과 축을 직접 적는 것도 사실상 PoE 방식이다.2

6. 야코비안을 스크류 축으로 조립하기[편집]

PoE에서 야코비안이 거의 공짜로 떨어진다. 공간 야코비안의 ii번째 열은 앞선 관절들이 이미 움직여 놓은 뒤의 ii번째 관절 스크류 축이다.

Js,i(θ)=[Ade[S1]θ1e[Si1]θi1]Si,Js,1=S1J_{s,i}(\theta)=\bigl[\mathrm{Ad}_{\,e^{[\mathcal{S}_1]\theta_1}\cdots e^{[\mathcal{S}_{i-1}]\theta_{i-1}}}\bigr]\,\mathcal{S}_i, \qquad J_{s,1}=\mathcal{S}_1

즉 야코비안을 편미분으로 유도할 필요가 없다. 현재 자세에서 각 관절 축의 플뤼커 좌표를 6×n 행렬에 세로로 꽂으면 그게 야코비안이다. 기하학적 의미가 그대로 보이고, 손으로 검산할 수도 있으며, 수치미분이나 자동 미분에 기댈 필요가 없다. 이 행렬의 일반론은 자코비안 행렬, 그것으로 푸는 역기구학은 역운동학이 다룬다.

말단 좌표계 기준으로 적는 물체 야코비안 JbJ_b 도 같은 방식이며 Js=[AdT]JbJ_s=[\mathrm{Ad}_{T}]J_b 로 오간다. 어느 쪽을 쓸지는 취향이 아니라 목적의 문제다 — 힘 제어처럼 말단에 붙은 센서·툴 좌표계에서 생각하는 일에는 물체 야코비안이 편하고, 작업공간 전체를 고정 좌표계에서 보는 일에는 공간 야코비안이 편하다.

7. 특이점 — 랭크 결손을 스크류의 말로 읽기[편집]

특이점의 정의는 “야코비안이 랭크를 잃는 자세”이고, 스크류 언어로 옮기면 관절 축들이 이루는 스크류계의 차원이 떨어지는 자세다. 이 번역이 유용한 이유는 판별이 기하 문제로 바뀌기 때문이다.

  • nn 개의 스크류가 종속이면, 그것들 전부에 상반적인 렌치가 존재한다. 그 렌치는 어떤 관절 토크로도 저항할 수 없다 — 말단을 그 방향으로 밀면 로봇이 그냥 밀린다. 반대로 그 렌치의 상반 방향으로는 말단을 움직일 수 없다.
  • 대표적 6R 특이점이 전부 이 말로 깔끔하게 읽힌다. 팔을 다 편 자세에서는 세 축이 한 평면 위의 평행/공면 직선이 되어 랭크가 떨어지고, 손목 정렬(4·6축 축 일치)에서는 두 스크류가 같은 직선이 되어 문자 그대로 열이 겹친다.
  • 병렬 기구에서는 문제가 뒤집힌다. 각 다리가 전달하는 렌치(대개 피치 0의 직선)들이 선형종속이 되는 자세에서, 액추에이터를 전부 잠갔는데도 그 렌치계에 상반적인 트위스트 방향으로 플랫폼이 움직인다. 직선 6개의 종속성 판정은 그라스만 직선기하로 분류되어 있고(그래스만 대수의 분해 가능한 2-벡터가 곧 직선이다), 메를레가 이 분류로 6-UPS 기구의 특이 자세를 전부 열거했다. 상세는 스튜어트 플랫폼.

한 가지 실무 경고. 6×n 야코비안의 조건수를 그냥 계산하면 안 된다. 위 3행은 각속도(1/초), 아래 3행은 선속도(길이/초)라 단위가 섞여 있어 값이 길이 단위 선택에 따라 바뀐다. 특성 길이로 규격화하거나 회전·병진 블록을 따로 평가해야 하며, 이 함정의 자세한 이야기는 기구학 문서에 있다. 특이점 판정(랭크가 0인가)은 단위와 무관하지만, “얼마나 특이점에 가까운가”라는 정도는 규격화 없이는 의미가 없다.

8. 사촌들 — 이중수와 듀얼 쿼터니언[편집]

스크류를 표현하는 또 하나의 유서 깊은 방법이 이중수(dual number) a^=a+ϵa0\hat a=a+\epsilon a_0, ϵ2=0\epsilon^2=0 이다. 스크류를 이중벡터 s^=s+ϵs0\hat{\mathbf{s}}=\mathbf{s}+\epsilon\mathbf{s}_0 로 적으면, 코텔니코프와 슈투디의 전이 원리(transference principle)에 따라 구면 삼각법의 공식에서 실수 각을 이중각으로 바꾸는 것만으로 공간 기구의 공식이 나온다. 실수부가 각도, 이중부가 두 축 사이의 공통법선 거리를 담기 때문이다.

이 발상의 현대적 후예가 듀얼 쿼터니언 이다. 사원수SO(3)SO(3) 를 이중으로 덮듯 단위 듀얼 쿼터니언이 SE(3)SE(3) 를 이중으로 덮고, 회전과 병진을 8개의 수로 한꺼번에 보간할 수 있어 스켈레탈 애니메이션의 듀얼 쿼터니언 스키닝에서 실제로 쓰인다. 선형 블렌드 스키닝의 관절 함몰(candy-wrapper) 아티팩트가 사라지는 그 기법이다.

9. 여담[편집]

  • 볼이 이 이론을 만든 동기는 로봇이 아니었다. 그는 천문학자였고(아일랜드 왕실 천문관을 지냈다), 강체의 미소 변위와 그에 대한 구속을 일반적으로 다루는 순수 기하학적 문제로 접근했다. 백 년쯤 지나 로보틱스가 통째로 가져다 쓸 줄은 본인도 몰랐을 것이다.
  • 스크류 이론은 20세기 중반 한 번 잊혔다가 1970~80년대에 부활했다. 부활의 계기가 병렬 기구와 로봇 손 — 다시 말해 구속이 복잡해서 자유도를 손으로 세다가 틀리는 물건들 — 의 등장이었다는 점이 이 이론의 성격을 잘 말해 준다. 직렬 6축 팔만 다루면 굳이 필요 없다.
  • 왜 하필 “나사”인가에 대한 가장 짧은 답: 회전과 병진의 비(hh)가 고정된 운동이 나사이고, 그 비가 0이면 경첩, 무한이면 서랍이며, 세상의 모든 강체 운동은 그 사이 어딘가다. 나사가 특수한 게 아니라 경첩과 서랍이 나사의 극한이다.3
  • 이 이론을 배운 사람의 습관 하나 — 기구를 보면 조인트가 아니라 축선을 먼저 그린다. 축이 몇 개인지, 만나는지, 평행인지, 한 평면에 있는지만 보면 특이점의 위치가 대충 보이기 때문이다. 도면 위에 연필로 직선 여섯 개를 긋는 것이 6×6 행렬식을 푸는 것보다 빠를 때가 많다.

10. 관련 문서[편집]

11. Footnotes[편집]

  1. 볼의 1900년판은 지금 읽어도 놀랍도록 현대적이지만, 표기가 완전히 다르고 벡터 대수가 정립되기 전이라 서술이 장황하다. 요즘 사람이 스크류 이론을 배우는 실제 경로는 볼이 아니라 로보틱스 교과서이고, 그 결과 “스크류”라는 단어는 알아도 실린드로이드는 못 들어 본 엔지니어가 대다수다. 부활한 이론이 원전 없이 유통되는 전형적인 사례.

  2. 그렇다고 DH가 죽은 것은 아니다. 로봇 제조사 카탈로그의 파라미터 표는 여전히 DH로 적혀 있고, 표준판과 크레이그 변형판이 병용되는 혼란도 여전하다. 남의 로봇을 코드에 넣을 때 규약을 확인하지 않아 손목이 90도 돌아간 채로 시뮬레이션을 돌리는 일은 지금도 매주 어딘가에서 일어나고 있다.

  3. 그래서 스크류 이론을 배운 뒤에 보면 “회전 조인트와 병진 조인트를 따로 코딩한” 예전 코드가 유난히 눈에 거슬린다. 피치 하나만 파라미터로 두면 분기 하나가 통째로 사라지는데, 그 사실을 모르면 if (joint.type == REVOLUTE) 를 코드 전역에 뿌리게 된다. 리팩터링 동기로는 꽤 강력한 편.