[Gazebo] (1) - Gazebo Introduction

2023. 7. 1. 17:26Ubuntu/Gazebo

이번 포스팅에서는 Gazebo 시뮬레이터에 대해 다뤄보고자 합니다.

 

제 지난 포스팅에서도 Gazebo와 ArduPilot SITL을 연동하여, Gazebo 내의 드론(iris)의 센서들의 정보를 받아오고, 드론에 제어 명령을 내리는 과정들을 수행했습니다.

 

2022.07.20 - [UAV/Software] - ArduPilot SITL 및 Gazebo 시뮬레이션 환경 구성

 

ArduPilot SITL 및 Gazebo 시뮬레이션 환경 구성

환경: Ubuntu 20.04 / ROS Noetic / Gazebo 11 - 2개의 터미널이 필요합니다. 편리한 사용을 위하여 terminator 라는 다중 터미널을 이용합니다. 설치 방법은 다음과 같습니다. sudo apt-get update sudo apt-get install ter

mkdrone.tistory.com

 

2022.07.20 - [UAV/Software] - ArduPilot SITL - MAVROS 연결하기

 

ArduPilot SITL - MAVROS 연결하기

환경: Ubuntu 20.04 / ROS Noetic / Gazebo 11 ROS는 정상적으로 설치되어 있다고 가정하고 이후 과정부터 진행하겠습니다. 혹시 해당 과정들이 궁금하신 분들은 아래 링크를 참고하셔서 진행하시면 됩니다

mkdrone.tistory.com

 

위 포스팅에서 볼 수 있듯 Gazebo는 개발한 제어 알고리즘 등을 실제 기체에 적용하기 전에, 가상 환경에서 미리 해당 알고리즘을 테스트하는 목적으로 사용합니다.


Gazebo 개요

 

Gazebo는 오픈 소스 3D 로봇 시뮬레이터로, 로봇, 드론, 자율차 등 다양한 시스템을 개발하고 시험하는 데 사용됩니다.

특히 Gazebo 시뮬레이터는 ROS(Robot Operating System)와 통합되어 있어, ROS 기반 시스템을 개발하는 데 매우 유용하게 사용할 수 있습니다. 이러한 Gazebo의 주요 기능 및 특징을 알아보겠습니다.

 


주요 기능 및 특징

 

1. 다양한 센서 모델 지원

Gazebo는 LiDAR(1D, 2D, 3D), Camera, Sonar 등 다양한 센서 플러그인을 지원합니다.

아래는 제가 사용 중인 드론 시뮬레이션 중 카메라 플러그인에 대한 스크립트 중 일부입니다. 

 

Camera Plugin Script

 

위 스크립트에는 Gazebo 내의 카메라 센서에 대한 여러 사양(위치, 화각, 해상도 등)이 파라미터 형태로 명시되어 있습니다. 해당 파라미터를 조절하여 카메라의 사양 정보를 조절할 수 있습니다.

 

또한 센서 플러그인이 오픈소스로 제공되기 때문에, 플러그인 블록에 플러그인 파일(.so)을 입력하고, 해당 플러그인 사용에 필요한 파라미터(데이터 갱신 주기, 토픽 명 등)를 작성합니다. 오픈 소스로 제공되므로 사용이 편리하며, 이는 Gazebo의 장점 중 하나라 할 수 있겠습니다. 플러그인 활용에 대한 자세한 설명은 아래 링크를 참고하시면 됩니다.

 

https://classic.gazebosim.org/tutorials?tut=ros_gzplugins 

 

Gazebo : Tutorial : Gazebo plugins in ROS

Tutorial: Using Gazebo plugins with ROS Gazebo plugins give your URDF models greater functionality and can tie in ROS messages and service calls for sensor output and motor input. In this tutorial we explain both how to setup preexisting plugins and how to

classic.gazebosim.org

 

