📐 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차 다항식 궤적) 를 소개합니다. 위치와 속도뿐 아니라 가속도까지 연속이 되도록 만들어 더욱 정밀하고 부드러운 궤적을 설계하는 기법입니다.
'로봇공학기초' 카테고리의 다른 글
[로봇공학기초 / 2DOF] #7. Robot Dynamics (로봇 동역학) (0) | 2025.04.21 |
---|---|
[로봇공학기초 / 2DOF] #6-3. Trajectory Planning (Quintic Polynomial Trajectory) (0) | 2025.04.18 |
[로봇공학기초 / 2DOF] #6-1. Trajectory Planning (궤적계획) (0) | 2025.04.07 |
[로봇공학기초 / 2DOF] #5. Singularity (특이점) (0) | 2025.04.04 |
[로봇공학기초 / 2DOF] #4. Jacobian Matrix (자코비안 행렬) (0) | 2025.04.02 |