Vehicle Dynamics

  • Vehicle Dynamics(차량 동역학)은 차량에 작용하는 힘과 모멘트에 따른 차량의 움직임 모델링 한다.

Kinematics 와 Dynamics

  • Kinematic Model (운동학 모델) :
    • Kinematics은 로봇의 질량이나 힘(마찰력, 관성 등)을 고려하지 않고, 기하학적 관계에 초점을 맞추어 로봇의 움직임을 설명하는 모델.
    • 모양, 위치, 속도, 가속도 등을 고려함.
  • Dynamic Model (동역학 모델) :
    • 로봇에 작용하는 실제 힘(타이어 횡력, 하중 이동 등)과 질량, 관성 모멘트를 고려함.
    • 고속 주행이나 급격한 조향 시 발생하는 미끄러짐(Slip) 등을 계산함.

차량 좌표계

  • 일반적으로 차량 좌표계와 월드 좌표계에서의 차량 좌표계는 아래 그림과 같이 나타냄.

Bicycle Kinematic Model

개요

  • Bicycle Kinematic Model은 차량의 네 바퀴를 앞바퀴 하나, 뒷바퀴 하나로 단순화한 모델로, 아래 조건에서 계산함.
    • 차량은 rigid body(강체)임을 전재로 하며, 각 파츠들의 위치 변화가 없음.
    • 타이어의 미끄러짐(slip)이 없는 저속 상태.
    • 차량은 2차원 평면(X, Y)에서 움직임. (roll, pitch는 없고 yaw만 존재)
  • 모델의 제어 입력으로 속도(속력)와 조향각을 주면 Bicycle Model 을 통해 차량 위치의 단위 시간당 변화량()를 계산 할 수 있음.

+full

4-Wheel Steering

  • 4-Wheel Steering (4륜 조향) 모델은 전륜뿐만 아니라 후륜도 조향하여 안정성을 높이고 회전반경을 줄임.

Concept

+full

  • : 전륜, 후륜의 중심
  • : 회전 중심 (rotation center)
  • : 무게 중심 (center of gravity)
  • : 무게 중심의 속도
  • : 회전 반경 (turning radious)
  • : 슬립 각 (slip angle)
  • : 월드 좌표계로부터 차체의 각도 (heading angle)
  • : 질량 중심에서부터 까지의 거리

- Bicycle Model에서는 바퀴 미끄러짐(slip)은 고려하지 않으며, 바퀴 속도의 방향 성분은 바퀴의 방향을 따름. - $\beta$ 는 slip angle로, **차량의 heading 방향과 실제 차가 움직이는 방향 사이의 차이를 의미**함. - $\beta$는 선택한 기준점 위치에 따라 달라짐. 해당 기준점에서 차량의 속도 방향은 $\psi + \beta$로 표현됨. - 각 바퀴가 향하는 방향은 서로 다르고, 차량의 기하학적 배치로 인해 차체 축(heading)과 차량의 움직임이 서로 다름. 이때 실제 차량이 향하는 속도가 $V$ 로 대표되고, 그 각도를 $\beta$ 로 정의함. - 차량 바퀴 각도 $\delta$ 가 작아질수록 $\beta$가 감소하고(비례), 커질수록 $\mathbf{R}$은 감소한다.(반비례) - 중심 기준점(CoG)에서 구한 속도 벡터 $V$는 회전반경중심(ICR)과 CoG를 연결하는 선에 항상 직교함.

Motion Equations

  • 차량의 단위 시간당 움직임의 변화량은 월드 좌표계를 기준으로 ( ) 라고 표현할 때, 아래 식을 만족함.
전개
  • 삼각형 AOZ와 BOZ에서 각각 사진법칙을 적용하여 다음식을 도출함.
  • 위 두개의 식으로 slip angle 를 구할 수 있다.
  • Side-slip Angle ()
  • 위 두개의 식으로 단위 시간당 회전 변화량 yaw 를 아래와 같이 구함.
  • yaw ()
  • 여기서, 선속도()를 각속도()로 변환하는 물리 법칙은 아래와 같다.
  • 위 식을 이용하면 각속도는 속도를 반지름으로 나눈 것과 같으므로 아래와 같이 정리할 수 있다.

2-Wheel Steering

  • 일반적으로 실제 차량은 2-Wheel Steering (2륜 조향 - 전륜 조향) 모델로, 4륜 조향 모델을 단순화하여 정의할 수 있다.

Concept

+full +full

