Post

Pure Pursuit

Pure Pursuit

Reference

  • https://www.mathworks.com/help/nav/ug/pure-pursuit-controller.html
  • https://koreatech-kroad.github.io/Pure-Pursuit-&-Stanely
  • https://dionysaurus.tistory.com/293

Pure Pursuit

Introduction

Pure Pursuit은 간단한 path tracking 알고리즘으로 사용된다.
보통 횡방향에 대한 제어를 하기위해 해당 알고리즘을 사용하게 된다.
차량의 후륜축의 중심점을 기준으로 목표점까지의 거리 (LookAhead Distance = LD)와
차량의 모델을 간소화한 Bicycle model을 사용하여 steer angle을 제어하게 된다.

Method

위 사진에서 볼 수 있는 것 처럼

  • L : Wheel base
  • δ : 조향각
  • Ld : 후륜축 중심과 목표 지점 사이의 거리
  • α : 차향의 heading과 Ld 사이의 각도
  • R : 차량의 회전반경

으로 구성되어 있다.

Steering angle 계산

삼각형의 성질을 이용해면 $\delta$ 를 구해 낼 수 있다.
\(tan(\delta) = \frac{L}{R}\) \(\therefore\; \delta = tan^{-1}(\frac{L}{R})\) 으로 표현할 수 있다.

pure pursuit을 이용한 steer angle 구하기

위의 steering angle을 계산하는 방식을 이용해서 pure pursuit으로 조향할 angle을 구할 수 있다.

먼저 원점에서 Ld 선분 위로 수선의 발을 내리게 되면 해당 삼각형은 이등변삼각형이기 때문에 $2\alpha$가 만으로 나뉘게 된다.
그럼 $\alpha$를 이용해 반지름 R을 구할 수 있게 된다. $d_{la}$ = 길이가 Ld인 선분
\(sin(\alpha) = \frac{\frac{d_{la}}{2}}{R}\) \(\therefore\;R = \frac{2sin(\alpha)}{d_{la}}\)

위의 식에 R을 대입하여 적게 되면
우리가 구할 angle은 다음과 같이 표현할 수 있다.
\(\delta = \tan^{-1}\!\left( \frac{2L\sin \alpha}{d_{la}}\right)\)

그럼 이제 $\alpha$ 에 대한 정보만 알면 angle을 완전히 구할 수 있다.
$\alpha$는 다음과 같이 표현된다.
\(\alpha = \tan^{-1}(\frac{dy}{dx}) - yaw_{curr}\)

LookAhead의 따른 변화

Small Look-ahead

  • 전방 주시거리가 짧으면 이동체가 쁠게 경로를 향해 이동하려고 한다.
  • 하지만, 빠르게 도달하기 위해 경로의 진동이 심해질 수 있다. (각을 크게 주기 때문)

Large Look-ahead

  • 경로가 급격하게 변하는 곡률에서는 경로를 정확하게 따라기 못하는 단점이 존재한다.
  • 하지만, 진동이 줄어들고 조금 더 부드럽게 추종할 수 있다.
Kinematic Model
출처: Matlab

LookAhead 설정

속도에 비례하여 look ahead를 설정하게 되면 비교적 횡방향 제어가 잘되는 것을 확인할 수 있다.

Result

해당 영상은 횡방향 (Pure Pursuit), 종방향 (PID control)을 한 시뮬레이션 영상이다.

시뮬레이션 결과 영상

코드 바로가기

This post is licensed under CC BY 4.0 by the author.