상태: 초안 (2026-10-18), 실측. 숫자는 노트북(Apple M1 Max, macOS 26.5)의 Python 3.9.6·numpy 2.0.2 로 직접 계산했습니다. 원자료와 코드: 작업 디렉터리
measure/robot-arm-basics/의m08_traj.py,out/m08_traj.json. 관절 속도·가속도 한계와 관성은 가정값이며 실제 모터로 잰 값이 아닙니다(하드웨어 미실측). 참고 자료는 2026-10-18 에 열람했습니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」, 확인하지 못한 것은 「미확인」으로 표시합니다.
목차
1. 직관: 운전과 같다
신호등에서 다음 신호등까지 가는 방법은 여러 가지입니다. 가속 페달을 끝까지 밟았다가 마지막에 급정거하면 가장 빨리 도착하지만 승객이 앞으로 쏠립니다. 천천히 밟고 천천히 떼면 편하지만 조금 늦습니다. 로봇 관절도 같습니다. 같은 거리를 같은 시간에 가더라도 속도의 모양에 따라 모터가 내야 하는 최고 속도와 토크, 그리고 팔이 받는 충격이 달라집니다.
탁구 로봇의 궤적에는 특별한 요구가 하나 더 있습니다. 멈춘 자리에 도착하는 것이 아니라, 정해진 시각에 정해진 속도로 지나가야 합니다. 7편이 정한 라켓 속도를 타격 순간에 내야 하기 때문입니다.
2. 그림: 속도의 모양
3. 계산
3.1 다항식 시간 스케일링
관절 하나가 q0 에서 q1 까지 시간 T 에 갈 때, τ = t/T 를 써서 q(t) = q0 + (q1 − q0)·s(τ) 로 씁니다. s 는 0 에서 1 로 가는 함수입니다.
3차: s = 3τ² − 2τ³ 끝점 조건: 위치·속도 (4개)
5차: s = 10τ³ − 15τ⁴ + 6τ⁵ 끝점 조건: 위치·속도·가속도 (6개)
Modern Robotics 9.2.2.1 절은 3차의 최고 속도가 (3/2)·Δ/T(가운데에서), 최고 가속도가 6·Δ/T²(양 끝에서)라고 적습니다. 3차는 출발 순간 가속도가 0 에서 6Δ/T² 로 갑자기 바뀌므로 저크(jerk, 가속도의 변화율)가 그 순간 무한대이고, 같은 절은 이것이 진동을 일으킬 수 있다고 설명합니다. 5차는 끝점 가속도까지 0 으로 맞춰 이 문제를 없앱니다. 5차의 최고 속도 15/8·Δ/T 와 최고 가속도 10/√3·Δ/T² 는 책 본문이 아니라 연습문제로 남겨져 있어 직접 계산했고, 4절에서 수치로 확인합니다.
3.2 최소 저크와 최소 가속도
5차 다항식에는 다른 이름이 있습니다. 정지에서 정지로 가는 모든 매끄러운 궤적 가운데 저크 제곱의 적분을 가장 작게 하는 궤적입니다. 변분법으로 보면 ∫(q⃛)² 를 최소화하는 함수는 q⁽⁶⁾ = 0 을 만족하므로 5차 다항식이고, 끝점 조건 6개가 계수를 하나로 정합니다(우리 유도). Flash 와 Hogan(1985)은 사람의 손 움직임이 손 저크 제곱의 적분을 최소화하는 모델로 잘 설명된다고 보고했습니다(초록에서 확인, 본문 미확인).
같은 논리로 가속도 제곱의 적분을 최소화하면 q⁽⁴⁾ = 0 이라 3차 다항식이 나옵니다. Koç 외 2018 의 탁구 로봇은 이 기준으로 관절마다 3차 다항식 궤적을 최적화했습니다. 가속도 제곱은 토크 제곱, 곧 모터의 구리 손실(열)에 비례하므로 에너지 관점의 선택입니다.
3.3 사다리꼴과 S-곡선, 그리고 시간 최적
속도 한계 v_max 와 가속도 한계 a_max 만 있을 때 가장 빠른 운동은 「최대로 가속 → 최고 속도 유지 → 최대로 감속」 입니다. 속도 곡선이 사다리꼴이라 사다리꼴 프로파일이라 부르고, 거리가 짧아 최고 속도에 닿지 못하면 삼각형(뱅뱅)이 됩니다.
Δ ≤ v_max²/a_max: T_opt = 2·√(Δ / a_max) (삼각형)
그 밖: T_opt = Δ / v_max + v_max / a_max (사다리꼴)
사다리꼴도 가속도가 계단처럼 바뀌어 저크가 무한대입니다. 가속도 변화까지 제한하면 가속 구간이 다시 세 토막으로 나뉜 7구간 S-곡선이 됩니다 (Modern Robotics 9.2.2.3 절).
3.4 타격 궤적: 끝 속도가 0 이 아니다
탁구 로봇의 관절 궤적은 두 토막입니다.
- 휘두르기: 지금 상태(정지)에서 타격 시각 T 에 (q_h, q̇_h, q̈ = 0) 으로. 타격 순간 가속도를 0 으로 두면 접촉하는 짧은 시간 동안 라켓 속도가 거의 일정합니다.
- 멈추기(팔로스루): 그 상태에서 다시 정지로.
5차 다항식은 끝점 조건 6개를 아무 값으로나 줄 수 있으므로 이 두 토막을 모두 같은 함수로 만듭니다. 6×6 선형 연립방정식 한 번이면 계수가 나오고, 이 계산은 7.2 µs 였습니다. Mülling 외 2013 이 동적 운동 원형(DMP)의 목표 이동을 5차 다항식으로 바꿔 끝점 속도·가속도까지 맞춘 것도 같은 이유입니다(3.2 절, 식 8).
def quintic_coeffs(q0, v0, a0, q1, v1, a1, T):
A = [[1, 0, 0, 0, 0, 0 ],
[0, 1, 0, 0, 0, 0 ],
[0, 0, 2, 0, 0, 0 ],
[1, T, T**2, T**3, T**4, T**5 ],
[0, 1, 2*T, 3*T**2, 4*T**3, 5*T**4 ],
[0, 0, 2, 6*T, 12*T**2, 20*T**3]]
return np.linalg.solve(A, [q0, v0, a0, q1, v1, a1]) # q(t) = Σ c_k t^k
공 예측이 고쳐지면 지금 상태(위치·속도·가속도)를 새 출발점으로 삼아 남은 시간에 대해 다시 풀면 됩니다. 출발점의 가속도까지 이어 붙이므로 고칠 때도 가속도가 튀지 않습니다.
4. 실측
4.1 같은 거리, 같은 시간, 다른 모양
Δ = 1 rad 를 T = 0.3 s 에 옮기는 네 가지 궤적을 10만 1개 점으로 샘플해 수치 미분했습니다.
| 궤적 | 최고 속도 | 최고 가속도 | 출발 순간 가속도 | 최고 저크(내부) | ∫가속도² dt |
|---|---|---|---|---|---|
| 3차 | 5.00 rad/s | 66.7 rad/s² | 66.7 | 457 rad/s³ | 444 |
| 5차(최소 저크) | 6.25 | 64.2 | 0.01 | 2,262 | 635 |
| 사다리꼴(1/3씩) | 5.00 | 50.0 | 50.0 | (계단) | 500 |
| S-곡선(저크 구간 10%) | 5.00 | 71.4 | 0.03 | 2,385 | 612 |
공식값은 3차 5.0·66.7, 5차 6.25·64.15·2,222(저크), 사다리꼴 5.0·50.0 입니다. 수치 미분 결과가 공식과 맞았습니다(5차 저크는 차분 오차로 2% 큼).
- 매끄러움에는 값이 있습니다. 5차는 출발 가속도를 0 으로 만드는 대신 최고 속도가 3차보다 25% 높습니다.
- ∫가속도² 는 3차가 가장 작습니다. 3.2 절의 말 그대로입니다. 토크 제곱(열)을 아끼려면 3차, 진동을 아끼려면 5차입니다.
- 관성 0.03 kg·m² 짜리 관절로 바꾸면 최고 토크는 3차 2.0, 5차 1.9, 사다리꼴 1.5, S-곡선 2.1 N·m 입니다. 사다리꼴이 최고 토크로는 가장 가볍습니다.
4.2 한계 안에서 얼마나 빨리 갈 수 있나
관절 한계(v_max, a_max)가 주어졌을 때 각 궤적의 최소 시간을 비교했습니다.
| 한계 | Δ | 시간 최적 | 5차 | 3차 | 5차 ÷ 최적 |
|---|---|---|---|---|---|
| 20 rad/s, 300 rad/s² | 0.2 rad | 0.052 s | 0.062 s | 0.063 s | 1.20 |
| 20 rad/s, 300 rad/s² | 1.0 rad | 0.115 s | 0.139 s | 0.141 s | 1.20 |
| 20 rad/s, 300 rad/s² | 2.0 rad | 0.167 s | 0.196 s | 0.200 s | 1.18 |
| 10 rad/s, 100 rad/s² | 1.0 rad | 0.200 s | 0.240 s | 0.245 s | 1.20 |
| 10 rad/s, 100 rad/s² | 2.0 rad | 0.300 s | 0.375 s | 0.346 s | 1.25 |
5차 다항식은 시간 최적보다 대체로 20% 느립니다. 가속도 한계에 묶이는 짧은 이동에서는 그 비율이 √(10/√3 ÷ 4) = 1.20 으로 일정합니다(우리 계산). 1편의 시간 예산이 빠듯한 빠른 공에서는 이 20% 가 아깝습니다. 그래서 시간 최적에 가까운 궤적(사다리꼴·S-곡선, 또는 한계를 제약으로 둔 최적화)을 쓰고, 매끄러움은 S-곡선의 저크 제한으로 챙깁니다.
4.3 타격 궤적의 최소 시간
정지에서 출발해 Δ 를 지나는 순간 q̇_h 에 닿는 궤적을, 속도 한계 20 rad/s 와 가속도 한계 300·600 rad/s² 안에서 가장 짧게 만들었습니다. 5차는 이분법으로 가장 짧은 T 를 찾았고, 시간 최적은 「최대 가속 → (필요하면) 최대 감속으로 q̇_h」 꼴에서 찾았습니다.
| Δ | q̇_h | a_max | 5차 T | 시간 최적 T | 멈추는 데 더 도는 각·시간 |
|---|---|---|---|---|---|
| 0.3 rad | 10 rad/s | 300 | 0.054 s | 0.046 s | 0.17 rad, 33 ms |
| 0.6 rad | 10 rad/s | 300 | 0.082 s | 0.068 s | 0.17 rad, 33 ms |
| 0.6 rad | 10 rad/s | 600 | 0.062 s | 0.051 s | 0.08 rad, 17 ms |
| 0.6 rad | 15 rad/s | 300 | 0.076 s | 0.064 s | 0.38 rad, 50 ms |
| 1.0 rad | 15 rad/s | 300 | 0.102 s | 0.085 s | 0.38 rad, 50 ms |
- 같은 0.6 rad 라도 끝 속도가 빠른 궤적(15 rad/s)이 느린 궤적(10 rad/s)보다 짧게 걸렸습니다. 정지에서 출발해 계속 가속하면 되기 때문입니다. 반대로 느리게 지나가려면 중간에 감속해야 합니다.
- 타격 뒤 멈추는 데 필요한 각 q̇_h²/(2·a_max) 를 작업 공간에 미리 남겨 두어야 합니다. 15 rad/s 에서 0.38 rad(22°)입니다. 관절 한계 바로 앞에서 치면 멈출 자리가 없습니다.
- 1편의 시간 예산과 이으면, 휘두르기에 0.05~0.1초가 듭니다. 가속도 한계를 300 에서 600 rad/s² 로 두 배로 하면 약 25% 줄어듭니다. 5편의 속도 한계와 함께, 가속도 한계(곧 토크 ÷ 관성)가 모터 선정의 두 번째 숫자입니다.
4.4 경유점: 멈출까, 이어 갈까
관절이 여러 경유점을 지나야 할 때 두 방법을 비교했습니다. (a) 경유점마다 멈추는 5차 구간, (b) 경유점에서 멈추지 않는 3차 스플라인(양 끝 속도 0)입니다. 스플라인은 구간 시간을 같게 나누는 방법과 이동 거리의 제곱근에 비례하게 나누는 방법을 둘 다 썼고, 한계(20 rad/s, 300 rad/s²) 안의 최소 총시간을 이분법으로 찾았습니다.
| 경유점(rad) | 멈추는 5차 | 스플라인(같은 간격) | 스플라인(√거리 비례) |
|---|---|---|---|
| 0 → 0.3 → 0.7 → 1.0(한 방향) | 0.240 s | 0.170 s | 0.184 s |
| 0 → 0.6 → 0.2 → 1.0(되돌아옴) | 0.319 s | 0.357 s | 0.325 s |
한 방향으로 가는 경로에서는 멈추지 않는 편이 29% 빨랐지만, 방향이 바뀌는 경로에서는 어차피 그 자리에서 속도가 0 이 되어야 하므로 멈추는 5차가 오히려 빨랐습니다. 스플라인이 늘 빠르다는 직관은 틀릴 수 있고, 구간 시간을 어떻게 나누느냐가 모양만큼 중요합니다(Modern Robotics 9.3 절이 경유점 다항식을 다룹니다).
5. 한계
- 관절마다 따로 계획했습니다. 여러 관절을 같은 시각에 맞추려면 가장 느린 관절에 맞춰 나머지를 늘립니다(동기화). 이 글은 하지 않았습니다.
- 한계를 상수로 두었습니다. 실제 토크 한계는 자세(중력, 관성 결합)와 속도(모터 토크-속도 곡선)에 따라 바뀝니다. 9편에서 2링크 팔의 역동역학 최대 토크를 잽니다.
- 관절 공간 궤적만 다뤘습니다. 라켓이 공간에서 직선을 그리게 하는 작업 공간 궤적은 매 순간 역기구학을 풀어야 하고 특이점을 지날 수 있습니다(미실측).
6. 정리
- 3차는 출발 가속도가 튀고, 5차(최소 저크)는 매끄러운 대신 최고 속도가 25% 높습니다. 3차는 ∫가속도²(열)를, 5차는 ∫저크²(진동)를 최소화합니다.
- 한계 안에서 5차는 시간 최적보다 약 20% 느립니다.
- 탁구의 관절 궤적은 「정해진 시각에 정해진 속도로 지나가기」 + 「멈추기」 두 토막이고, 5차 다항식 하나로 둘 다 만들 수 있습니다. 예측이 바뀌면 지금 상태에서 다시 풉니다.
- 휘두르기 시간과 멈출 자리를 정하는 것은 가속도 한계입니다.
티티 한마디. 라켓은 멈출 데가 아니라 지나갈 데를 향해 휘둘러요. 그리고 친 다음에 멈출 자리도 꼭 남겨 둬야 해요. 안 그러면 팔이 벽에 부딪혀요!
참고
모든 자료는 2026-10-18 에 열람했습니다.
- Lynch, Park, Modern Robotics, 2017, 공개 프리프린트, 9장(9.2.2.1 다항식, 9.2.2.2 사다리꼴, 9.2.2.3 S-곡선, 9.3 경유점, 9.4 시간 최적).
- Flash, Hogan, The coordination of arm movements: an experimentally confirmed mathematical model, J. Neuroscience 5(7) (1985) 1688–1703, 초록(Europe PMC).
- Koç, Maeda, Peters, Online optimal trajectory generation for robot table tennis, RAS 105 (2018), 저자 공개본.
- Mülling 외, Learning to select and generalize striking movements in robot table tennis, IJRR 32(3) (2013), 저자 공개본, 3.2 절.