제2부 기구학
2.10 작업공간 분석과 도달성 지도: 도달성·역 도달성·기저 배치 최적화
2.10.1 이 장에서 배우는 것 / 선수 지식 / 특히 중요한 독자
이 장은 로봇 팔이 어디까지, 어떤 방향으로 닿을 수 있는지를 격자 위의 지도로 나타내고 그 지도로 과제를 수행할 기저 위치를 고르는 방법을 다룬다. 작업공간의 부피를 한 수로 재는 방법은 2.2에서 다뤘고, 이 장은 위치마다 닿는 방향의 비율을 저장하는 도달성 지도(reachability map), 그 지도를 뒤집어 과제 자세에서 기저 자세를 구하는 역 도달성 지도(inverse reachability map), 지도의 정확도를 표본 수·격자 크기·방향 칸에 따라 재는 방법을 정리한다. UR5에서 닫힌 형식 IK(2.5)를 정답으로 두고 지도의 재현율·정밀도와 기저 배치의 점수를 측정한다.
배우는 것:
- 도달성 지수 — 위치마다 닿는 접근 방향의 비율. 도달 가능 작업공간·자세 임의 작업공간(2.2)과의 관계.
- 도달성 지도의 구성 — 순기구학 표본으로 채우는 방식과 격자 위 자세에 IK를 푸는 방식, 표본 수와 칸 수의 관계.
- 정확도 지표 — 정답 IK 질의에 대한 재현율·정밀도, 격자와 방향 칸의 트레이드오프.
- 역 도달성과 기저 배치 — 과제 자세에서 기저 후보를 얻고 점수를 세는 방법, 정답 IK 점수와의 비교.
- 작업공간의 질 — 도달성 지수와 조작성(2.9)의 관계, 격자 부피와 볼록 껍질 부피의 차이.
선수 지식: 2.2(작업공간의 정의), 2.3(DH 순기구학), 2.5(UR형 닫힌 형식 IK), 2.9(특이점과 조작성).
특히 중요한 독자: 로봇 셀·이동 매니퓰레이터에서 팔의 기저 위치를 정하는 엔지니어, 도달성 지도와 IK 질의 비용을 비교하는 소프트웨어 개발자, 작업공간의 질을 설계 지표로 쓰려는 연구자.
출처 방침. 기준 시점은 2026-11-03이다. 직접 읽은 자료: ① ROS-Industrial Consortium의 Reuleaux README(최상위·
map_creator·base_placement_plugin; 도달성 지도·능력 지도·역 도달성 지도의 생성 절차, 격자 해상도 기본값, IKFast 사용), ② 2.2의 작업공간 정의(Modern Robotics에서 읽은 내용). 서지(Zacharias 외 2007, Vahrenkamp 외 2013, Porges 외 2014, Makhal·Goins 2018)는 Crossref 응답으로 확인했다. 읽지 못한 것: 위 논문들의 본문, Reuleaux의 소스 코드와workspace_visualization문서. 수치는 모두 이 장의 순수 파이썬 계산이다.
2.10.2 개념 — 위치마다 닿는 방향의 비율
결론부터 적으면 다음과 같다. 도달성 지도는 작업공간을 격자로 나누고 각 격자에서 엔드이펙터가 닿는 접근 방향의 비율(도달성 지수)을 저장한 표이다. 지수가 0보다 크면 그 위치에 어떤 방향으로든 닿고 1이면 모든 방향으로 닿는다. 앞의 경우가 2.2의 도달 가능 작업공간이고 뒤의 경우가 자세 임의 작업공간에 해당한다(이 장은 접근 방향만 세고 롤은 세지 않는다). 지도는 한 번 만들어 두면 "이 자세에 닿는가"를 격자 조회 한 번으로 답하고, 같은 표를 뒤집어 "이 과제들에 닿으려면 기저를 어디에 둘 것인가"를 답한다.
지도의 정확도는 세 값이 정한다. 표본 수 $N$, 격자 크기 $h$, 방향 칸의 수이다. 이 장의 UR5 측정에서 $N=10^6$일 때 격자 0.10 m·방향 칸 $6\times4\times4$ 지도는 정답 질의의 $80.8$ %(재현율)를 찾았고, 방향 칸을 $6\times2\times2$로 줄이면 $97.6$ %를 찾았다. 격자 0.05 m 지도는 $30.6$ %에 그쳤다. 지도가 정확해지려면 표본 수가 (격자 수) × (방향 칸 수)를 훨씬 넘어야 한다.
2.10.3 원리
2.10.3.1 도달성 지수와 작업공간
위치 $p$에서 접근 방향 $\hat z\in S^2$를 닿게 하는 관절 변수가 있으면 $(p,\hat z)$를 도달 가능하다고 한다. 위치 $p$의 도달성 지수는 도달 가능한 접근 방향의 입체각 비율이다.
$$D(p)=\frac{1}{4\pi}\,\mathrm{area}\bigl\{\hat z\in S^2:\ (p,\hat z)\ \text{도달 가능}\bigr\}\in[0,1].$$
$D(p)>0$인 점의 집합이 도달 가능 작업공간이고 $D(p)=1$이면 접근 방향에 관해 자세 임의이다(롤까지 임의여야 2.2의 자세 임의 작업공간이다). 작업공간의 바깥 경계에서는 팔이 완전히 펴져 특이점에 해당하고(2.9), 경계 근처에서 도달 가능한 접근 방향이 줄어 $D$가 $0$으로 간다(2.10.5 ②의 단면에서 최대 도달 거리 근처의 지수가 낮다). 격자 지도에서 $D$는 격자 $v$ 안의 방향 칸 $b$ 가운데 닿은 칸의 비율 $\lvert\{b\}\rvert/(6n^2)$로 근사한다. 방향 칸은 접근 방향을 정육면체 여섯 면의 $n\times n$ 칸으로 나눈 것이며 $n=4$에서 가운데 칸의 입체각이 $0.201$ sr, 모서리 칸이 $0.081$ sr로 같지 않으므로(비 $2.5$) 이 장의 지수는 칸 수의 비율이다. $n=2$에서는 모든 칸이 $0.524$ sr로 같다.
2.10.3.2 도달성 지도의 구성
공개된 구성 방식은 두 가지이다.
- ① 순기구학 표본. 관절 변수를 무작위로 뽑아 순기구학으로 자세를 구하고 해당 격자·방향 칸에 표시한다. IK가 필요 없으므로 모든 로봇에 사용할 수 있다. 칸이 닿지 않은 것인지 표본이 모자란 것인지 구분되지 않는다.
- ② 격자 위 자세에 IK 적용. 격자를 만들고 격자마다 여러 방향의 자세를 만든 뒤 IK 해가 있으면 닿은 것으로 표시한다. Reuleaux는 이 방식이며 해는 IKFast가 만든 것을 사용하고, 격자 해상도의 기본값은 0.08 m이다. 해상도를 낮추면 자세 수가 급격히 늘어 0.05 m 미만은 몇 시간이 걸릴 수 있다고 안내한다(README). 닫힌 형식 IK가 있는 로봇에서는 정확하지만 IK가 없으면 사용할 수 없다.
표본 방식의 수렴은 칸마다 다르다. 칸 $c$를 한 표본이 채울 확률을 $\pi_c$라 하면 $N$개 뒤에 채워져 있을 확률은 $1-(1-\pi_c)^N\approx1-e^{-N\pi_c}$이다. 작업공간의 가장자리나 방향이 한정된 칸은 $\pi_c$가 작아 늦게 채워진다. 칸이 클수록 $\pi_c$가 커서 $N$이 같아도 재현율이 높다(2.10.5 ①). 이 모형은 이 장에서 맞춰 보지 않았다.
Reuleaux는 도달성 지도 위에 능력 지도(capability map)를 더한다. 가장 바깥 구들을 원뿔로 바꿔 닿는 방향의 범위를 원뿔의 열림각으로 저장하는 방식이다(README). 이 장은 구현하지 않았다.
2.10.3.3 정확도 지표
정답 질의 집합 $\mathcal Q=\{(p_i,\hat z_i)\}$에서 정답 $y_i$는 정확한 IK 해의 존재 여부이다. 지도가 $(p_i,\hat z_i)$의 격자·방향 칸이 닿았다고 하면 $\hat y_i=1$이다.
$$\text{재현율}=\frac{\lvert\{\hat y_i=1,\ y_i=1\}\rvert}{\lvert\{y_i=1\}\rvert},\qquad\text{정밀도}=\frac{\lvert\{\hat y_i=1,\ y_i=1\}\rvert}{\lvert\{\hat y_i=1\}\rvert}.$$
재현율이 낮은 것은 표본이 모자라 닿는 칸을 놓친 것이고, 정밀도가 낮은 것은 칸이 커서 닿지 않는 자세까지 닿는다고 한 것이다. 칸을 키우면 재현율이 오르고 정밀도가 내려간다. 이 장의 정답은 접근 방향마다 롤 12개(30° 간격)를 시험해 IK 해가 하나라도 있으면 도달 가능으로 센 값이어서 롤 구간이 좁게 열리는 자세는 놓친다. 따라서 정밀도는 하한이다.
2.10.3.4 역 도달성과 기저 배치
로봇 기저 좌표에서 엔드이펙터가 닿는 자세 $T^{r}$(도달성 지도의 한 항목)과 과제 자세 $T^{w}_{\mathrm{task}}$(세계 좌표)이 주어지면 기저 자세는 다음과 같다.
$$T^{w}_{\mathrm{base}}=T^{w}_{\mathrm{task}}\,\bigl(T^{r}\bigr)^{-1}.$$
도달성 지도의 모든 항목을 이렇게 뒤집은 것이 역 도달성 지도이고(Reuleaux README의 "모든 도달 가능 자세의 역변환"), 과제 자세마다 얻은 기저 후보를 겹쳐 점수를 센 뒤 가장 점수가 높은 기저를 고른다. 같은 계산을 지도 조회로 하면 기저 후보 $b$의 점수는 $\sum_{k}\mathbf 1[(p_k-b,\hat z_k)\text{가 지도에서 닿음}]$이다. Zacharias 외(2007)가 도달성·능력 지도로 로봇의 능력을 표현했고 Vahrenkamp 외(2013)가 도달성의 역변환으로 기저 배치를 푼 것으로 알려져 있다(본문은 읽지 못했다). Reuleaux의 기저 배치 도구는 과제 자세들과 구할 기저 위치 수, 점수가 높은 구의 수를 입력으로 받는다(README).
2.10.3.5 작업공간의 질
도달성만으로는 조작이 쉬운 곳인지 알 수 없다(2.2). 위치마다 조작성(2.9)의 최댓값을 함께 저장하면 지도가 "닿는가"와 "잘 움직이는가"를 함께 준다. UR형 6R에서는 2.9의 닫힌 식으로 표본마다 $w=\lvert\det J\rvert$를 $O(1)$에 구할 수 있다. 격자 부피는 경계 칸이 부풀려지고 표본이 모자라면 비어 있는 칸이 생기므로 볼록 껍질 부피와 함께 보는 편이 안전하다(2.10.5 ⑤).
2.10.4 알고리즘
지도 만들기(N, h, n):
M ← {}
N 번 반복: q ← 관절 한계 안의 난수, (p, ẑ) ← 순기구학(q)
M[격자(p, h)] 에 방향 칸(ẑ, n) 을 추가
질의(M, p, ẑ): 방향 칸(ẑ, n) ∈ M[격자(p, h)] 이면 도달 가능
도달성 지수(M, p): |M[격자(p, h)]| / (6 n²)
기저 배치(M, 과제 {(p_k, ẑ_k)}, 기저 후보 {b}):
점수(b) ← Σ_k 질의(M, p_k − b, ẑ_k)
점수가 가장 큰 b 를 선택
격자는 딕셔너리, 질의는 한 번의 해시 조회이다. 기저 후보 $B$개와 과제 $K$개에서 지도 조회는 $BK$번이다.
2.10.5 풀이 예제 — UR5의 도달성 지도, 정답 IK와의 비교, 기저 배치
결론부터 적으면 다음과 같다. ① 정답 질의 3,000개(양성 $43.3$ %)에서 $N=10^6$의 재현율은 격자 0.20 m가 $99.2$ %(정밀도 $74.4$ %), 0.10 m·$n=4$가 $80.8$ %($90.1$ %), 0.10 m·$n=2$가 $97.6$ %($85.2$ %), 0.05 m가 $30.6$ %($93.2$ %)이다. ② 격자 0.10 m 지도의 도달 가능 부피는 $4.25$ m³, 도달성 지수 $\ge0.9$인 부피는 $0.63$ m³이고 지수와 격자 최대 $w$의 상관계수는 $0.33$이다. ③ 12개 과제의 기저 배치에서 정답 IK는 $12$개 모두 닿는 후보를 430개, 0.10 m·$n=2$ 지도는 595개를 찾았고 그 후보들의 정답 점수 평균이 $11.6$이다. ④ 질의 한 번은 정답 IK가 $1.46$ ms, 지도 조회가 $3.1$ μs이며 지도 구축은 $101$ s이다. ⑤ Pinocchio와 순기구학이 $4.5\times10^{-12}$ m 안에서 같고 집계는 numpy와 같다.
구현. voxel·dir_bin·add_sample·reach_index·lookup·pose·ik_exists·base_scores. 표본 추출, 정확도 측정, 그림은 스크립트에 있다. 2.3의 chain·dh_std, 2.5의 ik_ur, 2.9의 det_ur를 사용한다.
| 항목 | 값 |
|---|---|
| 입력 1 | UR5(UR 문서의 표준 DH 표, 2.3). 관절 변수 표본 $q\in U[-\pi,\pi]^6$(시드 53)에서 엔드이펙터 위치 $p$(공구 플랜지 원점)와 접근 방향 $\hat z$(공구 $z$축). 관절 한계는 $\pm2\pi$여서 $[-\pi,\pi]$ 표본이 모든 자세를 덮는다 |
| 입력 2 | 정답 질의: 위치 $x,y\in U[-1,1]$, $z\in U[-0.6,1.0]$ m, 방향 $\hat z$ 균등(시드 531) 3,000개. 정답은 롤 12개 가운데 하나라도 닫힌 형식 IK 해가 있는 경우 |
| 입력 3 | 지도 구성 $(h,n)$: $(0.10,4)$, $(0.05,4)$, $(0.10,2)$, $(0.20,4)$, 표본 수 $N=10^4,\ 3\times10^4,\ 10^5,\ 3\times10^5,\ 10^6$(한 표본열을 네 지도에 공통으로 사용) |
| 입력 4 | 기저 배치: 과제 12개(위치 $x\in\{0,0.15,0.30,0.45\}$, $y\in\{0,0.15,0.30\}$, $z=0.05$ m, 아래 방향 $\hat z=(0,0,-1)$, 롤 임의), 기저 후보 $(x_b,y_b)\in[-0.9,0.9]^2$ 칸 0.05 m 1,369개(높이 0). 정답 점수는 후보·과제마다 롤 12개에 IK |
| 입력 5 | 라이브러리 대조: 입력 1의 표본 100,000개 |
from math import floor, sqrt, sin, cos
def voxel(p, h):
"""위치 -> 격자 인덱스"""
return tuple(int(floor(x / h)) for x in p)
def dir_bin(z, n=4):
"""접근 방향 -> (정육면체 면, 칸 i, 칸 j), 면당 n x n칸"""
ax = max(range(3), key=lambda i: abs(z[i]))
f = 2 * ax + (z[ax] < 0)
u, v = [z[i] / abs(z[ax]) for i in range(3) if i != ax]
i = min(n - 1, int((u + 1) / 2 * n))
j = min(n - 1, int((v + 1) / 2 * n))
return f, i, j
def add_sample(M, p, z, h, n=4):
"""도달성 지도 M: {격자: {방향 칸}}"""
M.setdefault(voxel(p, h), set()).add(dir_bin(z, n))
def reach_index(M, p, h, n=4):
"""도달성 지수: 격자 안에서 닿은 방향 칸의 비율"""
return len(M.get(voxel(p, h), ())) / (6 * n * n)
def lookup(M, p, z, h, n=4):
"""(위치, 접근 방향)이 지도에서 도달 가능한가"""
return dir_bin(z, n) in M.get(voxel(p, h), ())
def pose(p, z, roll):
"""접근 방향 z, 롤 roll, 위치 p의 4x4 자세"""
a = (0.0, 1.0, 0.0)
if abs(z[0]) < 0.9:
a = (1.0, 0.0, 0.0)
d = sum(a[i] * z[i] for i in range(3))
x0 = [a[i] - d * z[i] for i in range(3)]
k = sqrt(sum(t * t for t in x0))
x0 = [t / k for t in x0]
y0 = [z[1] * x0[2] - z[2] * x0[1],
z[2] * x0[0] - z[0] * x0[2],
z[0] * x0[1] - z[1] * x0[0]]
c, s = cos(roll), sin(roll)
x = [c * x0[i] + s * y0[i] for i in range(3)]
y = [z[1] * x[2] - z[2] * x[1],
z[2] * x[0] - z[0] * x[2],
z[0] * x[1] - z[1] * x[0]]
return [[x[0], y[0], z[0], p[0]],
[x[1], y[1], z[1], p[1]],
[x[2], y[2], z[2], p[2]],
[0.0, 0.0, 0.0, 1.0]]
def ik_exists(p, z, g, rolls=12):
"""롤 표본 중 닫힌 형식 IK 해가 있는가(정답 질의)"""
for k in range(rolls):
if rb48.ik_ur(pose(p, z, 2 * math.pi * k / rolls), g):
return True
return False
def base_scores(M, tasks, bases, h, n=4):
"""기저 후보마다 도달 가능한 과제 수(지도 조회)"""
out = []
for b in bases:
rel = [([t[0][i] - b[i] for i in range(3)], t[1])
for t in tasks]
out.append(sum(lookup(M, p, z, h, n) for p, z in rel))
return out
① 표본 수·격자·방향 칸에 따른 재현율·정밀도.
| 표본 수 $N$ | 시간 (s) | 재현율 $(0.10,4)$ | 정밀도 $(0.10,4)$ | 재현율 $(0.05,4)$ | 정밀도 $(0.05,4)$ | 재현율 $(0.10,2)$ | 재현율 $(0.20,4)$ |
|---|---|---|---|---|---|---|---|
| 10,000 | 1.0 | 2.8 % | 87.8 % | 0.2 % | 60.0 % | 9.7 % | 20.4 % |
| 30,000 | 3.3 | 9.5 % | 90.4 % | 1.6 % | 87.5 % | 26.5 % | 43.6 % |
| 100,000 | 11.7 | 22.6 % | 91.6 % | 4.1 % | 93.0 % | 54.8 % | 74.2 % |
| 300,000 | 33.6 | 47.0 % | 91.6 % | 11.5 % | 91.4 % | 83.8 % | 92.8 % |
| 1,000,000 | 101.1 | 80.8 % | 90.1 % | 30.6 % | 93.2 % | 97.6 % | 99.2 % |
재현율은 표본 수에 따라 단조롭게 오르고 칸이 클수록 빨리 오른다. $N=10^6$에서 격자 0.20 m는 $99.2$ %, 방향 칸을 거칠게 한 0.10 m·$n=2$는 $97.6$ %에 이르지만 0.10 m·$n=4$는 $80.8$ %, 0.05 m는 $30.6$ %에서 아직 오르는 중이다. 정밀도는 $N\ge3\times10^4$에서 0.10 m·0.05 m가 $88\sim93$ %로 거의 일정하고 칸이 클수록 낮아진다(0.20 m에서 $74.4$ %). 정밀도의 일부는 정답이 롤 12개 표본이어서 놓친 도달 가능 자세에서 온 것으로 추정한다 (추정). 지도의 칸 수는 격자 0.10 m·$n=4$에서 $4{,}245\times96\approx4.1\times10^{5}$개이고 표본 $10^6$개가 칸당 약 2.5개에 해당한다. 0.05 m 지도는 칸이 $29{,}952\times96\approx2.9\times10^{6}$개여서 같은 표본으로는 칸당 $0.35$개이다.
② 도달성 지수의 단면과 작업공간의 질. 격자 0.10 m 지도($N=10^6$)의 $y\in[0,0.1)$ 단면이다. 기저는 왼쪽 가장자리 $z=0$에 있다.
| 도달성 지도($N=10^6$, 격자 0.10 m, 방향 칸 $6\times4\times4$) | 값 |
|---|---|
| 닿은 격자 수, 도달 가능 부피 | 4,245개, 4.25 m³ |
| 도달성 지수 $\ge0.5$인 부피 | 2.85 m³ |
| 도달성 지수 $\ge0.9$인 부피 | 0.63 m³ |
| 도달성 지수와 격자 최대 $w$의 상관계수 | 0.326 |
| 닿은 격자 중 어깨($z=d_1$)에서 가장 먼 격자 중심 거리 | 1.020 m |
| 정답 질의 양성 비율 · 질의당 IK 시간 · 지도 조회 시간 | 43.3 % (1299/3000) · 1.46 ms · 3.1 μs |
지수가 $0.9$ 이상인 격자는 기저에서 수평 거리 $0.1\sim0.4$ m, 높이 $-0.6\sim0.7$ m 범위에 모여 있고 그 부피는 도달 가능 부피의 $15$ %($0.63/4.25$)이다. 수평 거리 $0.1$ m 안쪽(축 근처)의 지수는 $0.77\sim0.83$이고, 수평 거리 $0.5$ m 이상에서는 바깥으로 갈수록 줄어 최대 도달 거리 근처에서 $0$이 된다. 격자 최대 $w$와의 상관은 $0.33$으로 약하다(격자별 최대 $w$는 그 격자에 떨어진 표본 수에도 영향을 받으므로 참고값이다). 어깨($z=d_1$)에서 가장 먼 격자 중심이 $1.02$ m인 것은 격자 크기 때문이다(격자의 절반 대각선이 $0.087$ m이다).
③ 기저 배치. 12개 과제를 모두 수행할 수 있는 기저를 찾는 문제이다. 정답은 기저 후보마다 과제당 IK를 풀어 센 점수이고, 지도는 격자 조회로 센 점수이다.
정답 점수의 분포는 $12$점 430개, $11$점 200개, $10$점 86개 등이다. 정답 최고 점수 집합은 과제 영역(점선)을 둘러싼 고리 모양이다. 이 후보들의 과제 영역 중심까지 수평 거리가 $0.25\sim0.70$ m이고, 가장 가까운 과제까지의 수평 거리는 최소 $0.1118$ m로 $d_4=0.10915$ m보다 크다. 아래 방향 접근에서 손목 중심(2.5)의 수평 위치는 과제 위치와 같으므로 반경이 $d_4$ 미만인 과제에는 닿지 못한다(2.9의 어깨 조건). 고리의 바깥 경계는 도달 거리 한계이다(가장 먼 과제까지 최대 $0.912$ m). 지도에서 얻은 점수는 바깥 경계가 정답과 비슷하지만 고리 안쪽(과제 영역 근처)까지 최고 점수를 주고 경계가 거칠다. 안쪽 한계의 반경 $d_4=0.109$ m가 격자 0.10 m와 같은 크기여서 해상되지 않는 것으로 추정한다 (추정).
| 구성(격자 m, 방향 칸 $n$) · $N=10^6$ | $(0.20,4)$ | $(0.10,4)$ | $(0.10,2)$ | $(0.05,4)$ |
|---|---|---|---|---|
| 닿은 격자 수 | 661 | 4,245 | 4,245 | 29,952 |
| 재현율 · 정밀도(질의 3,000개) | 99.2 % · 74.4 % | 80.8 % · 90.1 % | 97.6 % · 85.2 % | 30.6 % · 93.2 % |
| 기저 점수가 정답(IK)과 같은 후보의 비율 | 45.5 % | 35.1 % | 49.1 % | 9.1 % |
| 기저 점수 차이의 평균 절댓값(과제 수) | 0.91 | 1.10 | 0.69 | 5.72 |
| 지도 최고 점수 · 그 점수의 후보 수 | 12 · 683 | 12 · 286 | 12 · 595 | 11 · 1 |
| 지도 최고 후보들의 정답 점수(최소 · 평균) | 8 · 11.45 | 10 · 11.49 | 9 · 11.60 | 10 · 10.00 |
| 정답 최고 집합과 지도 최고 집합의 교집합/합집합 | 0.63 | 0.32 | 0.65 | 0.00 |
| 정답 최고 점수 12를 만족하는 후보 수 | 430 |
0.10 m·$n=2$ 지도가 기저 점수의 평균 오차(과제 $0.69$개)가 가장 작고 정답 최고 집합과의 교집합/합집합이 $0.65$로 가장 높다. 이 지도가 낸 최고 점수 후보 595개의 정답 점수는 최소 $9$, 평균 $11.60$이다. 0.05 m 지도는 지도의 표본이 모자라 최고 점수가 $11$이고 후보가 하나뿐이며 정답과 겹치지 않는다(교집합 $0.00$). 지도 조회로 기저 점수 전체(16,428번 질의)를 세는 데 $0.05$ s가 걸렸고 정답 IK로는 $14.4$ s가 걸렸다.
④ 비용. UR5처럼 닫힌 형식 IK가 있으면 질의 한 번이 $1.46$ ms이고 지도 조회는 $3.1$ μs로 약 $470$배 빠르다. 그러나 지도를 만드는 데 표본 $10^6$개에 $101$ s(네 지도와 $w$ 계산 포함)가 들어 정답 IK로 $69{,}000$번 질의하는 시간과 같다. 이 장의 기저 배치(질의 16,428번)에서는 정답 IK가 $14.4$ s로 지도 구축보다 빠르다. 닫힌 형식 IK가 없는 로봇(7자유도 등)에서는 수치 IK(2.6·2.7)가 질의당 수십 배 이상 걸려 지도의 이득이 커진다(이 장은 측정하지 않았다).
⑤ 라이브러리 대조(실행 2026-11-03). 같은 표본 100,000개에서 Pinocchio 4.1.0의 순기구학(URDF는 2.3의 수정 DH 표에서 생성), numpy의 unique(격자·방향 칸 집계), SciPy 1.18.1의 ConvexHull(볼록 껍질 부피)을 비교했다. 스크립트는 robotics/fig-src/2.10-libcheck.py, 출력은 robotics/fig-src/data/2.10-libcheck-output.txt에 있다.
| 비교(UR5, 표본 100,000개) | 이 장 | 라이브러리 |
|---|---|---|
| Pinocchio 순기구학 대비 위치 · 접근 방향 최대 차이(표본 1,000개) | 4.5e-12 m · 1.5e-11 | — |
닿은 격자 수, 격자 0.10 m (딕셔너리 대 numpy.unique) | 3,941 | 3,941 |
| 닿은 (격자, 방향 칸) 수, 격자 0.10 m | 68,951 | 68,951 |
닿은 격자 수, 격자 0.05 m (딕셔너리 대 numpy.unique) | 24,331 | 24,331 |
| 닿은 (격자, 방향 칸) 수, 격자 0.05 m | 91,646 | 91,646 |
격자 합집합 부피(0.10 m · 0.05 m) 대 볼록 껍질 부피(ConvexHull) | 3.94 · 3.04 m³ | 3.43 m³ |
Pinocchio와 위치 $4.5\times10^{-12}$ m, 접근 방향 $1.5\times10^{-11}$ 안에서 같고 격자·방향 칸 집계가 numpy와 정확히 같다. 격자 합집합 부피는 $0.10$ m에서 $3.94$ m³로 볼록 껍질($3.43$ m³)보다 크고(경계 칸이 부풀려진다) $0.05$ m에서 $3.04$ m³로 작다(표본 $10^5$개가 모자라 빈 칸이 생긴다). 격자 부피는 격자 크기와 표본 수에 따라 볼록 껍질 부피의 $0.89\sim1.15$배 사이에서 움직였다.
한계. 한 로봇(UR5), 관절 한계가 없는 구조, 아래 방향 접근 과제 12개만 측정했다. 정답이 롤 12개 표본이어서 정밀도는 하한이다. 지도의 표본은 관절공간 균등 추출이며 작업공간에 균등하지 않다(경계 칸이 늦게 채워진다). 충돌·환경 장애물·자기 충돌, 관절 한계의 영향, 7자유도 로봇, 지도를 이용한 기저의 높이·방향(요) 최적화는 다루지 않았다. 지수가 입체각이 아닌 칸 수의 비율이다. 능력 지도(원뿔)는 구현하지 않았다.
견해: 닫힌 형식 IK가 있고 질의가 수만 번 이하이면 정답 IK로 직접 점수를 세고, 지도는 IK가 비싸거나 질의가 많은 경우(수십만 번 이상, 7자유도, 환경 충돌 포함)에 만드는 것을 기본으로 둔다고 본다. 지도를 만들 때는 격자를 작게 하기보다 표본 수가 칸 수의 수십 배가 되도록 칸 수를 먼저 정하고(이 장에서는 닿은 칸당 표본이 약 $2.5$개일 때 재현율 $81$ %, 약 $10$개(0.10 m, $n=2$)일 때 $98$ %, 약 $16$개(0.20 m)일 때 $99$ %였다), 방향이 한두 가지인 과제에는 방향 칸을 거칠게 하는 편이 낫다고 본다. 근거는 이 장의 측정에서 0.10 m·$n=2$ 지도가 $n=4$ 지도보다 재현율이 $17$ %p 높고 기저 점수 오차가 작았다는 점이다. 접근 방향의 구별이 중요한 과제(좁은 각도 허용)에서는 이 판단이 달라질 수 있다.
2.10.6 설계 트레이드오프 — 도달성 지도를 어떻게 만들 것인가
공개 자료에서 확인되는 선택은 세 가지이다.
- ① 순기구학 표본(이 장). IK가 필요 없다. 표본 수가 칸 수를 훨씬 넘어야 하고 경계 칸이 늦게 채워진다.
- ② 격자 위 자세에 IK 적용(Reuleaux). 표본 수에 의존하지 않고 닿는 칸을 정확히 센다. IK가 필요하고 해상도를 낮추면 시간이 급격히 늘어난다(README의 안내).
- ③ 질의마다 IK(지도 없음). 구현이 가장 간단하고 정확하다. 질의가 많으면 시간이 든다.
| 방식 | 입력 | 장점 | 한계 | 알맞은 경우 |
|---|---|---|---|---|
| ① 표본 지도 | 순기구학, $N$, $h$, $n$ | IK 불필요, 조회 $\mu$s | 표본 수, 경계 칸 | 일반 로봇, 질의가 많은 경우 |
| ② IK 열거 지도 | IK, 격자 해상도 | 닿는 칸이 정확 | IK 필요, 해상도에 시간 급증 | 닫힌 형식 IK가 있는 로봇 |
| ③ 질의 IK | IK | 지도 구축 없음, 정확 | 질의당 ms | 질의 수만 번 이하 |
격자·방향 칸의 선택은 다음과 같다(이 장의 측정, $N=10^6$).
| 구성 | 재현율 | 정밀도 | 기저 점수 평균 오차 | 비고 |
|---|---|---|---|---|
| 격자 0.20 m, $n=4$ | $99.2$ % | $74.4$ % | $0.91$ | 칸이 커서 거칠다 |
| 0.10 m, $n=4$ | $80.8$ % | $90.1$ % | $1.10$ | 표본이 모자란다 |
| 0.10 m, $n=2$ | $97.6$ % | $85.2$ % | $0.69$ | 균형 |
| 0.05 m, $n=4$ | $30.6$ % | $93.2$ % | $5.72$ | 표본이 크게 모자란다 |
견해: 기저 배치 같은 의사결정에는 재현율과 정밀도를 함께 보고, 정답 IK로 상위 후보를 다시 확인(재순위)하는 구성을 기본으로 둔다고 본다. 근거는 이 장에서 지도가 낸 최고 점수 후보의 정답 점수가 최소 $9$~$10$이고 평균 $11.5$~$11.6$으로 정답 최고($12$)에 못 미쳤다는 점이다. 지도 후보를 정답 IK로 점검하는 비용이 후보 수십 개에 그치는 응용에서 알맞고, 후보가 많거나 IK가 비싸면 달라질 수 있다.
2.10.7 응용 축 비교
| 응용 축 | 도달성 지도가 맡는 일 | 요구 | 관련 장 |
|---|---|---|---|
| 산업·제조 | 셀 배치에서 로봇 기저 위치 결정, 도달성 점검 | 모든 과제 도달, 특이점 회피 | 2.9, 28.2 |
| 물류·이동 | 이동 매니퓰레이터의 정차 위치 선택 | 한 번의 정차로 여러 과제 | 2.15 |
| 도로 주행 | 해당하는 고유 요구 없음 | — | — |
| 서비스 | 가정용 팔의 도달 범위·접근 방향, 기저 위치 | 안전, 한정된 공간 | 2.11, 7.3 |
| 의료·헬스케어 | 수술 로봇 팔의 기저·포트 위치(원격 운동 중심 제약 포함) | 정밀도, 도달성 | 32.14 |
| 휴머노이드·범용 | 손의 도달 범위와 몸통 자세 선택 | 전신 균형과 함께 | 12.7, 7.18 |
| 필드 | 해당하는 고유 요구 없음(이동·휴머노이드 행과 같음) | — | — |
| 국방·안보 | 원리 수준에서 해당하는 고유 요구 없음 | — | — |
이 표는 이 책의 정리이며 장별 요구는 다르다.
2.10.8 관련 규격·프로토콜
| 문서 | 발행 | 무엇을 정하나 | 상세 장 |
|---|---|---|---|
| Reuleaux | ROS-Industrial Consortium(GitHub README, Google Summer of Code 프로젝트) | 도달성 지도·능력 지도·역 도달성 지도 생성, 기저 배치 도구, 격자 해상도 기본값 0.08 m, IKFast 해 사용 | 2.7 |
| 도달성·기저 배치 논문 | Zacharias 외 2007, Vahrenkamp 외 2013, Porges 외 2014, Makhal·Goins 2018 | 도달성 지도와 그 역변환(서지만 확인) | 2.11 |
| 수학 표기·기호표 | 이 책 | 동차 변환 $T^{w}_{\mathrm{base}}$ 표기 | A.2 |
2.10.9 관련 규제·인증 요구와의 연결
작업공간의 제한(안전 기능으로 팔의 움직임을 가두는 공간)과 최대 공간의 정의는 산업 로봇 안전 표준과 연결된다(27.10). 이 장의 도달성 지도는 "닿을 수 있는 곳"이고 안전 표준의 제한 공간은 "닿게 허용하는 곳"이어서 서로 다른 집합이다. 이 장은 표준의 조항을 확인하지 않았다 (확인 필요).
2.10.10 한계·유의점·미해결
- 표본의 편향. 관절공간 균등 추출은 작업공간 경계의 칸을 늦게 채운다. 표본 수가 칸 수보다 훨씬 커야 한다.
- 정답의 정의. 롤 표본 12개이므로 정밀도는 하한이다.
- 방향 칸의 입체각. $n=4$ 칸의 입체각이 같지 않아 지수는 칸 수의 비율이다.
- 관절 한계·충돌. UR5의 관절 한계는 사실상 없으므로 한계가 있는 로봇(예: 7자유도 팔)의 지도는 이 장의 결과와 다를 수 있다. 환경 충돌은 지도에 넣지 않았다.
- 기저 배치의 범위. 기저 높이와 요, 이동 시간·경로 제약은 다루지 않았다. 위치 두 자유도의 격자 탐색만 했다.
- 지도의 갱신. 로봇이 도구를 바꾸면(TCP 변경, 2.9) 지도를 다시 만들어야 한다.
2.10.11 체크포인트·연구 질문·출처
체크포인트:
- 도달성 지수 $D(p)$의 정의에서 $D=0$, $0<D<1$, $D=1$이 각각 어떤 작업공간에 해당하는지 설명하라.
- 칸 하나를 한 표본이 채울 확률이 $\pi_c$일 때 $N$개 뒤에 비어 있을 확률을 구하고, 칸을 키우면 재현율이 빨리 오르는 이유를 설명하라.
- $T_{\mathrm{base}}=T_{\mathrm{task}}T_r^{-1}$이 기저 배치의 역 도달성 식인 이유를 도달성 지도의 한 항목에서 유도하라.
- 방향 칸 $n=4$ 지도의 지수가 입체각 비율이 아닌 이유를 가운데 칸과 모서리 칸으로 설명하라.
- 격자 부피와 볼록 껍질 부피가 다른 이유 두 가지를 말하라.
연구 질문:
- 작업공간 경계의 칸을 균등하게 채우는 표본 추출(관절공간이 아닌 작업공간 기준)은 지도의 재현율을 얼마나 높이는가?
- 도달성 지수와 조작성·강성·충돌 여유를 함께 점수로 묶은 기저 배치는 도달성만 센 것에 비해 실제 과제 성능을 얼마나 높이는가?
1차 출처(조회 2026-11-03).
- ROS-Industrial Consortium, Reuleaux README(
ros-industrial-consortium/reuleaux의 최상위·map_creator·base_placement_plugin, 주 가지). 이 책에서 읽은 부분만 인용했다. - F. Zacharias, C. Borst, G. Hirzinger, "Capturing robot workspace structure: representing robot capabilities," Proc. IEEE/RSJ IROS, 3229–3236, 2007, doi:10.1109/iros.2007.4399105 — 서지만 확인.
- N. Vahrenkamp, T. Asfour, R. Dillmann, "Robot placement based on reachability inversion," Proc. IEEE ICRA, 1970–1975, 2013, doi:10.1109/icra.2013.6630839 — 서지만 확인.
- D. Porges, T. Stouraitis, C. Borst 외, "Reachability and capability analysis for manipulation tasks," Advances in Intelligent Systems and Computing, 703–718, 2014, doi:10.1007/978-3-319-03653-3_50 — 서지만 확인.
- A. Makhal, A. K. Goins, "Reuleaux: robot base placement by reachability analysis," Proc. IEEE International Conference on Robotic Computing, 137–142, 2018, doi:10.1109/irc.2018.00028 — 서지만 확인.
- Pinocchio 4.1.0, numpy 2.5.4, SciPy 1.18.1(
ConvexHull).
다음 장. 2.11는 여유자유도(영공간·과제 우선순위·관절 한계와 장애물 회피)를 다룬다. 이 장의 도달성 지도와 2.9의 조작성이 여유자유도의 영공간 운동에서 해를 고르는 기준이 된다.