안녕하세요. K-ROAD 5기 박용현입니다.

오늘은 자율주행 자동차의 경로 생성 알고리즘에 대해 소개드리려고 합니다.

주행경로를 생성하는 방식은 크게 Global Path와 Local Path로 나눌 수 있습니다.


글로벌패스(Global Path)

글로벌 패스는 자동차의 시작 위치부터 목적지까지의 전체 경로를 의미합니다.

이 경로는 일반적으로 넓은 지역을 대상으로 계획되며, 도로망과 같은 큰 규모의 지도 정보를 기반으로 생성됩니다. 쉽게 말해 차량이 출발점에서 목적지까지 가는 전체적인 경로를 말합니다.

글로벌 패스의 생성 과정

  1. 경로 계획 알고리즘: 다양한 알고리즘(예: A*, Dijkstra)을 사용하여 최적 혹은 최적에 가까운 경로를 계획합니다. 이 알고리즘은 출발점과 목적지 간의 최단 경로나 최소 시간 경로를 찾아내는 데 주로 사용됩니다.

  2. 고려되는 요소: 글로벌 패스를 생성할 때는 도로의 유형, 속도 제한, 교통량 패턴, 예상 교통 정체 지역 등 다양한 요소가 고려됩니다. 이러한 정보는 효율적이고 실용적인 경로를 제공하는 데 중요합니다.

  3. 긴 기간 동안의 유효성: 일단 계획된 글로벌 패스는 장기간 동안 유효하며, 큰 환경 변화가 없는 한 광범위하게 적용될 수 있습니다.


글로벌 패스의 중요성

글로벌 패스는 전체 자율주행 시스템에서 큰 틀의 경로를 제공함으로써 차량이 전체 여정 동안 일관된 목표를 유지할 수 있도록 합니다. 이를 통해 차량은 보다 효율적으로 에너지를 관리하고, 시간을 절약하며, 도로 사용자와의 안전을 확보할 수 있습니다. 또한, 글로벌 패스는 로컬 패스 계획의 기반을 제공하여, 로컬 패스가 보다 정밀하고 유동적인 응답을 할 수 있는 토대를 마련해줍니다.


로컬패스(Local Path)

로컬 패스는 글로벌 패스를 따라가는 과정에서 짧은 시간 내에 반응해야 할 상황들을 고려하여 생성됩니다. 이는 자동차의 현재 위치와 주변 상황 (다른 차량, 보행자, 장애물)에 따라 동적으로 계획되며, 실시간 데이터를 활용해 더 세밀하고 유연하게 경로를 조정합니다.

로컬 패스의 생성 과정

  1. 센서 데이터와 통합: 자율주행 차량은 카메라, 라이다, 레이더를 사용하여 로컬 패스를 계획하는 데 필수적인 주변 환경을 인식합니다.

  2. 경로 재계산: 로컬 패스는 일반적으로 몇 초 내지는 몇 분 단위로 지속적으로 업데이트되며, 주변 환경의 변화에 따라 조정됩니다.

  3. 장애물 회피와 안전 운전: 로컬 패스는 장애물을 회피하고, 안전하게 다른 차량과 상호작용하며, 교통 법규를 준수하도록 설계됩니다.



로컬 패스의 중요성

로컬 패스는 자율주행 차량이 실제 도로 환경에서 안전하게 운행하도록 하는 데 필수적입니다. 불확실하고 동적인 도로 상황에서 차량이 적절하게 반응할 수 있도록 도와주며, 글로벌 패스에 의해 설정된 장거리 목표를 달성하는 데 있어 실질적인 실행 가능한 경로를 제공합니다. 이 과정에서 차량의 자율성과 지능이 크게 발휘됩니다, 장애물을 피하고 다른 도로 사용자와의 안전한 상호작용을 보장하는 등의 중요한 역할을 수행합니다.


이렇게 경로 생성은 크게 두가지로 나눌 수 있는데 오늘은 로컬패스 생성 알고리즘 중 하나인 Frenet Frame에 대해 소개해보겠습니다.


Frenet Frame

Frenet Frame은 목적에 맞게 비용 함수를 설정할 수 있습니다 특성 때문에 연산량이 낮아 자율주행 자동차에서 경로를 생성할 때 많이 사용되고 있습니다.

대략적인 구조는 먼저 여러개의 로컬패스를 뿌린 후 해당 경로의 cost를 계산하고 최적의 비용 경로를 찾아 로컬패스를 생성하는 구조입니다.

