1. 개요
자율주행과 로보틱스 시스템은 단일 기술이 아닌 수십 가지 기술의 융합체다. 센서로부터 원시 데이터를 받아 환경을 인식하고, 경로를 계획하고, 차량을 제어하는 전체 파이프라인에는 C++, GPU 프로그래밍, 딥러닝, 센서 퓨전, 시뮬레이션, 클라우드 인프라가 모두 관여한다.
이 포스트는 자율주행/로보틱스 엔지니어가 알아야 할 13개 핵심 기술 영역을 실전 관점에서 정리한다.
┌────────────────────────────────────────────────────────────────┐
│ 자율주행 기술 스택 전체 구조 │
│ │
│ ┌──────────┐ ┌───────────┐ ┌───────────┐ ┌──────────────┐ │
│ │ 센서 계층 │ │ 인식 계층 │ │ 판단 계층 │ │ 제어 계층 │ │
│ │ GPS/IMU │→│ CV/DL │→│ Planning │→│ Control │ │
│ │ Camera │ │ 센서 퓨전 │ │ Prediction│ │ CAN/Ethernet │ │
│ │ LiDAR │ │ VLM/VLA │ │ │ │ │ │
│ └──────────┘ └───────────┘ └───────────┘ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 인프라 계층: C++ | ROS2 | CUDA | TensorRT | Cloud/MLOps │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 검증 계층: SIL/HIL | Simulation(CARLA/Isaac) | VR/AR │ │
│ └──────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
2. Modern C++ for Robotics (C++17/20/23)
2.1 왜 C++인가
로보틱스는 결정론적 실행, 제로 오버헤드 추상화, 하드웨어 직접 접근을 요구한다. Modern C++는 이 세 가지를 모두 제공하면서도 코드 안전성과 표현력을 대폭 향상시킨다. ROS2 노드부터 CUDA 커널, 실시간 제어 루프까지 모든 성능 핵심 코드는 C++로 작성된다.
2.2 표준별 핵심 기능
C++17 (로보틱스 베이스라인)
| 기능 | 로보틱스 활용 |
|---|
std::optional / std::variant | 센서 상태 표현 ("값 있음/없음") |
| Structured bindings | auto [x, y, z] = getPosition(); |
if constexpr | 센서 추상화 레이어의 컴파일 타임 분기 |
std::filesystem | 로그 관리, 맵 파일 로딩 |
Parallel STL (std::execution::par) | 포인트 클라우드 병렬 처리 |
C++20 (현재 로보틱스 표준)
template<typename T>
concept Sensor = requires(T s) {
{ s.read() } -> std::convertible_to<SensorData>;
{ s.calibrate() } -> std::same_as<bool>;
};
auto obstacles = pointCloud
| views::filter(isAboveGround)
| views::transform(toWorldFrame)
| views::take(maxObstacles);
- Concepts: 템플릿 파라미터 제약 → 컴파일 타임 타입 안전성
- Ranges: 조합 가능한 lazy 데이터 변환
- Coroutines: 임베디드 플랫폼의 비동기 I/O
std::jthread: 협력적 취소가 가능한 스레드
C++23 (로보틱스 도입 중)
std::expected<T, E>: 예외 없는 에러 처리 (실시간 코드에서 예외는 금지)
std::mdspan: 이미지/텐서 데이터의 다차원 배열 뷰 (복사 없이)
std::print: 타입 안전한 포맷 출력
2.3 실시간 프로그래밍 주의사항
✗ Hot path에서 동적 메모리 할당 → ✓ std::pmr 할당자 또는 사전 할당 풀
✗ 실시간 제어 루프에서 예외 → ✓ std::expected 또는 에러 코드
✗ 뮤텍스 기반 통신 → ✓ std::atomic, lock-free 자료구조
✗ 기본 스케줄링 → ✓ SCHED_FIFO / SCHED_RR (POSIX)
2.4 학습 자료
3. ROS / ROS2 (Robot Operating System)
3.1 ROS2란
ROS2는 로봇 애플리케이션 구축을 위한 오픈소스 미들웨어다. ROS1을 완전히 재작성하여 실시간, 다중 로봇, 프로덕션급 배포를 지원한다. 최신 LTS 릴리스는 ROS2 Jazzy Jalisco (2024.05)이다.
3.2 ROS1 vs ROS2
| 항목 | ROS1 | ROS2 |
|---|
| 디스커버리 | 중앙집중형 (roscore) | 분산형 (DDS 디스커버리) |
| 미들웨어 | 커스텀 TCPROS/UDPROS | DDS/RTPS 표준 |
| 실시간 | 미지원 | DDS QoS로 1급 지원 |
| 보안 | 없음 | DDS-SROS2 (인증, 암호화, ACL) |
| 다중 로봇 | 복잡한 네임스페이스 해킹 | 네이티브 다중 도메인 |
| 라이프사이클 | 없음 | Managed Node (configure, activate, deactivate) |
| OS 지원 | Linux만 (공식) | Linux, macOS, Windows, RTOS |
| 빌드 시스템 | catkin | colcon + ament |
3.3 DDS 미들웨어 계층
ROS2는 Data Distribution Service (DDS) 표준을 통해 통신한다.
| DDS 구현체 | 특징 |
|---|
| Eclipse Cyclone DDS | 경량, 고성능 (Jazzy 기본값) |
| eProsima Fast DDS | 기능 풍부, 널리 사용 |
| RTI Connext DDS | 엔터프라이즈급, 안전 인증 |
핵심 QoS 프로파일: Reliability(Best-Effort vs Reliable), Durability(Volatile vs Transient-Local), History Depth, Deadline, Liveliness
3.4 핵심 개념
| 개념 | 설명 | 예시 |
|---|
| Node | 모듈식 프로세스 | 인식 노드, 계획 노드, 제어 노드 |
| Topic | Pub/Sub 채널 | 센서 데이터 스트림 |
| Service | 동기 Request/Reply | "캘리브레이션 트리거" |
| Action | 비동기 장기 태스크 + 피드백 | "웨이포인트로 이동" |
| Executor | 콜백 실행 정책 | SingleThreaded, MultiThreaded |
| Component Node | 동적 로드 가능한 공유 라이브러리 | Zero-copy 인트라프로세스 통신 |
| Lifecycle Node | 결정론적 시작/종료 상태 머신 | configure → activate → deactivate |
3.5 학습 자료
4. 자율주행 Computer Vision
4.1 핵심 패러다임: BEV (Bird's-Eye-View) 표현
2024-2026년의 지배적 패러다임은 다중 카메라 뷰를 통합 BEV 특징 공간으로 투영하는 것이다.
Front Camera ──┐
Left Camera ──┤
Right Camera ──┼──→ [BEV Feature Space] ──→ 3D Detection
Rear Camera ──┤ Lane Detection
Side Cameras ──┘ Occupancy Prediction
| 모델 | 방법 | 성능 (nuScenes NDS) |
|---|
| BEVFormer | Deformable Attention + Spatiotemporal Transformer | 56.9% |
| BEVDet/BEVDepth | 명시적 깊이 예측으로 2D→3D 리프팅 | - |
| LSS | 픽셀별 깊이 분포 예측 | - |
4.2 인식 파이프라인
| 단계 | 기술 | 대표 모델 |
|---|
| 2D 객체 검출 | 실시간 검출 | YOLOv8, YOLOv9, RT-DETR |
| 3D 객체 검출 | 카메라 기반 3D | DETR3D, PETR, StreamPETR |
| 차선 검출 | 파라메트릭/앵커 기반 | CLRNet, LaneATT, TopoNet |
| 깊이 추정 | 단안/다시점 | MiDaS, Depth Anything V2 |
| Occupancy 예측 | 3D 복셀 그리드 | SurroundOcc, Occ3D |
| 신호/표지 인식 | 교통 인프라 분류 | 전용 분류기 |
4.3 End-to-End 인식-계획 통합
인식 진화 경로:
CNN (2011-2016) → RNN+GAN (2016-2018) → BEV (2018-2020)
→ Transformer+BEV (2020-현재) → Occupancy (2022-현재) → End-to-End VLA (2024-현재)
- UniAD (CVPR 2023 Best Paper): 인식+예측+계획을 하나의 네트워크에서 수행
- VAD: 벡터화된 장면 표현 기반 End-to-End 주행
- DriveTransformer (ICLR 2025): 효율적 병렬 End-to-End 아키텍처
4.4 학습 자료
5. VLM/VLA 모델 (Vision-Language-Action)
5.1 VLA란
Vision-Language-Action (VLA) 모델은 시각 입력(카메라 이미지)과 언어 명령을 받아 로봇 행동을 직접 출력하는 Foundation Model이다. 인터넷 스케일의 Vision-Language 사전학습과 로봇 제어를 연결하는 가교 역할을 한다.
5.2 주요 모델 연대기
| 모델 | 조직 | 시기 | 핵심 특징 |
|---|
| PaLM-E | Google | 2023 | 562B 멀티모달 모델, 시각 토큰을 LLM에 임베딩 |
| RT-2 | DeepMind | 2023 | 최초의 VLA, 이산화된 행동 토큰 출력, Chain-of-Thought 추론 |
| Octo | UC Berkeley | 2024 | 오픈소스 범용 정책, Open X-Embodiment 학습, Diffusion 헤드 |
| OpenVLA | Stanford | 2024.06 | 7B 파라미터, Llama 2 + DINOv2 + SigLIP, LoRA Fine-tuning 가능 |
| pi0 | Physical Intelligence | 2024 말 | ~3.3B, Flow Matching으로 연속적 행동 출력 |
| Helix | Figure AI | 2025.02 | 최초 전신 휴머노이드 VLA (팔, 손, 몸통, 머리, 손가락) |
| GR00T N1 | NVIDIA | 2025.03 | 휴머노이드 Foundation Model, Isaac Sim 통합 |
5.3 핵심 개념
행동 출력 방식 비교:
RT-2 방식 (Action Tokenization):
"move arm" → LLM → [토큰256] [토큰128] [토큰064] → 이산 행동
pi0 방식 (Flow Matching):
"move arm" → VLM → Flow Expert → 연속적 벡터 필드 → 부드러운 행동
- Action Tokenization: 연속 행동을 어휘 토큰으로 이산화 (RT-2)
- Flow Matching: 학습된 벡터 필드로 연속 행동 생성 (pi0)
- Cross-Embodiment Transfer: 다중 로봇 타입으로 학습 → 일반화
- Open X-Embodiment: 21개+ 기관, 1M+ 에피소드 협력 데이터셋
5.4 학습 자료
6. CUDA와 병렬 프로그래밍
6.1 왜 GPU인가
자율주행 차량은 다중 카메라 스트림, LiDAR 포인트 클라우드, 레이더 신호를 동시 처리하면서 여러 신경망을 100ms 이내에 실행해야 한다. CPU만으로는 불가능하다.
6.2 CUDA 프로그래밍 모델
┌─────────────────────────────────────────────┐
│ CUDA 메모리 계층 │
│ │
│ 레지스터 (스레드당) │
│ ↓ │
│ 공유 메모리 (블록당, ~48-164KB) │
│ ↓ │
│ L2 캐시 │
│ ↓ │
│ 글로벌 메모리 (VRAM) │
│ │
│ 스레드 → 워프(32개) → 블록(최대1024) → 그리드 │
└─────────────────────────────────────────────┘
| 개념 | 설명 |
|---|
| Kernel | GPU에서 수천 스레드로 병렬 실행되는 함수 |
| Warp | 32개 스레드가 SIMT로 동기 실행 |
| Stream | 커널 동시 실행 및 연산/메모리 전송 오버랩 |
| Coalesced Access | 인접 스레드 → 인접 메모리 접근 → 최대 대역폭 |
| Shared Memory | 블록 내 데이터 재사용을 위한 사용자 관리 스크래치패드 |
| Pinned Memory | DMA를 통한 비동기 CPU-GPU 전송 |
6.3 자율주행 CUDA 활용
| 응용 | 구체적 작업 |
|---|
| 포인트 클라우드 처리 | 복셀화, 지면 제거, 클러스터링 |
| 이미지 전처리 | 왜곡 보정, 리사이즈, 색공간 변환, 정규화 |
| 신경망 추론 | 컨볼루션, 어텐션, 정규화 커널 (cuDNN, cuBLAS) |
| 후처리 | NMS, BEV 그리드 생성 |
| 센서 동기화 | 다중 센서 스트림 타임스탬프 정렬 |
6.4 NVIDIA 자율주행 플랫폼
| 플랫폼 | 성능 | 용도 |
|---|
| Orin SoC | 254 TOPS INT8 | 현재 L2+ ~ L4 |
| Thor (차세대) | 2,000 TOPS | L4 중앙 컴퓨팅 |
6.5 생태계 라이브러리
cuDNN(딥러닝), cuBLAS(선형대수), Thrust(병렬 STL), CUB(블록/디바이스 프리미티브), NCCL(다중 GPU 통신), cuPCL(포인트 클라우드)
6.6 학습 자료
7. TensorRT
7.1 TensorRT란
NVIDIA의 고성능 딥러닝 추론 SDK다. PyTorch/TensorFlow/ONNX 모델을 그래프 최적화, 커널 자동 튜닝, 정밀도 캘리브레이션, 메모리 관리를 통해 최적화한다. 일반적으로 2~10배 속도 향상을 달성한다.
7.2 핵심 최적화 기법
Layer/Kernel Fusion
최적화 전: Conv → BatchNorm → ReLU (3개 커널 실행)
최적화 후: Conv+BN+ReLU (1개 커널 실행)
효과: 커널 실행 오버헤드 최대 80% 감소
메모리 대역폭 최대 50% 감소
처리량 ~30% 향상
Precision Calibration
| 변환 | 처리량 향상 | 정확도 손실 | 캘리브레이션 필요 |
|---|
| FP32 → FP16 | 2배 | 거의 없음 | 불필요 |
| FP32 → INT8 | 4배 | 1% 미만 (적절한 캘리브레이션 시) | 필요 (500-1000 샘플) |
| FP32 → FP8 | 최적 (Hopper/Blackwell) | 최소 | 필요 |
PTQ (Post-Training Quantization): 재학습 불필요, 캘리브레이션 데이터만으로 양자화
QAT (Quantization-Aware Training): 학습 중 양자화 시뮬레이션 → 더 높은 정확도
배포 워크플로
PyTorch Model
→ ONNX Export (torch.onnx.export)
→ TensorRT Builder (trtexec 또는 Python API)
→ 그래프 최적화 + 레이어 퓨전
→ 정밀도 캘리브레이션 (INT8/FP8)
→ 커널 자동 튜닝
→ 직렬화된 엔진 (.engine 파일)
→ TensorRT Runtime (추론)
7.3 통합 옵션
| 도구 | 용도 |
|---|
| trtexec | CLI 빌드 및 벤치마킹 |
| TensorRT Python/C++ API | 프로그래밍 제어 |
| Torch-TensorRT | PyTorch 네이티브 통합 |
| ONNX-TensorRT | ONNX 모델 직접 최적화 |
| Triton Inference Server | TensorRT 백엔드 모델 서빙 |
7.4 학습 자료
8. 모델 최적화 (양자화, 프루닝, 증류)
8.1 왜 필요한가
BEVFormer 모델은 FP32에서 50+ TFLOPS가 필요하다 — 차량 내 SoC에서는 불가능하다. 모델 최적화로 4~16배 감소시키면서 원래 정확도의 95% 이상을 유지할 수 있다.
8.2 양자화 (Quantization)
가중치와 활성화의 수치 정밀도를 낮추는 기법.
| 방법 | 재학습 | 정확도 | 적합한 경우 |
|---|
| PTQ | 불필요 (캘리브레이션만) | 약간 낮음 | 빠른 배포, 양자화에 강건한 모델 |
| QAT | 필요 (Fake Quantization) | PTQ보다 높음 | 프로덕션 모델, 정확도 중요 |
정밀도 수준:
| 정밀도 | 압축률 | 정확도 손실 |
|---|
| FP16 | 2배 | 거의 없음 |
| INT8 | 4배 | 1% 미만 |
| INT4 (AWQ, GPTQ) | 8배 | 소량 |
| FP8 (H100/H200) | 최적 | 최소 |
8.3 프루닝 (Pruning)
불필요한 가중치/뉴런/채널을 제거하는 기법.
| 유형 | 방법 | 장점 | 단점 |
|---|
| 비구조적 | 개별 가중치 제로화 | 90%+ 희소성 가능 | 전용 하드웨어 필요 (2:4 sparsity) |
| 구조적 | 전체 채널/헤드/레이어 제거 | FLOPs 직접 감소, 범용 하드웨어 | 압축률이 비구조적보다 낮음 |
8.4 지식 증류 (Knowledge Distillation)
큰 "교사" 모델의 지식을 작은 "학생" 모델로 전이한다.
- Logit 증류: 학생이 교사의 출력 확률 분포를 모방
- Feature 증류: 학생이 교사의 중간 표현을 모방
- QAD: 양자화 에러를 처리하면서 교사를 모방
8.5 업계 표준 파이프라인 (2025)
Large Teacher (FP32)
→ Knowledge Distillation → Smaller Student
→ Structured Pruning → 채널/헤드 제거
→ QAT Fine-tuning → INT8/FP8
→ TensorRT Export → 퓨전·최적화 엔진
8.6 도구
9. 센서 퓨전 (GPS, IMU, Camera, LiDAR)
9.1 왜 퓨전인가
| 센서 | 강점 | 약점 |
|---|
| Camera | 풍부한 의미 정보, 저비용 | 직접 깊이 측정 불가, 조명 민감 |
| LiDAR | 정밀 3D 포인트 클라우드 | 고비용, 원거리 희소 |
| Radar | 전천후 작동 | 낮은 각도 분해능 |
| GPS | 글로벌 위치 | 미터급 오차, 터널/도심 취약 |
| IMU | 고빈도 모션 데이터 | 시간에 따른 드리프트 |
퓨전은 각 센서의 약점을 상호 보완한다.
9.2 퓨전 아키텍처
| 레벨 | 방법 | 예시 |
|---|
| Early (데이터) | 원시 데이터 결합 후 특징 추출 | LiDAR 포인트에 카메라 RGB 페인팅 |
| Mid (특징) | 각 센서의 NN 특징을 공유 공간에서 결합 | BEVFusion, TransFusion |
| Late (결정) | 독립 검출 후 규칙/학습으로 결합 | 앙상블 투표 |
2025년 지배적 트렌드: Unified BEV + Token-Level Cross-Modal Attention
9.3 고전 상태 추정
칼만 필터 (KF)
Predict (예측): x̂ₖ|ₖ₋₁ = F·x̂ₖ₋₁ + B·uₖ
Pₖ|ₖ₋₁ = F·Pₖ₋₁·Fᵀ + Q
Update (보정): Kₖ = Pₖ|ₖ₋₁·Hᵀ·(H·Pₖ|ₖ₋₁·Hᵀ + R)⁻¹
x̂ₖ = x̂ₖ|ₖ₋₁ + Kₖ·(zₖ - H·x̂ₖ|ₖ₋₁)
| 필터 | 특징 | 적합한 경우 |
|---|
| KF | 선형 시스템, 가우시안 노이즈 | 단순 GPS+Odometry |
| EKF | 야코비안으로 비선형 선형화 | GPS+IMU 퓨전 표준 |
| UKF | 시그마 포인트 (야코비안 불필요) | 고도로 비선형 시스템 |
| Particle Filter | 비모수적, 다중 모드 분포 | 도심 GPS 모호성 |
상태 벡터 (EKF 일반적):
[x, y, z, roll, pitch, yaw, vx, vy, vz, ax, ay, az]
9.4 센서 캘리브레이션
| 유형 | 내용 | 도구 |
|---|
| Extrinsic | 센서 간 회전+이동 관계 | Kalibr (ETH Zurich), 체커보드 기반 |
| Intrinsic | 센서 내부 파라미터 (초점거리, 왜곡계수) | OpenCV calibrateCamera |
| Temporal | 센서 간 시간 오프셋 | PTP, GPS PPS, 신호 상관 |
9.5 학습 자료
10. SIL/HIL 테스팅
10.1 왜 필요한가
물리적 도로 테스트로 안전성을 통계적으로 증명하려면 110억 마일 주행이 필요하다 (Waymo 추정). SIL/HIL 시뮬레이션은 하루에 수백만 마일을 시뮬레이션할 수 있다.
10.2 SIL (Software-in-the-Loop)
┌──────────────────────────────────────────────────┐
│ SIL 환경 │
│ │
│ [인식 알고리즘] ←→ [센서 시뮬레이션] │
│ [계획 알고리즘] ←→ [시나리오 엔진] │
│ [제어 알고리즘] ←→ [차량 역학 모델] │
│ │
│ 실행 환경: Host PC (x86) │
│ 물리 하드웨어: 없음 │
│ 반복 속도: 초~분 │
│ CI/CD 통합: 가능 (클라우드 병렬화) │
└──────────────────────────────────────────────────┘
장점: 하드웨어 비용 없음, 완전 재현 가능, CI/CD 통합, 클러스터 병렬화
10.3 HIL (Hardware-in-the-Loop)
┌──────────────────────────────────────────────────┐
│ HIL 환경 │
│ │
│ [실제 ECU (DUT)] ←→ [HIL 시뮬레이터] │
│ ├ 차량 역학 모델 │
│ ├ 센서 신호 주입 (HDMI/ETH) │
│ ├ 버스 시뮬레이션 (CAN/ETH) │
│ └ 고장 주입 │
│ │
│ 실행 환경: 실제 타겟 하드웨어 (Orin, EyeQ 등) │
│ 실시간: 하드웨어 클록 레이트 │
│ ISO 26262: 기능 안전 인증에 필수 │
└──────────────────────────────────────────────────┘
10.4 V-모델 테스트 피라미드
MIL (Model-in-the-Loop) — MATLAB/Simulink 프로토타이핑
→ SIL — Host PC + 시뮬레이션 환경
→ PIL (Processor-in-the-Loop) — 타겟 프로세서 컴파일, Host 실행
→ HIL — 타겟 ECU + 시뮬레이션 환경
→ VIL (Vehicle-in-the-Loop) — 실차 + 시나리오 주입
→ Road Testing — 실차 + 실환경
10.5 업계 도구
| 도구 | 용도 |
|---|
| dSPACE SCALEXIO | HIL 시뮬레이션 |
| NI PXI | PXI 기반 HIL |
| Vector CANoe | 버스 시뮬레이션 |
| Applied Intuition HIL Sim | ADAS/AD HIL 플랫폼 |
| IPG CarMaker | SIL/HIL 차량 역학 |
11. 시뮬레이션 소프트웨어
11.1 주요 시뮬레이터 비교
| 특성 | CARLA | Isaac Sim | LGSVL | CarSim | Simulink |
|---|
| 오픈소스 | O | O | O* | X | X |
| 엔진 | Unreal | Omniverse | Unity | 독자 | 독자 |
| 센서 시뮬 | 높음 | 매우 높음 | 높음 | 낮음 | 중간 |
| 차량 역학 | 중간 | 중간 | 중간 | 매우 높음 | 높음 |
| ROS2 지원 | O | O | O | 브릿지 | 툴박스 |
| 합성 데이터 | O | 최고 | O | X | 제한적 |
| ML 학습 | API | Isaac Lab (RL) | API | X | RL Toolbox |
| 활발한 개발 (2025) | O | O | X* | O | O |
*LGSVL은 LG에 의해 중단됨
11.2 CARLA (오픈소스, Unreal Engine)
docker pull carlasim/carla:0.9.15
docker run --privileged --gpus all --net=host \
carlasim/carla:0.9.15 /bin/bash ./CarlaUE4.sh
pip install carla
import carla
client = carla.Client('localhost', 2000)
world = client.get_world()
blueprint = world.get_blueprint_library().find('vehicle.tesla.model3')
spawn_point = world.get_map().get_spawn_points()[0]
vehicle = world.spawn_actor(blueprint, spawn_point)
camera_bp = world.get_blueprint_library().find('sensor.camera.rgb')
camera = world.spawn_actor(camera_bp, carla.Transform(), attach_to=vehicle)
11.3 NVIDIA Isaac Sim
- Omniverse(USD) 기반, RTX 렌더러로 포토리얼리스틱 RGB, 깊이, 세그멘테이션 마스크
- PhysX GPU 가속 물리 엔진
- NuRec 신경 렌더링으로 Sim-to-Real 갭 최소화
- Isaac Lab(RL 학습), Replicator(합성 데이터), Cosmos(생성 AI 환경)
11.4 학습 자료
12. 자율주행 풀 스택
12.1 모듈식 스택 아키텍처
┌─────────────────────────────────────────────────────────────────┐
│ 자율주행 풀 스택 │
│ │
│ 1. Sensing 센서 드라이버, 시간 동기화, 로깅 │
│ ↓ │
│ 2. Localization HD Map 매칭, V-SLAM, LiDAR SLAM, GNSS/IMU │
│ ↓ → 6-DOF 차량 자세 (100+ Hz) │
│ 3. Perception 3D 검출, 추적, 시맨틱 세그멘테이션, Occupancy │
│ ↓ → 3D 바운딩 박스, 트랙 ID, 시맨틱 맵 │
│ 4. Prediction 에이전트 미래 궤적 예측 (3-8초) │
│ ↓ → 에이전트별 다중 모드 궤적 │
│ 5. Planning 경로 계획, 행동 계획, 모션 계획 │
│ ↓ → 궤적 (자세 + 속도 시퀀스) │
│ 6. Control 횡방향(조향) + 종방향(가감속) 제어 │
│ ↓ → CAN 명령 (steer-by-wire, brake-by-wire) │
└─────────────────────────────────────────────────────────────────┘
12.2 End-to-End vs 모듈식
| 접근 | 장점 | 단점 |
|---|
| 모듈식 | 명확한 인터페이스, 테스트 용이, 해석 가능 | 에러 전파, 모듈 간 정보 손실 |
| End-to-End | 전체 최적화, 정보 보존 | 해석 어려움, 안전 검증 난이도 |
| 하이브리드 | 학습된 인식 + 규칙 기반 안전 | 현재 업계 주류 |
12.3 오픈소스 스택
| 스택 | 특징 |
|---|
| Autoware | 세계 최고의 오픈소스 AD 스택, ROS2 기반, 완전 모듈식 |
| Apollo (Baidu) | 포괄적 AD 플랫폼, 로보택시 실배포 |
13. VR/AR와 디지털 트윈
13.1 활용 분야
| 분야 | 설명 |
|---|
| 디지털 트윈 | 물리적 로봇/환경의 가상 복제본, 실시간 동기화 |
| 텔레오퍼레이션 | VR로 원격 로봇 조작 (수술, 위험환경, 우주) |
| 데이터 수집 | VR에서 인간 시연 → 로봇 정책 학습 데이터 |
| 시뮬레이션 시각화 | 개발자가 로봇 세계에 몰입하여 디버깅 |
13.2 핵심 플랫폼
- NVIDIA Omniverse: USD 기반, 실시간 렌더링, 물리 시뮬, 다중 사용자 협업
- Unity + ROS: Unity Robotics Hub로 ROS-Unity 통합
- WebXR + rosbridge: 브라우저 기반 VR 로봇 제어
14. 클라우드 기술
14.1 왜 클라우드인가
자율주행 차량은 시간당 1~5TB 데이터를 생성한다. 인식 모델 학습에는 수천 GPU-시간이 필요하다. 클라우드는 선택이 아닌 필수 인프라다.
14.2 데이터 파이프라인
차량 (Edge)
→ 셀룰러/WiFi로 원시 로그 업로드
→ Object Storage (S3/GCS/Azure Blob)
→ 데이터 카탈로그 & 인덱싱 (시나리오 마이닝)
→ 자동 어노테이션 (기존 모델로 사전 라벨링)
→ 인간 어노테이션 (검증, 코너 케이스)
→ 데이터셋 버전 관리 (DVC, LakeFS)
→ 학습 클러스터
→ 모델 레지스트리
→ 검증 파이프라인 (오프라인 메트릭, SIL)
→ OTA 배포
14.3 핵심 기술
| 기술 | 역할 |
|---|
| Apache Kafka | 실시간 스트리밍 (텔레메트리, OTA, 차량 통신) |
| Apache Flink | 스트림 처리 (실시간 시나리오 감지) |
| Apache Spark | 대규모 배치 데이터 변환 |
| Apache Airflow | ML 파이프라인 워크플로 오케스트레이션 |
| MCAP | 멀티모달 로그 데이터 포맷 (rosbag 후속) |
14.4 OTA (Over-the-Air) 업데이트
A/B 파티션: 비활성 파티션 업데이트 → 재부팅 시 전환
Delta 업데이트: 변경 바이트만 전송 (100-500MB vs 10+GB)
Staged 롤아웃: 1% → 모니터링 → 점진적 확대
Rollback: 이상 감지 시 이전 버전 복원
- 암호화 서명, 안전 상태에서만 적용, ISO 24089 표준
14.5 데이터 플라이휠
모델 배포 → 실주행 데이터 수집 → 실패 사례 자동 마이닝
→ 어노테이션 추가 → 재학습 → SIL 검증 → A/B 테스트 → 전체 배포
→ [반복]
15. 학습 로드맵
15.1 기초 (1-3개월)
15.2 중급 (3-6개월)
15.3 고급 (6-12개월)
16. References
공식 문서
- NVIDIA CUDA Programming Guide
- NVIDIA TensorRT Documentation
- ROS2 Jazzy Documentation
- CARLA Documentation
- NVIDIA Isaac Sim Documentation
- Autoware Documentation
핵심 논문
- Li, Z., et al. (2022). "BEVFormer: Learning Bird's-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers". ECCV 2022.
- Hu, Y., et al. (2023). "Planning-Oriented Autonomous Driving (UniAD)". CVPR 2023 Best Paper.
- Brohan, A., et al. (2023). "RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control". arxiv.org/abs/2307.15818
- Black, K., et al. (2024). "pi0: A Vision-Language-Action Flow Model for General Robot Control". arxiv.org/abs/2410.24164
- Team, O., et al. (2024). "Octo: An Open-Source Generalist Robot Policy". octo-models.github.io
- Kim, M., et al. (2024). "OpenVLA: An Open-Source Vision-Language-Action Model". arxiv.org/abs/2406.09246
GitHub 저장소
- carla-simulator/carla
- autowarefoundation/autoware
- ApolloAuto/apollo
- openvla/openvla
- octo-models/octo
- OpenDriveLab/UniAD
- NVIDIA/Model-Optimizer
블로그 및 해설
- NVIDIA: How DRIVE AGX Achieves Fast Perception
- NVIDIA: Top 5 AI Model Optimization Techniques
- Multi-Sensor Fusion Survey (MDPI)
- VLA Models Overview (DigitalOcean)
- NetApp: Data Pipeline for Autonomous Driving