← 강의 목록

Lecture 2. 운동학과 동역학

로봇이 어떻게 "움직이는지"를 수학으로 표현해봅시다.

목차

  1. 운동학과 동역학이란?
  2. 홀로노믹 vs 비홀로노믹 제약
  3. 좌표계와 자세 표현
  4. 속도 변환
  5. 운동학적 자전거 모델
  6. 동역학적 자전거 모델
  7. 해상 로봇의 동역학
  8. 수치 적분: ZOH · Euler · RK4
  9. 차륜형 로봇의 세 가지 모델

1. 운동학과 동역학이란?

로봇의 움직임을 수학으로 묘사할 때 두 시각을 구분합니다.

가장 친숙한 동역학 식이 뉴턴의 제2법칙입니다. 병진(직선) 운동과 회전 운동에 동일한 형태로 적용됩니다.

$$ F = m a \qquad (\text{병진}), \qquad \tau = I \alpha \qquad (\text{회전}) $$

로봇은 적용 환경에 따라 세 부류로 나뉘고, 각각 표준 모델이 있습니다.

분류예시표준 모델
지상 (Ground)승용차, 모바일 로봇Bicycle, Differential drive
공중 (Aerial)쿼드콥터 드론6-DOF rigid body + thrust
해상 (Marine)자율 운항선, AUVFossen 6-DOF marine model

2. 홀로노믹 vs 비홀로노믹 제약

모든 로봇은 "갈 수 있는 방향"에 제약을 받습니다. 그 제약이 단순히 위치에 관한 것인지, 아니면 속도에 관한 것인지가 결정적인 차이를 만듭니다.

홀로노믹 제약 (Holonomic)

제약식이 위치 좌표만으로 표현되는 경우입니다. 예를 들어 진자의 줄 길이가 일정하다는 제약은 $x^2 + y^2 = L^2$로 위치만 가지고 적을 수 있습니다. 홀로노믹 시스템은 설정 공간(configuration space)에서 도달할 수 있는 곳을 모두 자유롭게 갈 수 있습니다.

비홀로노믹 제약 (Non-holonomic)

제약이 속도를 통해서만 표현되고 적분이 안 되는 경우입니다. 자동차가 대표적입니다. 자동차는 옆으로(차체 가로 방향으로) 직접 미끄러질 수 없습니다. 즉

$$ \dot{x}\sin\theta - \dot{y}\cos\theta = 0 $$

이라는 제약이 있고, 이 식은 $\theta(t)$를 모르고는 적분이 안 됩니다. 그래서 비홀로노믹입니다.

왜 중요한가 — 자동차는 옆으로 못 가지만, 평행 주차를 할 수는 있습니다. 이게 가능한 이유는 비홀로노믹 시스템에서도 적절한 입력 시퀀스를 주면 결국 임의의 위치·자세에 도달할 수 있다는 사실(local controllability) 덕분입니다. Russ Tedrake의 Underactuated Robotics 5장은 이런 시스템의 제어를 깊이 다룹니다.

비홀로노믹 시스템의 또 다른 예는 항공기와 선박입니다. 둘 다 정지 상태에서 옆으로 갈 수 없습니다. 반면 옴니휠(omni-wheel) 로봇이나 호버크래프트는 모든 방향으로 자유롭게 움직일 수 있어 홀로노믹에 가깝습니다.

3. 좌표계와 자세 표현

로봇 운동을 기술할 때는 항상 두 좌표계가 동시에 등장합니다.

왜 두 개나 필요할까요? 측정은 본체에서, 추론은 관성 좌표에서이기 때문입니다.

2D 회전 변환

본체 좌표 $(u, v)$의 속도(전·후, 좌·우)를 관성 좌표의 $(\dot x, \dot y)$로 바꾸는 식:

$$ \begin{bmatrix} \dot x \\ \dot y \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \;\cos\theta \end{bmatrix} \begin{bmatrix} u \\ v \end{bmatrix} $$

여기서 $\theta$는 차량이 관성 좌표에서 향하고 있는 각도(heading)입니다.

3D 자세: Roll-Pitch-Yaw (Euler angles)

3차원에서는 자세를 표현하는 가장 직관적인 방법이 세 축에 대한 회전을 차례로 적용하는 것입니다.

일반적인 항공·선박 표준 순서(ZYX)에서는 $Yaw \to Pitch \to Roll$ 순으로 회전을 적용합니다.

$$ R = R_z(\psi)\, R_y(\theta)\, R_x(\phi) $$

이 행렬을 본체 좌표 벡터에 곱하면 관성 좌표 벡터가 나옵니다. Euler angles는 직관적이지만 gimbal lock이라는 특이점이 있어, 실제 비행 제어에서는 quaternion이나 회전 행렬을 직접 사용합니다.

