Gazebo 로봇 시뮬레이션 구축 가이드: 처음부터 끝까지 완벽 정복

로봇을 개발하다 보면 실제 하드웨어 없이도 다양한 환경에서 테스트해보고 싶은 순간이 찾아오죠. 그 해답이 바로 Gazebo 로봇 시뮬레이션이에요. Gazebo는 오픈소스 3D 로봇 시뮬레이터로, Physical AI 연구와 로봇공학 개발에서 표준으로 자리 잡은 플랫폼이에요. 처음 접하면 복잡해 보일 수 있지만, 단계별로 접근하면 누구든 환경을 구축하고 원하는 로봇 실험을 진행할 수 있어요.

Gazebo란 무엇인가요?

시뮬레이터의 역할과 중요성

Gazebo는 Open Source Robotics Foundation(OSRF)이 개발하고 유지관리하는 로봇 시뮬레이션 환경이에요. 물리 엔진을 기반으로 현실과 유사한 환경을 컴퓨터 안에서 재현하여, 로봇의 움직임·센서 반응·환경 상호작용을 실제 하드웨어 없이 테스트할 수 있어요. Physical AI 분야에서는 실제 로봇을 반복적으로 운용하면 비용과 안전 위험이 발생하는데, 시뮬레이션은 이를 획기적으로 줄여줘요.

Gazebo Classic vs Ignition Gazebo(Gazebo Harmonic)

많은 분들이 “Gazebo”라는 이름에 혼란을 겪어요. 과거에는 Gazebo Classic(버전 1~11)이 표준이었고, 2022년부터는 Ignition Gazebo가 새 이름 Gazebo(구버전과 구분하기 위해 때로 “New Gazebo”라고도 함)로 재출시됐어요. 2026년 현재 ROS 2 Jazzy·Kilted와의 공식 연동은 Gazebo Harmonic이 기본이에요. 본 가이드는 Gazebo Harmonic을 기준으로 설명해요.

주요 물리 엔진 비교

Gazebo는 여러 물리 엔진을 지원해요.

  • DART: 정밀한 강체 동역학, 휴머노이드 로봇에 적합
  • Bullet: 빠른 시뮬레이션 속도, 게임 산업에서도 사용
  • ODE: 오랜 역사, 안정적이지만 성능이 다소 낮음

대부분의 Physical AI 연구에서는 DART나 Bullet을 선택해요.

로봇 시뮬레이션 환경에서 동작하는 로봇의 모습
Photo by Boitumelo on Unsplash

Gazebo 설치 방법

시스템 요구 사항

Gazebo Harmonic은 Ubuntu 22.04 LTS(Jammy) 또는 Ubuntu 24.04 LTS(Noble)에서 공식 지원돼요. macOS와 Windows는 실험적 지원 수준이에요. 권장 사양은 CPU 4코어 이상, RAM 8GB 이상, GPU는 OpenGL 3.3 이상을 지원하는 NVIDIA 또는 AMD 카드예요. 가상머신에서도 동작하지만, GPU 가속이 없으면 렌더링 성능이 크게 떨어져요.

APT 패키지로 설치하기

Ubuntu 환경에서 가장 간단한 설치 방법은 OSRF 공식 APT 저장소를 이용하는 거예요.

  1. OSRF GPG 키 추가: sudo curl https://packages.osrfoundation.org/gazebo.gpg --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
  2. 저장소 등록 후 sudo apt update
  3. 패키지 설치: sudo apt install gz-harmonic

설치가 완료되면 터미널에서 gz sim 명령어로 Gazebo를 실행할 수 있어요.

Docker를 활용한 설치

환경 충돌이 걱정되거나 여러 버전을 관리해야 한다면 Docker를 추천해요. OSRF에서 공식 이미지를 제공하고 있어요.

  • 이미지 풀: docker pull osrf/ros:jazzy-desktop
  • GUI 지원을 위해 X11 포워딩이나 noVNC 설정이 필요해요
  • GPU 패스스루는 NVIDIA Container Toolkit으로 활성화해요

