대상: 실제 차량 없이 자율주행 시스템을 개발·테스트하려는 ROS2 기반 개발자
환경: Ubuntu 22.04 + ROS2 Humble/Foxy, Gazebo / LGSVL(SVL Simulator) / CARLA
1. 문제/주제 요약
자율주행 시스템을 개발할 때, 실제 차량에서 바로 테스트하는 것은
💥 비용, ⚠️ 안전성, ⏱️ 반복 테스트 효율성 면에서 비현실적입니다.
그래서 대부분의 개발팀은 시뮬레이터(Simulator) 를 활용합니다.
시뮬레이터는 현실의 도로 환경, 센서, 차량 모델을 가상 공간에서 재현하여,
ROS2 노드들이 실제 차량처럼 동작할 수 있게 합니다.
2. 자율주행 시뮬레이터의 역할
시뮬레이터는 ROS2 자율주행 스택의 “가상 테스트베드” 역할을 합니다.
┌─────────────────────────────┐
│ ROS2 Autonomy Stack │
│ (Perception–Planning–Control)│
└──────────────┬──────────────┘
│ ROS2 Topics
▼
┌─────────────────────────────┐
│ Simulator (Gazebo/LGSVL/CARLA) │
│ - 센서 시뮬레이션 (LiDAR, Camera) │
│ - 차량 물리 모델 │
│ - 도로 환경, 신호등, 보행자 │
└─────────────────────────────┘
핵심 아이디어:
시뮬레이터가 센서 데이터를 발행(/camera/image_raw, /lidar/points_raw),
ROS2가 이를 처리하고 제어 명령(/vehicle_cmd)을 다시 시뮬레이터로 보냅니다.
즉, 가상 차량이 ROS2 스택과 실제처럼 상호작용하는 구조입니다.
3. 주요 자율주행 시뮬레이터 비교
| 항목 | Gazebo (Ignition) | LGSVL (SVL Simulator) | CARLA |
|---|---|---|---|
| 엔진 | Gazebo/Ignition | Unity3D | Unreal Engine |
| ROS2 통합 | 우수 (nav2 기본) | 매우 우수 (Autoware 공식 지원) | 공식 ROS2 브리지 제공 |
| 그래픽 리얼리즘 | 중간 (기술 테스트용) | 높음 | 매우 높음 (리얼타임 렌더링) |
| 센서 모델 | 카메라, LiDAR, IMU | 카메라, LiDAR, RADAR, GPS | 카메라, LiDAR, Radar, GNSS |
| 물리 엔진 | ODE / DART | Unity Physics | PhysX |
| 적합 용도 | 로봇 내비게이션, ROS2 학습 | 자율주행 차량, Autoware 테스트 | 연구용/AI 기반 예측 학습 |
4. Gazebo (Ignition Gazebo)
✅ 개요
- ROS2 기본 시뮬레이터
nav2패키지에서 로봇 SLAM/Navigation 테스트용으로 자주 사용- 경량, 단순, 물리 모델 정확
🔧 ROS2 연동 예시
ros2 launch gazebo_ros empty_world.launch.py
ros2 launch nav2_bringup tb3_simulation_launch.py
- 토픽 연결 예시
/camera/image_raw/odom/cmd_vel← (ROS2 Control 명령 입력)
💡 특징
- 로봇 중심 개발용 (차량보다 로봇 기반)
- GPU 부담 적음, 빠른 반복 테스트 가능
5. LGSVL (SVL Simulator)
✅ 개요
- Autoware 공식 권장 시뮬레이터 (현재 “SVL Simulator”로 유지)
- Unity3D 기반 고품질 렌더링
- ROS2 Bridge를 통해 실시간 양방향 통신
🔧 구조
LGSVL Simulator
↕ (ROS2 Bridge)
ROS2 Autoware Stack
🔧 실행 예시
1️⃣ 시뮬레이터 실행
./svlsimulator
2️⃣ ROS2 브리지 실행
ros2 launch lgsvl_bridge lgsvl_bridge.launch.py
3️⃣ Autoware 연동
ros2 launch autoware_launch planning_simulator.launch.xml
- LGSVL이
/sensing/lidar/pointcloud_raw,/camera/image_raw발행 - Autoware는
/vehicle_cmd토픽을 통해 조향/가속 명령 전송
💡 특징
- 차량 중심 구조 (센서 구성, 도로 네트워크, 신호 제어 가능)
- 도시 지도·보행자·교차로 지원
- Autoware와 완벽 연동 (official ROS2 plugin 제공)
6. CARLA
✅ 개요
- Unreal Engine 기반 고정밀 시뮬레이터
- AI 연구, 자율주행 학습용 데이터셋 생성에 강점
- ROS2 통신을 위한
carla_ros_bridge공식 지원
🔧 ROS2 연동
1️⃣ 서버 실행
./CarlaUE4.sh -quality-level=Epic
2️⃣ ROS2 브리지 실행
ros2 launch carla_ros_bridge carla_ros_bridge.launch.py
3️⃣ 제어 명령 발행
ros2 topic pub /carla/ego_vehicle/vehicle_control_cmd ...
💡 특징
- 고품질 도시 환경, 복잡한 교통 시나리오 지원
- Python API를 통한 제어 및 센서 데이터 커스터마이즈
- 강화학습·딥러닝 기반 주행 연구에 적합
7. 시뮬레이터–ROS2 데이터 흐름
일반적인 ROS2 연동 흐름은 아래와 같습니다:
[Simulator Sensors]
→ /camera/image_raw
→ /lidar/points_raw
→ /gps/fix
↓
[ROS2 Perception/Planning Stack]
↓
/control/trajectory_follower
→ /vehicle_cmd
↓
[Simulator Vehicle Model]
즉, 시뮬레이터가 센서 발행자(publisher),
ROS2 스택이 제어 명령 발행자(publisher) 로 동작합니다.
8. 통합 테스트 예시 (Autoware + LGSVL)
1️⃣ 시뮬레이터 시작
- 지도(Map): San Francisco or Borregas Ave
- 차량: Lexus RX450h
- 센서 구성: LiDAR, Camera, GNSS
2️⃣ ROS2 Autoware 실행
ros2 launch autoware_launch planning_simulator.launch.xml map_path:=/maps/sf
3️⃣ 연결 확인
ros2 topic list | grep perception
ros2 topic list | grep vehicle_cmd
4️⃣ 결과
- LGSVL의 차량이 Autoware 경로에 따라 주행
- RViz2에서 실시간 궤적, 객체 인식, 제어 결과 확인 가능
9. 시뮬레이터 선택 가이드
| 상황 | 추천 시뮬레이터 | 이유 |
|---|---|---|
| 로봇 내비게이션 / 학습용 | Gazebo | 경량, ROS2 내장 |
| Autoware 개발 / 차량 주행 | LGSVL (SVL) | ROS2 호환성 최고 |
| 연구·AI 기반 예측 / 학습용 | CARLA | 데이터 생성·강화학습용 |
10. 정리
ROS2 기반 자율주행 시뮬레이터는
실제 차량 없이도 Perception–Planning–Control 파이프라인 전체를 검증할 수 있게 해줍니다.
핵심 요약:
1️⃣ Gazebo — 로봇 및 경량 테스트용
2️⃣ LGSVL(SVL) — Autoware 연동용 실차 시뮬레이터
3️⃣ CARLA — 연구·AI 기반 자율주행 데이터 생성용
이 세 가지를 상황에 맞게 선택하면
실차 없이도 ROS2 자율주행 스택의 전 과정을 효율적으로 개발·디버깅할 수 있습니다.