4. 속도 변환

병진 속도는 위에서 본 회전 행렬로 변환합니다. 각속도(angular velocity)도 관성 좌표 표현 $\boldsymbol\omega$와 본체 좌표 표현 $^B\boldsymbol\omega$가 다르며 회전 행렬로 연결됩니다.

$$ \boldsymbol\omega = R \, {}^B\!\boldsymbol\omega $$

2D 평면 운동에서는 $\dot\theta$가 곧 yaw 각속도이므로 단순합니다.

5. 운동학적 자전거 모델 (Kinematic Bicycle)

실제 자동차는 바퀴가 4개이지만 좌우 대칭이므로, 가운데에 있는 가상의 앞바퀴 1개와 뒷바퀴 1개만 생각하는 자전거 모델이 자율주행 분야의 표준입니다.

가정:

상태 변수는 $(x, y, \theta)$ — 평면 위 위치와 heading. 입력은 $(v, \delta)$ — 속도와 조향각. 그러면:

$$ \dot x = v\cos\theta, \quad \dot y = v\sin\theta, \quad \dot\theta = \frac{v}{L}\tan\delta $$

여기서 $L$은 앞·뒷바퀴 사이 거리(축거, wheelbase). 마지막 식에서 회전 반경은

$$ R = \frac{L}{\tan\delta} $$

으로 결정됩니다. 즉 같은 조향각이라도 축거가 길수록 회전 반경이 커집니다 — 대형 트럭이 코너에서 크게 도는 이유입니다.

6. 동역학적 자전거 모델 (Dynamic Bicycle)

고속에서는 타이어와 노면 사이의 횡력(lateral force)이 무시할 수 없을 정도로 커집니다. 이때는 힘을 직접 다루는 동역학적 자전거 모델이 필요합니다.

상태 변수는 운동학 모델보다 늘어나서 $(x, y, \theta, v_x, v_y, \dot\theta)$ — 본체 좌표의 전·후·각속도까지 포함합니다. 입력은 (앞바퀴 조향각 $\delta$, 가속력 $F_x$). 운동 방정식은 다음과 같은 형태입니다.

$$ m\,\dot v_y = -m v_x \dot\theta + F_{yf}\cos\delta + F_{yr} $$ $$ I_z\,\ddot\theta = l_f\,F_{yf}\cos\delta - l_r\,F_{yr} $$

여기서 $F_{yf}, F_{yr}$은 앞·뒷바퀴의 횡력으로, 보통 슬립 각도(slip angle)에 비례하는 선형 모델이나 비선형 Pacejka 타이어 모델로 표현합니다.

언제 어느 모델을 쓸까? 약 5 m/s 이하의 저속(주차장, 좁은 운하, 모바일 로봇)에서는 운동학적 모델로 충분합니다. 고속도로 주행이나 코너 컷팅 같은 동적 상황에서는 동역학적 모델이 필요합니다. 자율주행 연구에서는 보통 운동학 모델로 경로 계획을 하고, 동역학 모델로 저수준 제어를 합니다.

7. 해상 로봇의 동역학

SAIL 연구실에서 다루는 12인승 자율 운항선 같은 해상 로봇은 자동차보다 훨씬 복잡합니다. 물의 저항, 부력, 추가 질량 같은 효과가 모두 한 식 안에 들어옵니다.

해양공학의 표준은 Fossen의 6자유도 선박 모델입니다 (전·후·상·하·roll·pitch·yaw 6개 운동).

$$ M\,\dot{\boldsymbol\nu} + C(\boldsymbol\nu)\,\boldsymbol\nu + D(\boldsymbol\nu)\,\boldsymbol\nu + g(\boldsymbol\eta) = \boldsymbol\tau $$

예시 사양: 길이 7.9 m, 폭 2.6 m, 질량 약 2,100 kg, 150 hp 모터. 이런 배가 폭 2.6 m 운하에서 안전하게 다니려면 위 방정식을 정확히 풀어서 제어해야 합니다.

8. 수치 적분 — 미분방정식 컴퓨터로 풀기

위에서 본 모든 모델은 $\dot{\mathbf x} = f(\mathbf x, \mathbf u)$ 형태의 연속 시간 미분방정식입니다. 컴퓨터는 연속 시간을 다룰 수 없으니 작은 시간 간격 $\Delta t$로 잘라야 합니다.

입력의 가정: Zero-Order Hold (ZOH)

일반적으로 한 번 계산한 제어 입력은 다음 샘플 시각까지 그대로 유지된다고 가정합니다. 이를 0차 유지(zero-order hold)라 하고, 디지털 제어의 표준 가정입니다.