Gazebo는 자체 노드에서 이러한 센서 정보를 토픽 형태로 발행하며, 각 토픽에 사용되는 메시지 형태는 센서 종류마다 다릅니다. 위 스크립트의 아래 부분을 자세히 보면,

 

Camera Info 관련 script

 

카메라 토픽 이름을 나타내는 부분이 있습니다. 위 부분에 따라 /drone/camera_image_raw 라는 토픽이 발행됩니다.

따라서 위 부분을 변경하면 발행되는 토픽 이름을 변경할 수 있습니다.

 

rqt_graph

 

센서 플러그인 스크립트 작성 및 import, 기타 환경 구성 등은 추후 포스팅에서 더욱 자세하게 다루겠습니다.

 


2. 물리 엔진

Gazebo에는 고사양의 물리 엔진이 적용되어 있어, 로봇의 움직임, 충돌, 센서 특성 등을 실제 환경과 유사하게 시험할 수 있다는 장점이 있습니다. 중력, 자기장 등 다양한 환경 요인과 관성 모멘트, 공기 저항 등 자체 요인, 모델에 가해지는 힘, 토크 등을 조절할 수 있습니다.

 

Physics Tab

 


 

3. 모델 다양성

Gazebo 자체에서 제공하는 다양한 로봇, 사물 등 모델을 사용할 수 있습니다. 또한 모델들은 스크립트 형태로 작성되므로, 공개되어 있다면 손쉽게 다른 사용자가 직접 제작한 커스텀 모델을 받아서 사용할 수 있습니다. 

 

https://github.com/osrf/gazebo_models

 

GitHub - osrf/gazebo_models: Gazebo database of SDF models. This is a predecessor to https://app.gazebosim.org

Gazebo database of SDF models. This is a predecessor to https://app.gazebosim.org - GitHub - osrf/gazebo_models: Gazebo database of SDF models. This is a predecessor to https://app.gazebosim.org

github.com

 


 

4. 가상 환경 구성의 용이성

 

Gazebo는 크게 World라는 파일 내에 여러 Model들이 존재하는 구조입니다. 아래는 제가 개발하던 시뮬레이션 환경 중 일부입니다.

 

Gazebo World 중 일부

 

위 사진에서, 자동차, 건물 등 각 객체가 하나의 모델이며, 이러한 모델들이 모여 하나의 world를 구성하는 것입니다.

또한 world 파일은 model 이외에도 위에서 언급한 물리 사양, 광원, 배경 등 환경 정보도 포함합니다.

이렇듯 원하는 모델들과 환경을 조합하여, 원하는 가상 환경(World)을 구성할 수 있다는 것이 Gazebo의 장점이자 특징이라고 할 수 있겠습니다.

 


 

5. ROS와의 통합

 

개요에서도 언급했듯이, Gazebo는 ROS와 통합되어 있어 ROS 기반 시스템 개발 및 시험에 매우 용이합니다.

예를 들어, 위 1번 항목을 보시면 Gazebo 노드가 카메라 데이터를 ROS topic 형태로 발행하는 것을 확인할 수 있습니다.

이러한 토픽을 subscribe 하여, 시뮬레이션 내의 카메라 영상을 처리하여 개발한 알고리즘(detection, tracking 등)을 시험할 수 있는 것입니다. 아래 실제 예시를 보여드리겠습니다.

 

Gazebo 내의 토픽 카메라를 이용한 객체 인식 예시

 

위 사진은 제가 진행했던 프로젝트 중, 드론이 상공에서 사람을 인식하는 시스템을 작성하여 Gazebo 내에서 테스트해 본 것입니다. 

드론에 달려있는 토픽 카메라의 영상이 YOLO 모델을 거쳐, 영상 내 사람을 person 클래스로 분류하고, Bounding Box로 사람을 나타내는 것을 보실 수 있습니다.

이렇듯, 카메라뿐만 아니라 시뮬레이션 내의 각종 센서들을 이용하여 ROS 시스템을 구성하고, 이를 테스트할 수 있습니다.

 


설치 및 실행