Frenet Frame 알고리즘은 크게 3가지 단계로 진행됩니다.

  1. 첫번째로 프리넷 좌표계로 변환해줍니다.

  2. 두번째로 종방향, 횡방향, 곡률값을 구합니다.

  3. 위에서 구한 종방향, 횡방향, 곡률값을 최적화 함수를 통해 최적의 경로를 찾습니다.


1. 프리넷 좌표계 변환

먼저 차량의 좌표를

𝑃𝑐(𝑥,𝑦)=𝑠𝑡(𝑠)+𝑑⃗⃗⃗𝑛(𝑠)𝑃 𝑐 (𝑥, 𝑦) = 𝑠 ⃗ 𝑡 (𝑠) + 𝑑 ⃗⃗⃗ 𝑛 (𝑠)

식을 활용하여 좌변의 카다시안 좌표계를 우변의 프리넷 좌표계로 변환시켜 줍니다.
왼쪽 그림이 카다시안 좌표계이고 이 카다시안 좌표계를 오른쪽 그림인 프리넷 좌표계로 변환시켜 줍니다.

Pc(x,y)P_c(x, y) : 차량의 위치를 나타내는 카다시안 좌표계

s^t(s)ŝt(s): 참조 경로의 특정 지점 s에서의 탄젠트 벡터로 차량이 이동한 거리를 나타냄(시작점에서 차량이 이동한 종방향 이동거리)

d^n(s)d̂n(s): s지점에서의 노멀 벡터로 탄젠트 벡터에 수직이며 참조 경로로부터의 횡 방향 거리(글로벌 경로에서 떨어진 정도)


2. 종방향, 횡방향, 곡률값 계산

종방향의 위치 (시작지점으로 부터 이동한 차량의 거리)

vi,xv_{i,x}: 차량의 x축 속도 성분
→ 두 성분 제곱 후 더한 값 = 차량의 총 속도

vi,yv_{i,y} : 차량의 y축 속도 성분

tt: 차량이 시작점으로부터 측정된 시간

차량의 총 속도 X 차량이 이동한 거리 = 종방향의 위치

  • 횡방향의 위치 (차량이 글로벌 패스와 떨어진 정도)

    *좌변은 시간 t에서의 횡방향 위치이고 우변은 초기 횡방향의 이탈을 나타냅니다.

  • 곡률(curvature)

    xi,p(t)x_{i,p}(t)yi,p(t)y_{i,p}(t) : 객체 i에서의 x축과 y축의 좌표

    xi,p(t)x'_{i,p}(t)yi,p(t)y'_{i,p}(t) : x축과 y축 좌표의 도함수로서 x축과 y축의 속도벡터

    xi,p(t)x''_{i,p}(t)yi,p(t)y''_{i,p}(t): x축과 y축 좌표의 이계도함수로서 x축 y축의 가속도 벡터

    yi,p(t)xi,p(t)xi,p(t)yi,p(t)y''_{i,p}(t)x'_{i,p}(t)−x''_{i,p}(t)y'_{i,p}(t) : 속도와 가속도를 외적 = 평행사변형 면적 = 경로 방향 변화 강도
    (xi,p(t)2+yi,p(t)2)2/3(x'_{i,p}(t)^2+y'_{i,p}(t)^2)^{2/3} : 속도 벡터의 세제곱 = 단위깊이 당 곡률

    곡률은 길이의 역수로써 속도 벡터의 길이에 대한 세제곱을 나누고 얻어진 곡률 값이 속도의 크기나 경로의 실제 길이와 독립적으로 되도록 보장합니다.


3. 최적의 경로탐색

.𝐽𝑡𝑜𝑡𝑎𝑙=𝐶𝑑×𝐽𝑑+𝐶𝑜×𝐽𝑜.𝐽 𝑡𝑜𝑡𝑎𝑙 = 𝐶 𝑑 \times 𝐽 𝑑 + 𝐶 𝑜 \times 𝐽 𝑜

측면편차 비용(𝐽 𝑑) , 장애물 회피 비용(𝐽 𝑜)을 통해 최적화 된 충돌 회피 경로를 선택하게 됩니다.

수식에 대한 자세한 설명은 다음의 유튜브 영상을 참고해주세요!

참고자료

Frenet Frame based Local Motion Planning in Racing Environment
[ Min Seong Kim 1 , Jeon Hyeok Lee 2 , Taek Lim Kim 2 and Tae-Hyoung Park 3 ]

profile
한국기술교육대학교 자율주행연구회 K-ROAD의 기술블로그 입니다.

0개의 댓글