Planning(계획) 파이프라인 개요: 전역 경로, 지역 경로, 행동 계획

대상: 자율주행 시스템의 “계획(Planning)” 단계가 어떤 구조로 동작하는지 이해하고 싶은 개발자
환경: ROS/ROS2 기반 자율주행 스택 (예: Autoware, Apollo, LGSVL 등)


1. 문제/주제 요약

자율주행의 Planning(계획) 단계는
Perception(인식)과 Prediction(예측) 결과를 바탕으로
“차량이 어디로, 어떤 속도로, 어떤 행동으로 갈지”를 결정하는 핵심 부분입니다.

이 단계는 크게 세 가지 하위 모듈로 나뉩니다:

1️⃣ 전역 경로 계획 (Global Path Planning)
2️⃣ 지역 경로 계획 (Local Path / Trajectory Planning)
3️⃣ 행동 계획 (Behavior Planning)

이 세 모듈이 유기적으로 결합되어
“지도 기반 목적지 이동 + 실시간 장애물 회피”를 동시에 수행합니다.


2. 전체 파이프라인 구조

자율주행의 전체 데이터 흐름을 간단히 요약하면 다음과 같습니다:

[Sensor → Perception → Prediction]
                    ↓
              [Planning]
                    ↓
               [Control]

그중 Planning 내부는 다음처럼 구성됩니다:

Global Planner
   ↓
Behavior Planner
   ↓
Local Trajectory Planner

각 단계의 역할은 “어디로 → 어떻게 → 실제로”에 대응됩니다.

단계역할입력출력
Global Path목적지까지의 대략적인 도로 경로HD Map, GPS도로 단위 경로
Behavior Planning주행 행위 결정 (정지/차선 변경/회피 등)인식/예측 결과의사결정 (maneuver)
Local Trajectory실제 주행 궤적 생성Behavior 결과, 장애물 정보시계열 궤적 (x, y, v, a)

3. 전역 경로 계획 (Global Path Planning)

목적: 시작점에서 목적지까지의 “도로 단위 경로”를 생성

  • 입력:
    • HD Map (차로 연결 관계, 도로 구조)
    • 출발지·목적지 (GPS 좌표 or map frame)
  • 출력:
    • 도로/차선 ID 기반의 경로 리스트
    • Waypoint 시퀀스 (/planning/global_path)

주요 알고리즘

알고리즘설명
A*격자 기반 최단경로 탐색
Dijkstra비용 기반 탐색, 안정적
D*-Lite / Hybrid A*차량 동역학 제약 포함
Graph-based (HD Map)Lane graph를 따라 경로 탐색

예시:

waypoints:
  - [x: 124.5, y: 52.1]
  - [x: 126.0, y: 53.2]
  - [x: 127.3, y: 54.5]

전역 경로는 “지도 상의 고정 루트”로서,
지역 경로(Local Planner)가 이 위를 따라가며 실시간 조정합니다.


4. 행동 계획 (Behavior Planning)

목적: 현재 주행 상황에 맞는 “행동(behavior)”을 결정

예:

  • 직진 / 정지 / 차선 변경 / 장애물 회피 / 좌회전 등

이 단계는 Planning의 두뇌 역할로,
전역 경로를 따르면서도 상황별 판단을 수행합니다.

주요 입력

  • 인식 결과 (주변 객체, 차선, 신호등, 보행자 등)
  • 예측 결과 (TTC, 객체 궤적)
  • 현재 차량 상태 (속도, 조향각 등)

예시 상태 전이(State Machine)

FOLLOW_LANE  →  STOP_AT_TRAFFIC_LIGHT  →  START_MOVING
      ↘
     AVOID_OBSTACLE
      ↘
     CHANGE_LANE

Autoware 예시 토픽:

/planning/behavior_path_planner

Behavior Planner는 “다음 동작 명령”을 지역 궤적 생성기로 넘겨줍니다.
예:

  • “앞차 정지 예상 → 감속”
  • “좌측 차선 비어 있음 → 차선 변경 시도”

5. 지역 경로 계획 (Local Path / Trajectory Planning)

목적: 실제 차량이 따라갈 세밀한 주행 궤적 생성

  • 입력:
    • 전역 경로 (Global Path)
    • 행동 계획 결과 (Behavior Output)
    • 장애물 위치 (Perception/Prediction 결과)
  • 출력:
    • 시간축 기반 궤적 (x, y, yaw, v, a)
    • /planning/trajectory

대표 알고리즘

알고리즘설명
Polynomial Trajectory (Cubic/Quintic)시작/끝 상태를 만족하는 매끄러운 곡선
Frenet Frame Planner도로 중심선 기준 lateral/longitudinal 계획
Sampling-based (Lattice)후보 궤적 여러 개를 생성 후 비용 최소 선택
MPC (Model Predictive Control)차량 모델 + 제약조건 최적화 기반 실시간 궤적
Spline/Bezier차선 변경 등 자연스러운 곡선 생성

예시 궤적:

trajectory:
  - [x: 125.0, y: 53.1, v: 4.5]
  - [x: 125.6, y: 53.6, v: 4.2]
  - [x: 126.2, y: 54.0, v: 3.8]

6. 계획 결과의 활용 (Control 단계 연계)

Local Planner의 출력은 제어(Control) 단계에서 다음과 같이 사용됩니다:

제어기입력제어 대상
Lateral Controller궤적의 yaw, curvature조향각(Steering)
Longitudinal Controller속도, 가속도페달/브레이크 제어

즉, Planning이 “가야 할 궤적”을 정하면,
Control은 “그 궤적을 실제로 따르는 제어”를 수행합니다.


7. ROS2 실제 파이프라인 예시 (Autoware Universe 기준)

/planning/global_route_planner
      ↓
/planning/behavior_path_planner
      ↓
/planning/obstacle_avoidance_planner
      ↓
/planning/trajectory_optimizer
      ↓
/control/trajectory_follower

각 노드는 다음 역할을 담당합니다:

  • global_route_planner : 목적지까지 차로 단위 경로 탐색
  • behavior_path_planner : 행동(정지, 차선 변경 등) 결정
  • obstacle_avoidance_planner : 주변 장애물 반영
  • trajectory_optimizer : 부드러운 속도·곡률 최적화

8. 추가 팁 / 자주 하는 실수

  • 전역 경로 불연속 → Local Planner가 “path not found” 에러 발생
  • HD Map 좌표계 불일치 → Behavior Planner가 차로 인식 실패
  • ROI 객체 미제거 → 불필요한 장애물로 회피 동작 반복
  • 속도 제한 미적용 → 도심 환경에서 비현실적인 속도 계획

⚙️ Tip: rviz2에서 /planning/global_path/planning/trajectory
를 함께 표시하면 전역 경로 대비 실제 궤적의 차이를 직관적으로 확인할 수 있습니다.


9. 정리

자율주행의 Planning은 “미래를 예측하고, 그에 맞는 안전한 경로를 만드는 과정” 입니다.

핵심 단계는 다음 세 가지입니다:

1️⃣ 전역 경로(Global Path) — 목적지까지의 큰 그림
2️⃣ 행동 계획(Behavior Planning) — 지금 어떤 동작을 취할지 결정
3️⃣ 지역 궤적(Local Trajectory) — 실제 차량이 따라갈 구체적인 곡선

이 세 단계가 유기적으로 연결되어야
자율주행 차량은 “예측 가능한·자연스러운 주행” 을 할 수 있습니다.

댓글 남기기