TT Lab
요금제

한국어

시작하기
블로그

블로그

궤적 생성: 3차·5차 다항식, 사다리꼴, 최소 저크, 한계 안의 최소 시간, 경유점

상태: 초안 (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. 그림: 속도의 모양

정지→정지 이동의 속도 모양(Δ와 T 로 정규화) 0 0.25 0.5 0.75 1 0 0.5 1 1.5 2 시간 t/T 속도 ÷ (Δ/T) 5차(최소 저크) 최고 1.875 3차 최고 1.5 사다리꼴 1.5 S-곡선 3차는 출발 순간 가속도가 0 이 아니다(6Δ/T²로 튐). 5차와 S-곡선은 0 에서 시작한다. 같은 시간이면 매끄러울수록 최고 속도가 높아진다.
그림: 3차, 5차, 사다리꼴, S-곡선 궤적의 정규화된 속도 곡선

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 이 아니다

탁구 로봇의 관절 궤적은 두 토막입니다.

  1. 휘두르기: 지금 상태(정지)에서 타격 시각 T 에 (q_h, q̇_h, q̈ = 0) 으로. 타격 순간 가속도를 0 으로 두면 접촉하는 짧은 시간 동안 라켓 속도가 거의 일정합니다.
  2. 멈추기(팔로스루): 그 상태에서 다시 정지로.

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

공 예측이 고쳐지면 지금 상태(위치·속도·가속도)를 새 출발점으로 삼아 남은 시간에 대해 다시 풀면 됩니다. 출발점의 가속도까지 이어 붙이므로 고칠 때도 가속도가 튀지 않습니다.

타격 궤적: 0.12초 만에 10 rad/s 로 지나고, 0.1초에 멈춘다 0 0.1 0.2 0.3 0 4 8 12 시간(초) 속도(rad/s) 0 0.4 0.8 1.2 각(rad) 타격 속도 각 구간 1: (0, 0, 0) → (0.6 rad, 10 rad/s, 0) 5차. 구간 2: 같은 상태 → 정지 5차. 타격 순간 가속도를 0 으로 두어 라켓 속도가 접촉 동안 거의 일정하다.
그림: 타격 궤적의 관절 각과 속도: 0.12초에 10 rad/s 로 지나고 0.1초 동안 멈춤

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% 큼).

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

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. 한계

6. 정리

티티 한마디. 라켓은 멈출 데가 아니라 지나갈 데를 향해 휘둘러요. 그리고 친 다음에 멈출 자리도 꼭 남겨 둬야 해요. 안 그러면 팔이 벽에 부딪혀요!

참고

모든 자료는 2026-10-18 에 열람했습니다.

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다