첫 번째 시뮬레이션 실행하기

내장 데모 월드 탐색

Gazebo를 설치했다면 먼저 내장 데모 월드를 실행해봐요. 터미널에서 gz sim shapes.sdf 를 입력하면 기본 도형들이 배치된 환경이 열려요. 여기서 왼쪽 패널의 물체를 클릭하면 물리 속성을 확인할 수 있고, 재생 버튼을 누르면 중력에 의해 도형들이 떨어지는 모습을 볼 수 있어요. 기본 인터페이스 구성은 다음과 같아요.

  • 씬 뷰: 중앙의 3D 뷰포트
  • 엔티티 트리: 왼쪽 패널, 월드 내 모든 객체 목록
  • 컴포넌트 뷰어: 선택한 객체의 속성 표시
  • 타임라인: 하단, 시뮬레이션 시간 제어

SDF 파일 이해하기

Gazebo는 SDF(Simulation Description Format)를 사용하여 로봇과 환경을 정의해요. SDF는 XML 기반 형식으로 URDF보다 더 풍부한 표현력을 갖고 있어요. 간단한 박스 모델의 SDF 구조는 다음과 같아요.

  • <world>: 전체 시뮬레이션 환경
  • <model>: 개별 로봇이나 객체
  • <link>: 강체 부분 (관성, 충돌, 시각적 요소 포함)
  • <joint>: 링크 간 연결부 (회전, 병진 등)

로봇 모델 불러오기

Gazebo에서는 Fuel 온라인 모델 저장소를 통해 다양한 로봇 모델을 무료로 가져올 수 있어요. Gazebo Fuel에서 원하는 모델을 검색하여 SDF 파일로 다운로드하거나, GUI에서 직접 드래그 앤 드롭으로 불러올 수 있어요. TurtleBot4, Spot, Unitree Go2 등 인기 로봇 모델들이 공개되어 있어요.

ROS 2와 Gazebo 연동하기

ros_gz 패키지 설치

Physical AI 개발에서 Gazebo 단독 사용보다는 ROS 2와 연동하는 경우가 대부분이에요. 이를 위해 ros_gz 패키지가 필요해요. ROS 2 Jazzy를 사용하고 있다면 다음 명령으로 설치해요.

  • sudo apt install ros-jazzy-ros-gz
  • 이 패키지는 ros_gz_bridge, ros_gz_sim, ros_gz_image 등을 포함해요

설치 후 ROS 2 환경을 소스하고 (source /opt/ros/jazzy/setup.bash) Gazebo를 실행하면 ROS 2 토픽과 Gazebo 메시지를 연결할 수 있어요.

토픽 브리지 설정

