6축 로봇은 왜 특이점에서 멈칫할까 | 7축 로봇의 여유 자유도로 넘어가기
6축 로봇팔이 특이점에서 관절 속도가 폭주하고 멈추는 이유를 야코비안 손계산으로 확인하고, 관절을 하나 더 단 7축 로봇이 영공간(null space)과 자기 운동으로 특이점·관절 한계·장애물을 피하는 원리를 정리합니다. 피하지 못할 때 쓰는 DLS(Tikhonov 정규화)와 Franka의 elbow 파라미터까지.
한 줄 요약: 손끝의 위치와 방향은 6자유도라서, 6축 로봇은 관절 수가 딱 맞습니다. 그래서 여유가 하나도 없고, 특이점 근처에서는 관절 속도가 폭주합니다. 관절을 하나 더 단 7축 로봇은 손끝을 고정한 채 팔 모양만 바꿀 수 있는 여분의 1자유도가 생기고, 이걸로 특이점을 피해 갑니다.
공부 흐름
- 기본 관계: 관절 속도와 손끝 속도를 잇는 야코비안
- 특이점: 좌표를 넣었는데도 특이점이 발생하는 이유 (손계산)
- 6축 로봇의 단점: 대표 특이점 3가지와 “여유 없음”의 대가
- 7축 로봇의 장점: 영공간, 자기 운동, 그리고 Franka의 elbow
- 피하지 못하면 버티기: DLS (Tikhonov 정규화)
- 7축도 공짜는 아니다
1. 기본 관계: 야코비안
변수 정의
- $q = (q_1, \dots, q_n)$ = 관절 각도 ($n$ = 관절 수)
- $\dot q$ = 관절 속도
- $\dot x = (v, \omega)$ = 손끝의 선속도 3개 + 각속도 3개 = 6개
- $J(q)$ = $6 \times n$ 야코비안. 현재 자세 $q$에 따라 달라짐
로봇을 움직일 때는 반대 방향, 즉 “손끝을 이렇게 움직이고 싶다 → 관절은 얼마나?”를 풉니다. 6축이면 $J$가 $6\times6$ 정사각 행렬이니
\[\dot q = J(q)^{-1}\,\dot x\]실제로 우리가 넣는 건 위치
이 글의 상황은 손끝 속도가 아니라 손끝 위치를 입력하는 경우입니다.
- 월드 좌표계에서 목표점(웨이포인트)을 넣고, 구간 속도 제한 $v_{\max}$를 걸어 둡니다. (월드→베이스 변환은 정확하다고 가정)
- 이동 시간 $T$는 거리와 속도·가속 제한으로 자동으로 정해집니다.
- 그 시간 동안 경로를 보간해서 매 제어 주기마다 목표 위치 $x_d(t_k)$를 로봇에 보냅니다.
- 로봇 내부 제어기가 위치 차이를 관절 각도 변화로 바꿉니다.
양변을 제어 주기 $\Delta t$로 나누면 위의 $\dot q = J^{-1}\dot x$와 같은 식입니다. 위치를 넣든 속도를 넣든, 안에서 $J^{-1}$을 거친다는 점은 같습니다.
| 기호 | 내용 | |
|---|---|---|
| 입력 | $x_d(t_k)$ | 매 주기 보내는 목표 손끝 위치 |
| 행렬 | $J(q_k)$ | 현재 관절 각도로 계산한 야코비안. $q$는 곱하는 값이 아니라 $J$의 숫자를 정하는 값 |
| 출력 | $\Delta q_k$ | 이번 주기 동안의 관절 각도 변화 |
각도를 한 번에 푸는 문제($x = f(q)$를 $q$에 대해 풀기)는 $\sin$, $\cos$가 얽힌 비선형 방정식이지만, 한 주기 동안의 작은 변화는 현재 자세에서 선형이라 역행렬 한 번으로 풀립니다.
위치를 넣는 방식의 장점도 있습니다. $\Delta x_k$가 “목표 위치 − 현재 위치”라서, 이전 주기에 덜 갔으면 다음 주기에 그만큼 더 가라는 명령이 자동으로 들어갑니다. 오차가 적분되며 쌓이지 않습니다.
목표점 + 속도 제한 → 시간 자동 계산·보간 → 매 주기 목표 위치 → 로봇 내부에서 $J(q)^{-1}$로 관절 변화 계산. 자세가 바뀌면 $J$도 바뀌므로 매 주기 다시 계산합니다.
이 식은 역행렬이 존재해야 성립합니다. 문제는 여기서 시작합니다.
2. 좌표를 넣었는데 특이점이 발생한다
목표 좌표는 정상적인 값이고 구간 속도도 제한해 뒀는데 로봇이 멈칫하거나 에러로 정지하는 경우가 있습니다. 좌표 입력도 로봇 내부에서는 $\Delta q = J(q)^{-1}\Delta x$를 거치기 때문입니다. 경로 위 어떤 자세에서 $J$가 랭크를 잃으면, 입력이 좌표든 속도든 같은 문제가 생깁니다.
$\det J(q) = 0$인 자세가 특이점입니다. 이때
- 위치를 입력으로 넣었는데 손끝이 그 방향으로 움직이지 않는 상황이 생기고 (랭크 결손)
- 그 근처에서는 $J^{-1}$이 폭주해서 아주 느린 손끝 움직임에도 관절이 엄청 빨리 돌아야 합니다.
7축 로봇 팔로 직접 보면 바로 이해됩니다. 어깨에서 같은 방향으로 목표 좌표를 점점 멀리 넣어 봤습니다.
목표가 0.50 m일 때는 바깥으로 1 cm 더 가는 데 관절 2.2°면 되지만, 0.855 m에서는 21.1°가 필요합니다. 닿을 수 있는 한계(0.858 m)에서는 팔이 다 펴져서, 0.95 m 목표를 넣어도 9 cm 앞에서 멈춥니다.
- ① 팔이 굽어 있으면 어느 방향으로든 쉽게 움직입니다.
- ② 팔을 거의 다 펴면 같은 1 cm를 가는 데 관절이 10배 가까이 더 움직여야 합니다. 이 근처에서 관절 속도 한계에 걸립니다.
- ③ 팔이 다 펴지면 바깥 방향으로는 관절을 어떻게 돌려도 손끝이 나가지 않습니다. 이 방향이 $J$가 잃어버린 랭크입니다. 7축이라도 이 경계 특이점은 피할 수 없습니다.
손계산: 2관절 평면 팔
6×6 행렬은 손으로 다루기 힘드니, 원리가 같은 가장 작은 예로 봅니다.
- 링크 길이 $l_1 = l_2 = 0.5$ m
- 손끝 위치 $x = l_1 c_1 + l_2 c_{12}$, $y = l_1 s_1 + l_2 s_{12}$ (여기서 $c_{12} = \cos(q_1+q_2)$)
미분하면
\[J = \begin{bmatrix} -l_1 s_1 - l_2 s_{12} & -l_2 s_{12}\\ l_1 c_1 + l_2 c_{12} & l_2 c_{12}\end{bmatrix}, \qquad \det J = l_1 l_2 \sin q_2\]$q_2 = 0$, 즉 팔을 일직선으로 쭉 폈을 때 $\det J = 0$입니다. 이때 두 열이 모두 “팔 방향에 수직”이 되어, 팔 방향(베이스 쪽으로 당기기)의 속도를 만들 수 없습니다.
$q_1 = 0$에서 손끝을 $\dot x = (-0.1, 0)$ m/s로 당기는 경우를 계산해 봅니다. $q_2 = 10^\circ$이면
\[J = \begin{bmatrix} -0.0868 & -0.0868\\ 0.9924 & 0.4924\end{bmatrix}\]1행에서 $-0.0868(\dot q_1 + \dot q_2) = -0.1$이므로 $\dot q_1 + \dot q_2 = 1.152$이고, 2행 $0.9924\,\dot q_1 + 0.4924\,\dot q_2 = 0$과 연립하면
\[\dot q_1 = -1.134\ \text{rad/s},\qquad \dot q_2 = 2.286\ \text{rad/s} \;(\approx 131^\circ/\text{s})\]손끝은 겨우 10 cm/s로 움직이는데 팔꿈치는 1초에 131°를 돌아야 합니다.
| $q_2$ | $\det J$ | 필요한 $\dot q_2$ | 최소 특이값 $\sigma_{\min}$ |
|---|---|---|---|
| $90^\circ$ | 0.250 | $11.5^\circ$/s | 0.309 |
| $30^\circ$ | 0.125 | $42.8^\circ$/s | 0.116 |
| $10^\circ$ | 0.043 | $131^\circ$/s | 0.039 |
| $1^\circ$ | 0.004 | $1313^\circ$/s | 0.004 |
팔을 펼수록 $\sigma{\min}$이 0에 가까워지고, 필요한 관절 속도는 대략 $1/\sigma_{\min}$배로 커집니다._
실제 로봇은 관절 속도 한계가 있으니, 이 상황에서 속도 제한에 걸려 멈추거나, 경로를 벗어나거나, 에러를 내고 정지합니다. 이게 현장에서 말하는 “특이점에서 로봇이 멈칫한다”의 정체입니다.
3. 6축 로봇의 단점
대표 특이점 3가지
산업용 6축 로봇(구형 손목: 마지막 세 축이 한 점에서 만남)은 야코비안이 “팔 부분”과 “손목 부분”으로 나뉘어서
\[\det J = \det J_{\text{팔}} \cdot \det J_{\text{손목}}\]둘 중 하나만 0이 돼도 특이점입니다. UR 같은 협동로봇도 같은 세 종류를 안내합니다.
| 특이점 | 언제 | 무엇을 잃나 |
|---|---|---|
| 팔꿈치 | 팔이 일직선으로 펴짐 ($q_3 \approx 0$) | 팔 방향 속도. 2절의 예와 같음 |
| 어깨 | 손목 중심이 1축 연장선 바로 위에 옴 | 1축을 돌려도 손목 중심이 안 움직임 |
| 손목 | 5축이 0°가 되어 4축과 6축이 일직선 | 4축과 6축이 같은 회전을 하게 됨 → 회전 1자유도 상실 |
왼쪽부터 팔꿈치(팔이 일직선), 어깨(손목 중심이 1축 위), 손목(4축과 6축이 일직선).
손목 특이점에서 $\det J_{\text{손목}} \propto \sin q_5$입니다. 손목 중심 기준으로 4번 열과 6번 열이 같은 벡터가 되어 랭크가 5로 떨어집니다. (오일러각의 짐벌 락과 정확히 같은 구조입니다. 손목 세 축이 곧 ZYZ 오일러각이기 때문입니다.)
문제의 본질: 여유가 0
특이점 자체보다 더 근본적인 문제는 관절 수 = 작업 자유도라는 점입니다.
- 팔 모양을 고를 수 없음: 손끝 위치와 방향을 정하면 팔 모양은 유한 개(구형 손목 6축은 보통 최대 8개: 어깨 좌/우 × 팔꿈치 위/아래 × 손목 뒤집기)로 정해집니다. 그 사이를 연속으로 오갈 수 없습니다.
- 특이점을 피할 방법이 경로 수정뿐: 직선 경로가 특이점을 지나가면 손끝 경로 자체를 바꾸거나, 5절의 DLS처럼 정확도를 포기하고 버티는 수밖에 없습니다.
- 관절 한계·장애물 회피 불가: 팔꿈치가 벽에 닿을 것 같아도, 손끝을 그대로 둔 채 팔꿈치만 비킬 방법이 없습니다.
- 해 사이 전환 비용: 다른 해로 넘어가려면 손끝이 원래 경로를 벗어나는 큰 재배치 동작이 필요합니다.
왼쪽: 관절 수가 딱 맞으면 같은 손끝 위치에 해가 2개뿐. 오른쪽: 관절이 하나 남으면 손끝을 고정한 채 팔 모양이 연속으로 바뀝니다.
4. 7축 로봇의 장점
영공간: 손끝을 안 움직이는 관절 속도
7축이면 $J$는 $6\times7$입니다. 식은 6개, 미지수는 7개라 $J\dot q = 0$을 만족하는 0이 아닌 $\dot q$가 존재합니다. 이 집합이 영공간(null space)이고, 이 방향으로 관절을 움직이면 손끝은 그대로, 팔 모양만 바뀝니다. 이를 자기 운동(self-motion)이라 합니다. 손을 책상에 붙인 채 팔꿈치만 원을 그려 보면 바로 느껴집니다.
손끝(별)은 그대로인데 팔 모양만 계속 바뀝니다. 아래 조작도 $w$ 값도 같이 변합니다.
손계산: 3관절 평면 팔
평면에서 손끝 위치(2자유도)만 맞추는 3관절 팔은 “작업 2 + 여유 1”이라 7축 로봇의 축소판입니다.
- 링크 길이 $L = (0.4,\ 0.4,\ 0.2)$ m, 자세 $q = (0^\circ,\ 90^\circ,\ -90^\circ)$
- 손끝 = $(0.6,\ 0.4)$
$i$번째 열은 “$i$번 관절 이후 링크들”의 합으로 계산됩니다.
\[J = \begin{bmatrix} -0.4 & -0.4 & 0\\ 0.6 & 0.2 & 0.2 \end{bmatrix}\]$J n = 0$을 풀면, 1행에서 $n_2 = -n_1$, 2행에서 $0.6n_1 - 0.2n_1 + 0.2n_3 = 0 \Rightarrow n_3 = -2n_1$이므로
\[n = (1,\ -1,\ -2)\]검산: $-0.4(1) - 0.4(-1) + 0 = 0$, $0.6(1) + 0.2(-1) + 0.2(-2) = 0$. 관절을 $(1, -1, -2)$ 비율로 돌리면 손끝 속도는 정확히 0입니다.
여분의 자유도를 어디에 쓰나
일반적인 해는 “손끝 작업” + “영공간에서 고른 2차 목표”입니다.
\[\dot q = J^{+}\dot x + (I - J^{+}J)\,z\]변수 정의
- $J^{+} = J^\top (JJ^\top)^{-1}$ = 의사역행렬. 손끝 작업 $\dot x$를 만족하는 최소 크기 관절 속도
- $(I - J^{+}J)$ = 아무 벡터나 영공간으로 투영하는 행렬. 손끝에 영향 없음
- $z$ = 2차 목표의 기울기. 예를 들어 아래 지표들의 기울기
여기에 넣는 2차 목표가 곧 7축의 장점입니다.
| 2차 목표 $z$ | 효과 |
|---|---|
| 조작도 $w = \sqrt{\det(JJ^\top)}$ 증가 방향 | 특이점에서 멀어짐. 2관절 팔이면 $w = l_1 l_2 \lvert\sin q_2\rvert$ |
| 관절 한계 중앙으로 | 관절 한계에 걸리지 않음 |
| 장애물에서 멀어지는 방향 | 손끝을 둔 채 팔꿈치만 비킴 |
| 토크·에너지 최소 | 같은 작업을 더 편한 자세로 |
위의 3관절 팔로 직접 해 보면, 손끝 $(0.6, 0.4)$를 고정한 채 영공간을 따라 팔 모양을 훑었을 때 조작도는 0.16에서 0.26까지 변합니다. 가장 큰 자세를 고르면 같은 작업을 특이점에서 가장 먼 자세로 할 수 있습니다.
왼쪽: 같은 손끝을 만드는 여러 팔 모양 (색 = 조작도). 오른쪽: 자기 운동 파라미터에 따른 조작도. 최대 $w = 0.264$.
6축은 특이점을 만나면 손끝 경로를 바꿔야 했지만, 7축은 손끝 경로는 그대로 두고 팔 모양을 바꿔서 피합니다. 이게 핵심 차이입니다. 사람 팔이 어깨 3 + 팔꿈치 1 + 손목 3 = 7자유도인 것도 같은 이유로 볼 수 있습니다.
Franka에서는: elbow 파라미터
Franka Research 3 같은 7축 로봇은 카테시안 자세만으로는 팔 모양이 하나로 정해지지 않습니다. 그래서 libfranka는 영공간의 1자유도를 직접 지정하게 해 줍니다.
RobotState::elbow[0]= 3번 관절 각도 (rad)RobotState::elbow[1]= 4번 관절이 꺾인 방향 ($+1 / 0 / -1$)
CartesianPose에 O_T_EE와 함께 elbow를 넘기면, 손끝 자세는 유지하면서 3번 관절로 팔꿈치 위치를 고르는 셈입니다. 6축이었다면 이 인자는 존재할 이유가 없습니다.
5. 피하지 못하면 버티기: DLS
6축은 특이점을 피할 여유가 없으니, 지나가야 한다면 폭주만 막는 방법이 필요합니다. 그게 DLS(Damped Least Squares)이고, 수학적으로는 Tikhonov 정규화(머신러닝의 ridge regression)와 같습니다.
식
역행렬은 “손끝 오차만 최소화”합니다. DLS는 여기에 관절 속도가 커지는 것에 벌점을 추가합니다.
\[\min_{\dot q}\ \|J\dot q - \dot x\|^2 + \lambda^2\|\dot q\|^2 \;\;\Rightarrow\;\; \dot q = J^\top (JJ^\top + \lambda^2 I)^{-1}\dot x\]- $\lambda$ = 감쇠 계수(damping factor, Tikhonov factor). $\lambda = 0$이면 역행렬과 같음
SVD로 보면 한 줄
각 특이값 방향의 이득이 이렇게 바뀝니다.
\[\frac{1}{\sigma} \;\longrightarrow\; \frac{\sigma}{\sigma^2 + \lambda^2}\]- $\sigma \gg \lambda$ (특이점에서 멀 때): 거의 $1/\sigma$, 정확히 따라감
- $\sigma \to 0$ (특이점): 무한대가 아니라 0으로 감. 최댓값은 $\sigma = \lambda$에서 $1/(2\lambda)$
오른쪽(특이점 쪽)으로 갈수록 역행렬은 끝없이 커지지만, DLS는 $\sigma = \lambda$에서 꺾여 내려옵니다.
손계산: 2관절 팔, $q_2 = 1^\circ$
2절의 예에서 $\sigma_{\min} = 0.0039$이고, $\lambda = 0.05$로 놓습니다.
| $\sigma_{\min}$ 방향 이득 | 필요한 $\dot q_2$ | 실제 손끝 속도 | |
|---|---|---|---|
| 역행렬 | $1/0.0039 = 256$ | 1313°/s | $(-0.1,\ 0)$ 정확 |
| DLS $\lambda=0.05$ | $0.0039/(0.0039^2+0.05^2) = 1.55$ | 8°/s | $(-0.0006,\ 0.001)$ |
관절 속도가 160분의 1로 줄었고, 대가로 팔 방향 손끝 속도를 거의 포기했습니다. 어차피 그 방향은 물리적으로 낼 수 없는 방향이라, “못 하는 건 포기하고 대신 폭주하지 않는다”는 거래입니다.
시뮬레이션: 특이점 근처를 지나는 직선 경로
2관절 팔의 손끝을 베이스 1 cm 옆을 지나는 직선으로 0.1 m/s 움직여 봤습니다. 손끝이 회전축 바로 옆을 지나니 1축이 순간적으로 휙 돌아야 하는, 6축의 어깨 특이점과 같은 상황입니다.
역행렬은 1축이 577°/s까지 치솟습니다. DLS는 관절 속도를 한계 아래로 누르는 대신 경로를 1~2 cm 잠깐 벗어납니다.
| 방법 | 1축 최대 속도 | 최대 경로 오차 |
|---|---|---|
| 역행렬 | 577°/s | 0.1 mm |
| DLS $\lambda = 0.02$ | 174°/s | 18.8 mm |
| DLS $\lambda = 0.05$ | 39°/s | 14.2 mm |
실전 포인트
- $\lambda$가 크면 안전하지만 평소에도 추종 오차가 생깁니다. 그래서 보통 $\sigma_{\min}$이나 조작도가 임계값 아래로 떨어질 때만 $\lambda$를 키우는 가변 감쇠를 씁니다.
- 6축이든 7축이든 다 씁니다. 7축은 영공간으로 특이점을 피하고, DLS는 피하지 못했을 때 버티는 수단이라 둘을 같이 씁니다.
6. 7축도 공짜는 아니다
- 특이점이 완전히 사라지진 않음: 팔을 끝까지 뻗는 작업공간 경계의 특이점은 관절을 몇 개 달아도 피할 수 없습니다. 7축은 “피할 여지”가 생기는 것입니다.
- 역기구학 해가 무한함: 해를 고르는 기준(2차 목표, elbow 지정)이 반드시 필요하고, 기준 없이 의사역행렬만 쓰면 반복 작업에서 팔 모양이 조금씩 떠내려갈 수 있습니다.
- 제어·계산 복잡도 증가: 영공간 투영, 우선순위 제어 등 설계할 것이 늘어납니다.
- 하드웨어 비용: 모터·감속기·센서가 하나 더 들고, 무게와 가격이 올라갑니다.
정리
- 손끝 자세는 6자유도라서, 6축 로봇은 관절 수가 딱 맞고 여유가 0입니다.
- 야코비안의 $\det J$가 0이 되는 특이점(팔꿈치·어깨·손목)에서는 특정 방향으로 움직일 수 없고, 근처에서는 관절 속도가 $1/\sigma_{\min}$배로 폭주합니다. 2관절 예에서 $q_2 = 1^\circ$이면 10 cm/s에 1313°/s가 필요했습니다.
- 6축은 특이점을 만나면 손끝 경로를 바꾸는 것 말고는 피할 방법이 없고, 지나가야 한다면 DLS로 정확도를 조금 포기하며 폭주를 막습니다.
- 7축은 $6\times7$ 야코비안의 영공간이 생겨, 손끝을 고정한 채 팔 모양을 바꾸는 자기 운동이 가능합니다. 이걸로 특이점·관절 한계·장애물을 피합니다.
- Franka는 이 여분의 1자유도를
elbow(3번 관절 각도 + 4번 관절 방향)로 노출합니다.
더 읽을거리
- T. Yoshikawa, Manipulability of Robotic Mechanisms, IJRR 4(2), 1985: 조작도 $w = \sqrt{\det(JJ^\top)}$를 제안한 논문입니다.
- B. Siciliano 외, Robotics: Modelling, Planning and Control, 3장: 야코비안, 특이점, 여유 자유도를 표준적으로 다룹니다.
- libfranka:
robot_state.h의elbow설명