보통 ROS를 설치할 때, 풀버전을 설치하시면 같이 설치되어 있습니다. 그렇지 않은 경우 아래 링크를 따라 하시면 됩니다.

https://classic.gazebosim.org/tutorials?tut=install_ubuntu 

 

Gazebo : Tutorial : Ubuntu

Install Gazebo using Ubuntu packages This tutorial covers the installation of Gazebo packages using the packages.osrfoundation.org repository, designed for those who want to follow the faster development path but still a stable one. Some notes: Gazebo11 is

classic.gazebosim.org

 

설치가 정상적으로 되었다면, Application 목록에 뜨게 되며 아이콘을 클릭하여 실행할 수 있습니다.

또는 터미널에 gazebo 커맨드를 입력하여 실행 가능합니다.

 

terminal에서 command로 실행

 

수행 결과

Gazebo를 기본으로 실행하면, 위와 같은 화면이 뜨게 되며, 해당 환경은 empty.world라고 합니다.

이러한 empty world를 기반으로, 환경 요인을 결정하고 원하는 모델들을 추가하여, 개발하고자 하는 시스템을 시험할 환경을 구성해 나가는 것입니다.

 


라이브러리

Gazebo 설치 시 기본으로 설치되는 라이브러리와 함께 파일 구조에 대해 자세히 알아보겠습니다. 다음 명령어를 통해  /usr 디렉토리 하위의 Gazebo 라이브러리 디렉토리로 접근합니다.

 

cd /usr/share/gazebo-11

 

수행 결과 다음과 같은 디렉토리 구성을 확인하실 수 있습니다.

 

gazebo 라이브러리 구성

 

각 디렉토리는 다음의 파일들을 포함하고 있습니다.

 

디렉토리 명 설명
worlds 기본 .world 파일 포함
media model 구현에 필요한 texture, 이미지 포함
models world를 구성하는 model 포함  

 

예를 들어 world 디렉토리의 경우, 아래와 같이 기본 world 파일을 포함하고 있습니다. 저는 이것저것 추가로 설치한 게 있어서 구성은 조금 다를 수 있습니다.

 


world 파일을 지정하여 실행

위의 기본 world 파일 중 하나를 지정하여 Gazebo를 실행해보겠습니다.

다음의 두 가지 방법으로 실행할 수 있습니다. 예를 들어, 위 터미널에서 animated_box.world를 실행한다고 하면

 

#/usr/share/gazebo-11/worlds 디렉토리에서만 가능
gazebo animated_box.world 

# 어느 디렉토리에서나 실행 가능
gazebo --verbose worlds/animated_box/world

 

기본적으로는 gazebo 뒤에 world 파일을 지정하여 수행할 수 있습니다. 현재 터미널이 가리키는 디렉토리에 .world 파일이 있다면 첫 번째 커맨드처럼 world파일을 바로 지정하여 world를 열 수 있습니다.

두 번째로, --verbose argument를 통해, /usr 디렉토리 내의 world파일에 접근할 수 있습니다.

 

둘은 아래와 같이 Z축을 중심으로 빙빙 도는 box가 있는 world를 여는 결과를 보여줍니다.

 

수행 결과

 

 


마무리

오픈 소스답게 커뮤니티가 활성화되어 있습니다. 아래 Gazebo 커뮤니티에서 다른 사용자가 올린 여러 문제점(issue)들을 확인할 수 있으며, 개발하다 막히는 점들을 질문할 수도 있으니 유용하게 활용하시면 됩니다.

https://community.gazebosim.org/

 

 

Gazebo Community

The place where the Gazebo simulator's community meets

community.gazebosim.org

 

이번 포스팅은 여기서 마무리하며, 다음 포스팅에서는 본격적인 ROS로의 활용, 커스텀 모델 생성 등을 다뤄보겠습니다.

긴 글 읽어주셔서 감사합니다.

 

References

https://gazebosim.org/home

http://docs.ros.org/en/melodic/api/sensor_msgs/html/msg/Image.html