ros_gz_bridge는 ROS 2 토픽과 Gazebo 토픽 사이를 중계해주는 핵심 컴포넌트예요. 예를 들어 시뮬레이션 속 로봇의 카메라 이미지를 ROS 2 이미지 토픽으로 받으려면 브리지를 실행해요.

  • 형식: ros2 run ros_gz_bridge parameter_bridge /카메라_토픽@sensor_msgs/msg/Image[gz.msgs.Image
  • 레이저 스캔, IMU, 조인트 상태 등 다양한 메시지 타입을 지원해요
  • YAML 파일로 여러 브리지를 한 번에 설정할 수 있어요

launch 파일로 통합 실행

실제 프로젝트에서는 Gazebo 실행, 로봇 모델 스폰, 브리지, 컨트롤러까지 하나의 launch 파일로 묶어서 실행해요. ROS 2 launch 파일에서 IncludeLaunchDescription으로 Gazebo를 실행하고, Node로 브리지와 컨트롤러를 순차 실행하면 돼요. 이렇게 하면 단일 명령으로 전체 시뮬레이션 스택이 올라와요.

센서 시뮬레이션 구성하기

LiDAR와 카메라 설정

Gazebo Harmonic에서는 SDF 파일에 센서 플러그인을 추가하여 다양한 센서를 시뮬레이션할 수 있어요. 가장 많이 쓰이는 센서는 LiDAR(레이저 스캐너)와 RGB 카메라예요.

  • LiDAR: <sensor type="gpu_lidar"> 태그로 정의하며, 수평/수직 해상도, 최소·최대 거리, 노이즈 모델을 설정할 수 있어요
  • RGB 카메라: <sensor type="camera">로 해상도, 시야각(FOV), 업데이트 주기를 설정해요
  • 깊이 카메라: <sensor type="depth_camera">로 포인트클라우드 데이터를 생성할 수 있어요

IMU와 GPS 추가

드론이나 자율주행 로봇을 시뮬레이션할 때는 IMU(관성 측정 장치)와 GPS 센서가 필요해요. Gazebo의 IMU 플러그인은 가속도계, 자이로스코프 데이터를 제공하며 노이즈 특성도 현실적으로 모델링할 수 있어요. GPS는 NavSat 플러그인으로 위도·경도·고도 데이터를 출력해요. 이런 센서들을 조합하면 상태 추정 알고리즘을 시뮬레이션 환경에서 먼저 검증해볼 수 있어요.

접촉 센서와 힘/토크 센서

로봇의 그리퍼나 다리 끝 부분에는 접촉 센서가 중요해요. Gazebo의 Contact 센서 플러그인은 충돌 감지와 접촉력 정보를 제공해요. 조인트에 부착하는 힘/토크(FT) 센서는 매니퓰레이터의 힘 제어 연구에 필수적이에요. Physical AI에서 촉각 데이터는 갈수록 중요한 모달리티로 주목받고 있어요.

Sim-to-Real 전략과 고급 활용

도메인 랜덤화로 실환경 적응력 높이기

시뮬레이션에서 학습한 정책이 실제 로봇에서 그대로 동작하지 않는 현상을 Sim-to-Real 갭이라고 해요. 이를 줄이는 핵심 기법이 도메인 랜덤화(Domain Randomization)예요. Gazebo에서는 시뮬레이션 실행 시마다 물체의 질량, 마찰 계수, 조명 조건, 센서 노이즈 파라미터를 무작위로 변경할 수 있어요. 이런 다양한 조건에서 학습한 정책은 실환경의 불확실성에 더 강건해져요. Wikipedia – Domain Randomization에서 이 개념의 배경을 더 깊이 살펴볼 수 있어요.

병렬 시뮬레이션 환경 구성

강화학습에는 빠른 경험 수집을 위해 수십~수백 개의 환경을 병렬로 실행해야 해요. Gazebo는 여러 인스턴스를 동시에 실행하는 방식으로 병렬화할 수 있어요. 더 빠른 병렬 시뮬레이션이 필요하다면 Isaac Sim(NVIDIA)이나 PyBullet을 함께 활용하는 혼합 전략도 많이 쓰여요.

커스텀 플러그인 개발

Gazebo의 기능이 부족하다면 C++로 커스텀 플러그인을 개발할 수 있어요. 시스템 플러그인, 센서 플러그인, GUI 플러그인 세 가지 유형이 있어요. 예를 들어 특수한 액추에이터 모델이나 외부 API와의 통신 플러그인을 직접 작성하여 시뮬레이션에 통합할 수 있어요. OSRF에서 제공하는 공식 플러그인 개발 가이드와 예제 코드가 풍부하게 제공되어 있어요.

마치며: Gazebo로 Physical AI 연구를 가속하세요

Gazebo 로봇 시뮬레이션은 Physical AI 연구와 개발의 출발점이자 핵심 인프라예요. 비용 걱정 없이 다양한 시나리오를 실험하고, 위험한 상황도 안전하게 테스트하며, 학습 데이터를 대량으로 수집할 수 있어요. 처음에는 설치와 설정이 복잡하게 느껴지지만, 이 가이드를 따라 차근차근 진행하면 어렵지 않아요. Gazebo와 ROS 2를 능숙하게 다루는 것은 현대 로봇 연구자에게 필수 역량이 됐어요. 지금 바로 여러분만의 첫 번째 로봇 시뮬레이션 환경을 만들어보세요.