오일러 방법 (Euler's Method)

가장 단순한 방법: 현재 점의 기울기를 구해 그대로 한 스텝 전진합니다.

$$ \mathbf x_{k+1} = \mathbf x_k + f(\mathbf x_k, \mathbf u_k) \,\Delta t $$

구현이 한 줄이지만, 한 스텝의 오차가 $O(\Delta t^2)$이고 누적 오차는 $O(\Delta t)$로 큽니다. 곡선 운동에서 빠르게 발산할 수 있습니다.

룽게-쿠타 4차 (Runge-Kutta 4, RK4)

한 스텝 안에서 4번 기울기를 평가해 평균을 냅니다.

$$ \begin{aligned} k_1 &= f(\mathbf x_k, \mathbf u_k) \\ k_2 &= f(\mathbf x_k + \tfrac{\Delta t}{2} k_1, \mathbf u_k) \\ k_3 &= f(\mathbf x_k + \tfrac{\Delta t}{2} k_2, \mathbf u_k) \\ k_4 &= f(\mathbf x_k + \Delta t\, k_3, \mathbf u_k) \\ \mathbf x_{k+1} &= \mathbf x_k + \tfrac{\Delta t}{6}(k_1 + 2 k_2 + 2 k_3 + k_4) \end{aligned} $$

계산량은 4배지만 한 스텝의 오차가 $O(\Delta t^5)$로 극적으로 작아집니다. 대부분의 로봇 시뮬레이터(Drake, MuJoCo, Gazebo)가 RK4 또는 더 정교한 implicit 적분을 디폴트로 씁니다.

핵심 직감 — $\Delta t$를 절반으로 줄이면 Euler의 오차는 1/2이지만 RK4의 오차는 1/16이 됩니다. 그래서 RK4는 큰 $\Delta t$에서도 정확하고, 실시간 시스템에서 계산량을 아낄 수 있습니다. 아래 데모에서 직접 확인해보세요.

🎮 인터랙티브: 자전거 모델 운전하기

속도와 조향각을 조절하면 차가 어떻게 움직이는지 확인하세요.

코드 예제 (Python)

import numpy as np
import matplotlib.pyplot as plt

def f(x, u, L=2.5):
    """운동학적 자전거 모델: dx/dt = f(x, u)"""
    v, delta = u
    return np.array([
        v*np.cos(x[2]),       # ẋ
        v*np.sin(x[2]),       # ẏ
        v/L*np.tan(delta),    # θ̇
    ])

def euler(x, u, dt):
    return x + f(x, u)*dt

def rk4(x, u, dt):
    k1 = f(x, u)
    k2 = f(x + dt/2*k1, u)
    k3 = f(x + dt/2*k2, u)
    k4 = f(x + dt*k3, u)
    return x + dt/6*(k1 + 2*k2 + 2*k3 + k4)

x = np.array([0., 0., 0.])
traj = [x.copy()]
for _ in range(200):
    x = rk4(x, (5.0, 0.1), 0.05)    # v=5 m/s, δ=0.1 rad
    traj.append(x.copy())
traj = np.array(traj)
plt.plot(traj[:,0], traj[:,1]); plt.axis('equal'); plt.show()

9. 차륜형 로봇의 세 가지 운동학 모델

같은 "바퀴 달린 로봇"이라도 구동 방식에 따라 운동학이 다릅니다. PythonRobotics의 차량 모델을 참고해 세 가지를 비교합니다.

모델예시운동학
유니사이클 (Unicycle)외바퀴, 단순 이동 로봇$\dot x = v\cos\theta,\;\dot y = v\sin\theta,\;\dot\theta = \omega$
차동 구동 (Differential)룸바, TurtleBot$v=(v_R+v_L)/2,\;\omega=(v_R-v_L)/L$
자전거 (Bicycle)자동차, 자전거$\dot\theta = (v/L)\tan\delta$

🎮 인터랙티브: 차동 구동 로봇

좌·우 바퀴 속도를 따로 조절합니다. 두 속도가 같으면 직진, 다르면 회전. 한쪽이 음수면 제자리 회전이 가능합니다 (자동차는 못 함!).

🎮 인터랙티브: 오일러 vs RK4 정확도

2차 진동 시스템 $\ddot x = -x$ (해석해는 정확한 단위원)을 두 방법으로 적분합니다. Euler는 매 스텝 약간씩 바깥으로 새어나가 나선형으로 발산하고, RK4는 단위원 위에 거의 정확히 머무릅니다. $\Delta t$를 0.4까지 키워보세요 — Euler가 한 바퀴도 못 도는 것이 보입니다.

$\Delta t = 0.4$로 두면 Euler는 한 바퀴도 못 돌아 폭발합니다. RK4는 $\Delta t$를 키워도 단위원 근처에 머무릅니다. 이게 바로 RK4가 표준이 된 이유입니다.

📖 더 깊이 공부하기