Lecture 2. 운동학과 동역학
로봇이 어떻게 "움직이는지"를 수학으로 표현해봅시다.
목차
- 운동학과 동역학이란?
- 홀로노믹 vs 비홀로노믹 제약
- 좌표계와 자세 표현
- 속도 변환
- 운동학적 자전거 모델
- 동역학적 자전거 모델
- 해상 로봇의 동역학
- 수치 적분: ZOH · Euler · RK4
- 차륜형 로봇의 세 가지 모델
1. 운동학과 동역학이란?
로봇의 움직임을 수학으로 묘사할 때 두 시각을 구분합니다.
- 운동학(Kinematics) — "공간에서 어떻게 움직이는가"의 기하학적 묘사. 위치, 속도, 가속도의 관계만 다루고 힘은 따지지 않습니다. "핸들을 30° 꺾으면 어느 곡선을 그릴까?"가 운동학 질문입니다.
- 운동역학(Kinetics) — 힘과 모멘트가 어떻게 운동을 만들어내는가. "엔진이 100 N의 힘을 내면 가속도는 얼마인가?"가 운동역학 질문입니다.
- 동역학(Dynamics) — Kinematics + Kinetics. 보통 동역학이라 하면 이 둘을 합친 것을 가리킵니다.
가장 친숙한 동역학 식이 뉴턴의 제2법칙입니다. 병진(직선) 운동과 회전 운동에 동일한 형태로 적용됩니다.
$$ F = m a \qquad (\text{병진}), \qquad \tau = I \alpha \qquad (\text{회전}) $$- $m$ — 질량, "직진하기 싫어하는 정도"
- $I$ — 관성 모멘트(moment of inertia), "회전하기 싫어하는 정도". 같은 질량이라도 분포가 멀리 퍼져 있으면 $I$가 큽니다(피겨스케이팅 회전 시 팔 오므리기를 떠올려 보세요).
로봇은 적용 환경에 따라 세 부류로 나뉘고, 각각 표준 모델이 있습니다.
| 분류 | 예시 | 표준 모델 |
|---|---|---|
| 지상 (Ground) | 승용차, 모바일 로봇 | Bicycle, Differential drive |
| 공중 (Aerial) | 쿼드콥터 드론 | 6-DOF rigid body + thrust |
| 해상 (Marine) | 자율 운항선, AUV | Fossen 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)$를 모르고는 적분이 안 됩니다. 그래서 비홀로노믹입니다.
비홀로노믹 시스템의 또 다른 예는 항공기와 선박입니다. 둘 다 정지 상태에서 옆으로 갈 수 없습니다. 반면 옴니휠(omni-wheel) 로봇이나 호버크래프트는 모든 방향으로 자유롭게 움직일 수 있어 홀로노믹에 가깝습니다.
3. 좌표계와 자세 표현
로봇 운동을 기술할 때는 항상 두 좌표계가 동시에 등장합니다.
- 관성 좌표계(Inertial frame, $\{I\}$) — 공간에 고정된 기준 좌표계. 보통 지구의 한 점을 원점으로 잡습니다. "지도"라고 생각하면 됩니다. 뉴턴의 법칙은 관성 좌표계에서만 직접 성립합니다.
- 본체 좌표계(Body-fixed frame, $\{B\}$) — 로봇과 함께 움직이는 좌표계. 보통 차량의 무게중심을 원점으로 잡고 $x$축을 진행 방향, $z$축을 위쪽으로 정합니다.
왜 두 개나 필요할까요? 측정은 본체에서, 추론은 관성 좌표에서이기 때문입니다.
- 속도계, 자이로, IMU는 모두 차에 붙어 있으므로 본체 좌표 값을 줍니다.
- 지도 위 위치, 목표점, 장애물은 관성 좌표에서 정의됩니다.
- 둘 사이를 오가려면 회전 변환이 필요합니다.
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차원에서는 자세를 표현하는 가장 직관적인 방법이 세 축에 대한 회전을 차례로 적용하는 것입니다.
- Yaw $\psi$ — $z$축(수직) 회전. 자동차가 좌·우로 도는 것.
- Pitch $\theta$ — $y$축 회전. 비행기가 머리를 들거나 내리는 것.
- Roll $\phi$ — $x$축 회전. 비행기가 좌우로 기울어지는 것.
일반적인 항공·선박 표준 순서(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개만 생각하는 자전거 모델이 자율주행 분야의 표준입니다.
가정:
- 바퀴는 옆으로 미끄러지지 않는다 (no side slip)
- 저속이라 타이어와 도로의 힘은 무시할 수 있다 (=운동학적 모델)
상태 변수는 $(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 타이어 모델로 표현합니다.
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 $$- $\boldsymbol\nu$ — 본체 좌표의 6차원 속도
- $\boldsymbol\eta$ — 관성 좌표의 6차원 위치·자세
- $M$ — 질량 + 추가 질량(added mass). 물체가 움직일 때 주변 물도 함께 가속되므로 실효 질량이 커집니다.
- $C(\boldsymbol\nu)$ — 코리올리·구심력
- $D(\boldsymbol\nu)$ — 유체 저항(damping). 보통 선형 항과 $|v|v$ 비선형 항이 함께 있음
- $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 적분을 디폴트로 씁니다.
🎮 인터랙티브: 자전거 모델 운전하기
속도와 조향각을 조절하면 차가 어떻게 움직이는지 확인하세요.
코드 예제 (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가 표준이 된 이유입니다.
📖 더 깊이 공부하기
- Underactuated Robotics (MIT, Russ Tedrake) — 라그랑지안 역학, manipulator equations, 비선형 동역학을 자세히 다룹니다. 1·2·3장이 이 강의의 자연스러운 후속 학습입니다.
- Handbook of Marine Craft Hydrodynamics and Motion Control (T. Fossen) — 해상 로봇 동역학의 표준 교과서.
- Vehicle Dynamics and Control (R. Rajamani) — 동역학적 자전거 모델과 타이어 모델의 정석.
- PythonRobotics — 위의 모든 모델이 짧은 파이썬 코드로 구현되어 있습니다.