Motion Equations

  • 후륜 조향각인 을 0으로 두어 모델을 단순화 시킬 수 있다.
  • 다음 가정으로, 만약  와  가 매우 작은 경우라면 식이 좀 더 단순화 될 수 있다.
    • 실제 선회를 하며 주행하기 위해 Steering을 조작하는 상황에서 각도 변화는 굉장히 작다. (매우 작은 )
    • 전륜의 조향각이 작아짐에 따라 차량의 길이 방향 직선과 속도 벡터 가 이루는 각이 작아진다. (매우 작은 )
      • 혹은, 전륜만 조향할 때에는 후륜축을 기준점으로 삼아 를 생략 할 수 있다.
    • 이때, 에서 가 0에 가까워 지면 는 1에 수렴한다.
    • 에서 가 0에 가까워지면 에 매우 근사하다가 0에 수렴하므로 라 표현할 수 있다.
  • 경로 추정 및 계획 시 가장 널리 쓰이는 방식으로 전륜 조향 2-Wheel Steering 일때, 후륜축을 기준으로 삼으면 후륜은 차량 축 방향과 항상 평행이므로 속도 벡터와 차량 방향을 일치시킬 수 있어 제어 식이 단순해진다.
  • 특히 저각도에서는 slip angle 가 거의 0에 수렴하므로 기구학적 가정을 통해 계산 오류를 최소화한다.
  • 반면 고속에서 또는 물리적 연산을 위해서는 “바퀴가 미끄러지지 않는다” 라는 가정이 깨지며, 동역학(dynamics) 기반 원심력 등에 의한 질량 중심에서의 가속도와 힘을 계산해야 하므로 질량 중심점 기준 모델이 필수적이다.
  • Dynamic Models 참고 : (AD) Vehicle Dynamics - Dynamic Models

전륜 조향 모델에서 차량의 CoG 궤적이 특별히 필요하지 않다면, 후륜축 중심을 기준점으로 정의하여 모델을 구성해도 차량의 자세는 동일하다.


Ackermann Kinematic Model

개요

  • Ackermann Kinematic Model은 실제 4륜 차량이 미끄러짐 없이 부드럽게 회전하기 위해 필요한 아커만 조향(Ackermann Steering Geometry)의 원리를 반영한다.
  • Bicycle 모델은 실제 4륜 차량이 회전할 때 안쪽 바퀴와 바깥쪽 바퀴의 회전 반경이 다르다는 점을 반영하지 못하지만, Ackermann 모델은 안쪽 바퀴가 바깥쪽 바퀴보다 더 크게 꺾여야 타이어의 끌림(scrubbing)없이 순수한 운동을 할 수 있음을 반영한다.
  • ROS2와 같은 로봇 시스템에서는 상위 경로 계획 단계에서는 Bicycle 모델을 사용해 거시적인 궤적을 다루고, 이를 실제 하위 모터 드라이버나 조향 서보에 전달할 때 Ackermann Kinematic 을 적용하여 각 바퀴의 각도를 계산한다.

Front-Wheel Steering

  • 아커만 조향(Ackermann Steering) 모델은 일반적인 승용차와 같은 전륜 조향(Front-wheel Steering) 시스템의 표준적인 기하학적 모델로 간주 된다.

Concept

+full

Motion Equations

  • 일반적인 자동차 주행에서는 Bicycle 모델에서 회전 반경을 후륜축 중앙에 설정하고 궤적을 계산하므로, Ackerman 모델에서도 로 보고 일반적으로 을 회전 반경으로 이용함.
  • 차량의 모양 및 회전반경()을 이용해 아래와 같이 좌/우 바퀴각도의 관계를 구할 수 있다.
  • 여기서, 조향각이 작으면 소각도 근사에 의해 를 이용하여 아래와 같이 근사 할 수 있다.
  • 아커만 조향의 좌우 평균을 취하면 bicycle model의 대표 조향각 식이 자연스럽게 얻어진다.
  • 내/외측 조향각의 평균을 라고 할 때,
  • 일반적으로 에 비해 는 매우 작으므로 무시할 수 있다.

Kinematic Model 시뮬레이션

시뮬레이션 결과

  • Bicycle kinematic model 주행 시뮬레이터 구현

State Update

# Default parameters
v = 3.0 # 속도(m/s)
delta = 0.0 # 조향각(deg -> radian 필요)
L = 2.7 # 휠베이스 길이(m)
dt = 0.05 # 시간 간격(s)
 
# v: 속도, delta: 조향각, L: 휠베이스, dt: 시간 간격
def update(v, delta, L, dt):
	x += v * np.cos(yaw) * dt
	y += v * np.sin(yaw) * dt
	yaw += (v / L) * np.tan(delta) * dt

참고