Car Kinematics

로봇에 대해 자료를 조사하다 보면 로봇카에 대한 내용이 많다. 아무래도 알고리즘 테스트가 다른것에 비해 용이하고, 실제 제작하여 실증해보기 편하기 때문일 것이다. 이번 포스팅은 이와 관련하여 기본적 주행로봇/자동차의 dynamics에 대해 다루고자 한다.

Unicycle

곡예사가 바퀴가 하나달린 자전거를 타는 것을 상상해 보자. 이 자전거를 해석하는 것이  위 그림과 같은 unicycle에 대한 모델이다. 하나의 바퀴가 회전하는 속도는 속력과 비례관계에 있으며, 바퀴의 각속도를 u라고 할때, 주행거리는 s=ru이다. 여기서, r은 바퀴의 반지름이다.  Unicycle의 주행방향(바퀴의 방향)과 x축과 이루는 각을 \theta라고 할때, unicycle의 x및 y축의 위치변화율와 주행각도의 변화율은 아래와 같다.

car-kinematics-unicycle

 \dot{x} = v cos(\theta)     \dot{y} = v sin(\theta)     \dot{\theta} = \omega

여기서, \omega는 unicycle의 회전각속도를 의미한다. 이 식들은 자동차와 주행로봇의 위치변화 및 주행방향(heading)을 해석하기 위한 기본식이며, 주목할 점은 주행 및 방향의 전환을 일으키는 기계부품(바퀴 및 조향장치)의 조작과 자동차나 로봇 전체의 위치 및 방향변화와의 관계를 규정한다는 점이다.

Differential drive

네개의 바퀴가 있는 자동차와 달리, 우리가 보는 로봇은 주로 두개의 바퀴만 가지고 운행되는것이 많다. 각각의 바퀴에는 별도로 움직이는 모터가 장착되어 있고, 로봇이 넘어지는 것을 막기위해 자체 구동력이 없는 바퀴가 하나 더 있다. 이러한 로봇은 자동차와는 달리 방향전환과 주행속력의 제어가 바퀴의 상대적 회전속력과 관련있다. 즉, 왼쪽 바퀴의 회전속력과 오른쪽 바퀴의 회전 속력차이는 방향전환을 의미한다.

두 바퀴의 각속도(angular velocity)는  (u_r , u_l )로 표기하고 각 바퀴가 회전하는 속도를 단위시간(초)당 각속도를 의미한다. 각 바퀴의 구동에 따른 주행거리나 회전각도를 계산하기 위해서 필요한 패러미터는 각 바퀴의  반경(r)과 바퀴간의 거리를 나타내는  L 값이다. 만약 왼쪽과 오른쪽 바퀴의 각속도가 같다면, 로봇은 직선방향으로 주행할 것이고, 그 값이 서로 다르다면 방향전환을 하면서 주행하게 된다.

이러한 개념을 기반으로 각 바퀴의 각속도와 위치변화의 관계를 유도해 보면 다음과 같은 식으로 표현할 수 있다. (arc length는 각속도와 반경에 비례하므로 로봇의 바퀴축의 중간지점을 로봇의 원점으로 잡아 계산한다.)

 \dot{x} = \frac{r}{2} (u_r + u_l) cos (\theta)

 \dot{y} = \frac{r}{2} (u_r + u_l) sin (\theta)

 \dot{\theta} = \frac{r}{L} (u_r - u_l)

위 식에는 회전하는 두 바퀴의 축중심이 로봇의 원점으로 잡고 그 지점의 각속도는 양 바퀴의 각속도의 평균이라는 개념과 두 바퀴의 각속도 차가 로봇의 방향전환(turn)을 결정한다는 개념이 포함되어 있다.

Bicycle Model

이제 실제 자동차와 같은 메카니즘으로 움직이는 물체에 대한 해석을 해보자. 자동차는 사실 자전거가 나란히 달리는 장치라고 생각할 수 있다. 즉 한쌍의 bicycle의 거동해석이 자동차 해석에 사용될 수 있다. 앞서 말한 바와 같이 cartesian coordinate space에서 자동차의 위치 및 방향, (x,y,\theta)을 구하고자 한다. 먼저, 앞뒤바퀴의 거리를 L로 하고 heading direction 방향을 \theta, 주행하는 속도를 v라고 정의 한다.

이러한 로봇을 해석하기 위해서 아래 그림과 같이 개념을 잡고 해석한다. (아래 그림은 차용한 것이지만, 각도중에 90-\alpha라고 표기한 부분은 \pi/2-\alpha로 수정해야 한다. 개념해석에는 문제가 없지만 아래 그림의 모든 각도는 radian기준이므로 degree값을 혼용해서는 안된다.) 로봇의 각속도(angular velocity)는 아래와 같은 식으로 나타난다. 

\dot{\theta}= v/R

여기서, R는 회전 반경이다. 위 오른쪽 그림을 보면 아래와 같은 식을 생각할 수 있다.

tan(\alpha) = \frac {L}{R}

위의 두식을 이용 하면 아래와 같이 정의 되는 turning angle, \beta는 아래와 같이 계산할 수 있다. 이 값은 \alpha 각을 가진 핸들이 일정시간 주행할때 bicycle이 center of turning을 중심으로 하는 회전각을 의미한다.

\beta = \int \dot{\theta}dt = \int \frac{v}{R}dt = \frac{1}{R} \int v dt = \frac{d}{R}

로봇의 center of turning 개념에서 회전중심의 위치는 아래와 같이 계산된다.

 x_c = x - Rsin(\theta)

 y_c = y + Rcos(\theta)

회전후 로봇의 방향은 원래의 heading \theta에 로봇의 turn을 합한 값이 되며, 로봇의 새로운 위치좌표는 아래와 같다.

x'= x_c +Rsin(\theta + \beta)

y'= y_c -Rcos(\theta + \beta)

\theta' =(\theta + \beta) mod (2\pi)

이식을 사용하는 과정에서 \beta값이 작을때 (즉, 방향전환이 매우 작은 값일때) tan (\alpha)는 무한대 값에 가까워 지므로 문제가 발생한다.) 이경우, \beta \to \infty  의 경우 아래와 같이 간단히 계산할 수 있다. 

x'= x +dcos(\theta)

y'= y +dsin(\theta)

\theta' =(\theta + \beta) mod  (2\pi)

여기서, 나머지를 구하는 mod는 각도가 360도를 넘을때 다시 0도부터 값을 표기하기 위해서 필요하다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중