대상: 자율주행 시스템에서 인식(Perception) 단계의 전체 흐름을 이해하고 싶은 개발자
환경: ROS/ROS2 기반 자율주행 스택 (Camera, LiDAR, Radar 센서 사용)
1. 문제/주제 요약
자율주행 시스템의 Perception(인식) 단계는
센서 데이터를 이용해 주변 환경을 이해하는 역할을 합니다.
즉,
- 어떤 물체가 있는지(객체 검출),
- 도로가 어디까지인지(차선 인식, Free Space),
- 신호등/표지판 등 주행에 영향을 주는 요소를
자동으로 인식해 Planning(경로 계획) 단계에 전달합니다.
이 글에서는 자율주행 Perception 파이프라인의 전체 구조와
주요 구성 요소(객체 검출, 차선 인식, Free Space Detection)를 간단히 정리합니다.
2. 인식 파이프라인의 전체 구조
Perception 시스템은 일반적으로 다음 5단계로 구성됩니다:
[Raw Sensor Data]
↓
1️⃣ Sensor Fusion (센서 통합)
↓
2️⃣ Object Detection (객체 검출)
↓
3️⃣ Lane Detection (차선 인식)
↓
4️⃣ Free Space Detection (주행 가능 영역)
↓
5️⃣ Tracking & Classification (객체 추적 및 분류)
각 단계는 서로 의존하며, 결과는 주로 ROS2의 topic 형태로 발행됩니다.
예:
/perception/object_detection/perception/lane_markings/perception/freespace
3. 주요 구성 요소
(1) 객체 검출 (Object Detection)
목적: 차량, 보행자, 자전거 등 동적인 객체를 인식
입력: Camera 영상, LiDAR 포인트 클라우드
출력: 객체의 위치, 크기, 속도 정보 (bounding box 형태)
| 유형 | 예시 알고리즘/모델 | 설명 |
|---|---|---|
| Camera 기반 | YOLOv8, SSD, Faster R-CNN | 이미지에서 2D 박스로 객체 검출 |
| LiDAR 기반 | PointPillars, CenterPoint | 포인트 클라우드에서 3D 박스 생성 |
| Sensor Fusion 기반 | AVOD, BEVFusion | LiDAR+Camera 결합으로 인식 정확도 향상 |
ROS2 예시 토픽:
/perception/object_recognition/objects
출력 메시지 예시:
id: 12
type: "car"
position: [123.4, 45.6, 0.0]
velocity: [1.2, 0.0, 0.0]
bbox: [width: 2.0, length: 4.5, height: 1.6]
(2) 차선 인식 (Lane Detection)
목적: 도로 상의 차선, 도로 경계선(lane boundary)을 검출
입력: Camera 영상 (주로 front view)
출력: 각 차선의 위치, 곡률, 차선 타입 (solid, dashed 등)
| 방법 | 설명 | 대표 모델 |
|---|---|---|
| Classical Vision | Canny + Hough Transform | 간단하지만 조명에 약함 |
| Deep Learning 기반 | CNN/Segmentation 모델 (e.g. LaneNet, SCNN, UltraFast) | Robust한 학습 기반 검출 |
| LiDAR 기반 | intensity map + clustering | 차선이 흐릿한 환경에서 보조로 사용 |
예시 결과 (2D 영상 상에 표시):
Lane 1: Polynomial(y) = a*y^2 + b*y + c
Lane 2: Polynomial(y) = ...
ROS2 예시 토픽:
/perception/lane_marker_array
(3) Free Space Detection (주행 가능 영역)
목적: 차량이 실제로 주행할 수 있는 안전한 공간 영역을 검출
입력: LiDAR PointCloud, Camera, Depth Map
출력: Free Space Polygon (2D/3D 형태)
| 접근 방식 | 설명 | 대표 예시 |
|---|---|---|
| LiDAR 기반 | 포인트 높이 분석 (ground segmentation) | Ground plane fitting (RANSAC, Patchwork++) |
| Camera 기반 | 이미지 분할(Semantic Segmentation) | DeepLab, SegNet, BEVDepth |
| Fusion 기반 | LiDAR ground + Camera texture 결합 | Autoware freespace_detector |
예시 ROS2 메시지:
header:
frame_id: "base_link"
polygons:
- points: [[1.0, 2.0], [2.5, 3.0], [3.0, 1.5]]
이 결과는 Planning 모듈에서 “이 영역 안에서만 경로 생성” 하는 제약으로 사용됩니다.
(4) Tracking & Classification
목적: 시간적으로 객체의 움직임을 추적하고 일관된 ID를 부여
주요 기법:
- Kalman Filter / JPDA / DeepSORT
- Re-ID 기반 Tracking (영상 시퀀스에서 ID 유지)
- Multi-object tracking (MOT)
ROS2 예시 토픽:
/perception/tracked_objects
4. 실제 ROS2 인식 파이프라인 예시 (Autoware.ai / Autoware.universe 기준)
/sensing/camera → image_rectified → object_detector
/sensing/lidar → pointcloud_preprocessor → lidar_centerpoint
/perception → object_fusion → object_tracker → perception_result
토픽 흐름 예시:
/camera_front/image_raw
↓
/object_detection/objects
↓
/object_tracker/tracked_objects
↓
/planning/scenario_planning
5. 추가 팁 / 자주 하는 실수
- 센서 동기화 실패 → 객체 검출과 FreeSpace 불일치 발생
- ROI 설정 오류 → 차선 인식이 엉뚱한 부분을 인식함
- Free Space Polygon 좌표계 오류 → Path Planner가 “invalid polygon” 에러 발생
- 객체 분류 오탐 → Tracking 단계에서 ID 혼동으로 이어짐
🔧 Tip: Perception 결과는 시각화 도구(
rviz2,foxglove,Autoware GUI)로 항상 검증하세요.
6. 정리
Perception 파이프라인은 자율주행의 눈과 같습니다.
센서 데이터에서 **“주행 가능한 환경 모델”**을 만드는 핵심 단계로,
다음 3가지 요소가 특히 중요합니다:
- 객체 검출 (Object Detection) – 무엇이 있는가?
- 차선 인식 (Lane Detection) – 도로 구조는 어떤가?
- Free Space Detection – 어디까지 갈 수 있는가?
이 세 요소가 결합되어야 차량이 안전하고 합리적인 주행 판단을 할 수 있습니다.