로봇공학기초

[로봇공학기초 / 2DOF] #6-2. Trajectory Planning (Cubic Polynomial Trajectory)

jhpark0518 2025. 4. 16. 10:00

📐 Cubic Polynomial Trajectory란?

이번 글에서는 궤적 생성 방식 중 하나인 Cubic Polynomial Trajectory(3차 다항식 궤적) 에 대해 알아보겠습니다.
앞서 살펴본 Trapezoidal Profile이 속도 기반의 직선적이고 단순한 궤적이었다면, Cubic Polynomial 방식은 위치와 속도를 동시에 고려하는 곡선 기반의 궤적 생성 방법입니다.

이 방식은 로봇이 출발점에서 목표점까지 이동할 때, 시작과 끝에서의 위치와 속도 조건을 만족하도록 설계됩니다. 특히, 속도와 가속도의 연속성이 보장되어 움직임이 한층 더 부드럽고 자연스럽습니다.

 

🔸 Cubic Trajectory의 특징

  • 위치 \( \theta \), 속도  \( \dot{\theta} \)에 대한 초기 및 최종 조건을 직접 설정할 수 있습니다.
  • 속도 곡선이 연속이기 때문에 중간에 급격한 변화가 없어 로봇의 진동이나 충격이 줄어듭니다.
  • 가속도는 불연속이 될 수 있지만, Trapezoidal Profile보다 훨씬 더 매끄러운 곡선 형태입니다.
  • 고속, 고정밀 작업보다는 기본적인 곡선 궤적 생성에 적합합니다.

🔸Cubic Trajectory의 수학적 표현

Cubic Polynomial Trajectory는 다음과 같은 형태의 3차 다항식으로 궤적을 구성합니다:

$$
\theta(t) = a_0 + a_1 t + a_2 t^2 + a_3 t^3
$$

이 다항식을 통해 로봇의 위치가 시간에 따라 변화하며, 이 궤적이 부드럽게 연결되도록 하기 위해 아래와 같은 4개의 경계 조건을 만족시킵니다:

  • 초기 위치 조건: \( \theta(0) = \theta_0 \) 
  • 최종 위치 조건: \( \theta(T) = \theta_f \)
  • 초기 속도 조건: \( \dot{\theta}(0) = \omega_0 \)
  • 최종 속도 조건:  \( \dot{\theta}(T) = \omega_f \)

이 네 가지 조건을 기반으로 4개의 계수 \( a_0, a_1, a_2, a_3 \)를 구할 수 있으며, 이 과정을 통해 매끄러운 궤적이 생성됩니다.

 

\begin{aligned}
a_0 &= \theta_0, \\
a_1 &= \omega_0, \\
a_2 &= \frac{3(\theta_f - \theta_0) - (2\omega_0 + \omega_f)T}{T^2}, \\
a_3 &= \frac{2(\theta_0 - \theta_f) + (\omega_0 + \omega_f)T}{T^3}.
\end{aligned}

 

🔸 그래프로 보는 Cubic Polynomial 속도 프로파일

상기 그래프를 통해 Cubic Polynomial Trajectory의 구조를 확인할 수 있습니다.

  • 각도 그래프($\theta$): 시작과 끝에서 속도가 0인 곡선 형태로, 위치가 부드럽게 증가합니다.
  • 각속도 그래프($\omega$): 속도가 시간에 따라 자연스럽게 증가하고, 중간에 최대값을 지나 감소합니다.
  • 각가속도 그래프($\alpha$): 가속도는 선형적으로 감소하는 경향을 보이며, 불연속 없이 연속적인 변화가 나타납니다.

    특히, 속도 그래프가 매끄럽게 오르내리는 형태를 통해 물리적으로 안정적인 움직임을 유도할 수 있음을 알 수 있습니다.

 

🔧 Cubic Polynomial을 사용하는 이유

  • Trapezoidal Profile보다 움직임이 더 자연스럽고 기계적 충격이 적음
  • 초기/최종 속도 설정이 자유로워, 다양한 응용 상황에 적합
  • 단, 가속도 연속성이 필요하다면 Quintic Polynomial로 넘어가는 것이 좋음

 

💻 아래는 그래프를 그릴 때 사용한 Python 코드입니다.

import numpy as np
import matplotlib.pyplot as plt

T = 1.0
t = np.linspace(0, T, 100)
theta_s = 0
theta_f = np.pi / 2

a0 = theta_s
a1 = 0
a2 = 3 * (theta_f - theta_s) / (T**2)
a3 = -2 * (theta_f - theta_s) / (T**3)

theta = a0 + a1*t + a2*t**2 + a3*t**3
omega = 2*a2*t + 3*a3*t**2
alpha = 2*a2 + 6*a3*t

fig, axs = plt.subplots(3, 1, figsize=(8, 10), sharex=True)
axs[0].plot(t, theta, color='b')
axs[0].set_ylabel("θ (rad)")
axs[0].set_title("Cubic Polynomial Interpolation")
axs[0].grid()

axs[1].plot(t, omega, color='g')
axs[1].set_ylabel("ω (rad/s)")
axs[1].grid()

axs[2].plot(t, alpha, color='r')
axs[2].set_ylabel("α (rad/s²)")
axs[2].set_xlabel("Time (s)")
axs[2].grid()

plt.tight_layout()
plt.savefig("cubic_polynomial_interpolation.png", dpi=300)

plt.show()

🔧 실행 환경

  • Python 3.8 이상
  • matplotlib
  • numpy
  • Jupyter Notebook (추천)

📘 다음 편 예고

다음 글에서는 Cubic Polynomial Trajectory를 한 단계 확장한 형태인 Quintic Polynomial Trajectory(5차 다항식 궤적) 를 소개합니다. 위치와 속도뿐 아니라 가속도까지 연속이 되도록 만들어 더욱 정밀하고 부드러운 궤적을 설계하는 기법입니다.