자율주행 시뮬레이터 개념: Gazebo, LGSVL, CARLA 등과 ROS2 연동 개요

대상: 실제 차량 없이 자율주행 시스템을 개발·테스트하려는 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/IgnitionUnity3DUnreal Engine
ROS2 통합우수 (nav2 기본)매우 우수 (Autoware 공식 지원)공식 ROS2 브리지 제공
그래픽 리얼리즘중간 (기술 테스트용)높음매우 높음 (리얼타임 렌더링)
센서 모델카메라, LiDAR, IMU카메라, LiDAR, RADAR, GPS카메라, LiDAR, Radar, GNSS
물리 엔진ODE / DARTUnity PhysicsPhysX
적합 용도로봇 내비게이션, 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 자율주행 스택의 전 과정을 효율적으로 개발·디버깅할 수 있습니다.

댓글 남기기