Gazebo 설치

Gazebo는 로봇 시뮬레이션을 위한 강력한 도구로, 다양한 물리 엔진과 센서 플러그인을 지원한다. Gazebo를 설치하기 위해서는 다음 단계를 따른다.

1. 시스템 업데이트

먼저 시스템을 최신 상태로 업데이트한다. Ubuntu와 같은 리눅스 배포판을 기준으로 설명하겠다.

sudo apt-get update
sudo apt-get upgrade

2. Gazebo 패키지 설치

다음으로, Gazebo의 최신 버전을 설치하기 위해 osrfoundation의 패키지를 추가하고 설치한다.

sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -sc) main" > /etc/apt/sources.list.d/gazebo-stable.list'
wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install gazebo11

위 명령어에서 gazebo11은 Gazebo의 11번째 버전을 설치한다. 만약 특정 버전을 설치하고자 한다면, gazebo9, gazebo10과 같은 버전을 지정하여 설치할 수 있다.

3. Gazebo 설치 확인

설치가 완료되면 Gazebo가 제대로 설치되었는지 확인한다. 터미널에 다음 명령어를 입력한다.

gazebo

정상적으로 설치되었다면 Gazebo GUI가 열리며, 이를 통해 시뮬레이션 환경을 시각적으로 확인할 수 있다.

Gazebo 기본 설정

Gazebo가 설치된 후, 기본 설정을 통해 시뮬레이션 환경을 효율적으로 구성할 수 있다. 여기서는 사용자 정의 환경 설정과 기본적인 초기 구성 파일을 다룬다.

1. 환경 변수 설정

Gazebo는 다양한 환경 변수를 통해 시뮬레이션 경로, 플러그인 위치 등을 지정할 수 있다. 이러한 변수를 설정하여 보다 효율적인 시뮬레이션 환경을 구축할 수 있다.

export GAZEBO_MODEL_PATH=~/gazebo_models:$GAZEBO_MODEL_PATH
export GAZEBO_PLUGIN_PATH=~/gazebo_plugins:$GAZEBO_PLUGIN_PATH

GAZEBO_MODEL_PATH는 사용자 정의 모델이 저장된 경로를 지정하며, GAZEBO_PLUGIN_PATH는 플러그인 경로를 설정한다.

2. SDF 및 URDF 파일 로드

Gazebo는 URDF 또는 SDF 파일을 통해 로봇 모델을 로드한다. 기본적인 URDF 파일을 로드하는 방법을 설명하겠다. roslaunch를 이용하여 URDF 파일을 로드한다.

roslaunch <패키지 이름> <파일 이름>.launch

이 명령어는 launch 파일을 실행하여 Gazebo에서 로봇 시뮬레이션을 시작한다.

3. Gazebo 물리 엔진 설정

Gazebo에서는 여러 물리 엔진을 지원하며, 이를 통해 현실감 있는 시뮬레이션을 구현할 수 있다. 대표적인 물리 엔진으로는 ODE(Open Dynamics Engine), Bullet, DART, Simbody 등이 있다. 기본적으로 Gazebo는 ODE 엔진을 사용하며, 물리 엔진의 파라미터를 통해 시뮬레이션의 정확도를 조정할 수 있다.

물리 엔진 설정 파일

Gazebo의 물리 엔진 설정은 world 파일 안에서 정의된다. 여기서는 ODE 물리 엔진을 사용하는 기본적인 설정 예시를 설명한다.

<physics type='ode'>
  <max_step_size>0.001</max_step_size>
  <real_time_factor>1</real_time_factor>
  <real_time_update_rate>1000</real_time_update_rate>
</physics>

4. Gazebo 플러그인 설정

Gazebo는 다양한 플러그인을 통해 로봇의 동작을 제어하고 센서를 시뮬레이션할 수 있다. 플러그인은 URDF 또는 SDF 파일 내에서 설정할 수 있으며, 플러그인에 의해 시뮬레이션 내에서 로봇의 행동이나 센서 데이터가 변경된다.

URDF에서 플러그인 설정

<gazebo>
  <plugin name="my_robot_control" filename="libmy_robot_control.so">
    <robotNamespace>/my_robot</robotNamespace>
    <controlTopic>/cmd_vel</controlTopic>
  </plugin>
</gazebo>

플러그인은 로봇의 물리적 특성, 센서, 동작 제어 등 다양한 역할을 수행할 수 있으며, 이는 사용자가 작성한 커스텀 플러그인으로 확장 가능한다.

5. Gazebo 월드 파일 설정

Gazebo에서 시뮬레이션 환경을 정의하는 world 파일은 로봇이 상호작용할 수 있는 지형, 빌딩, 조명, 카메라 등의 요소를 포함한다. 이 파일은 SDF 형식으로 작성되며, 다음과 같은 요소들이 포함될 수 있다.

기본적인 world 파일 예시

<world name="default">
  <include>
    <uri>model://ground_plane</uri>
  </include>
  <include>
    <uri>model://sun</uri>
  </include>
</world>

월드 파일을 통해 다양한 환경 설정이 가능하며, 로봇의 센서와 상호작용하는 복잡한 시뮬레이션 환경을 만들 수 있다.

6. 시뮬레이션 환경 최적화

Gazebo 시뮬레이션은 복잡한 물리 엔진, 센서, 로봇 모델을 사용하기 때문에 컴퓨터 성능에 따라 성능 최적화가 필요할 수 있다. 시뮬레이션 성능을 최적화하기 위해 다음과 같은 설정을 조정할 수 있다.

그래픽 설정

Gazebo의 그래픽 설정을 낮추면 시뮬레이션이 보다 원활하게 실행될 수 있다. 다음은 그래픽 관련 설정이다.

gzclient --rendering-off

이 명령어를 사용하면 Gazebo의 GUI가 비활성화되며, 그래픽 렌더링 없이 시뮬레이션을 실행할 수 있어 성능이 향상된다.

CPU 및 메모리 관리

Gazebo는 CPU와 메모리 사용량이 많은 프로그램이다. 따라서 다중 코어 프로세서를 사용하는 시스템에서는 CPU 코어를 효율적으로 분배하여 Gazebo의 성능을 향상시킬 수 있다. 이를 위해 다음과 같은 리눅스 명령어를 사용할 수 있다.

taskset -c 0-3 gazebo

위 명령어는 Gazebo가 CPU의 0번부터 3번까지의 코어에서 실행되도록 설정한다. 이를 통해 나머지 코어는 다른 작업을 처리할 수 있다.

7. Gazebo 시작 스크립트 작성

Gazebo를 실행할 때마다 여러 설정 파일과 명령어를 입력하는 것은 번거로울 수 있다. 이를 해결하기 위해, 시작 스크립트를 작성하여 여러 설정을 자동으로 로드할 수 있다.

기본적인 Gazebo 시작 스크립트

#!/bin/bash

export GAZEBO_MODEL_PATH=~/gazebo_models:$GAZEBO_MODEL_PATH
export GAZEBO_PLUGIN_PATH=~/gazebo_plugins:$GAZEBO_PLUGIN_PATH

gazebo --verbose

이 스크립트는 Gazebo 실행에 필요한 환경 변수를 설정하고 Gazebo를 실행한다. 이 파일을 start_gazebo.sh라는 이름으로 저장한 후, 다음 명령어로 실행 권한을 부여하고 실행할 수 있다.

chmod +x start_gazebo.sh
./start_gazebo.sh

자동으로 URDF 파일 로드하기

이제 start_gazebo.sh 스크립트에 로봇 모델을 자동으로 불러오는 코드를 추가해보겠다. 이를 통해 Gazebo 실행과 동시에 로봇 모델이 시뮬레이션 환경에 로드된다.

#!/bin/bash

export GAZEBO_MODEL_PATH=~/gazebo_models:$GAZEBO_MODEL_PATH
export GAZEBO_PLUGIN_PATH=~/gazebo_plugins:$GAZEBO_PLUGIN_PATH

roslaunch <패키지 이름> <파일 이름>.launch

roslaunch 명령어를 사용하면 URDF 파일을 자동으로 로드하고, 로봇 모델이 Gazebo 내에서 시뮬레이션될 수 있다.

8. Gazebo 사용자 인터페이스(UI) 설정

Gazebo의 사용자 인터페이스는 시뮬레이션을 보다 직관적으로 제어할 수 있는 도구를 제공한다. 기본적으로 제공되는 UI는 다음과 같은 주요 기능을 포함한다.

시뮬레이션 제어 패널

시뮬레이션 제어 패널은 Gazebo 화면의 상단에 위치하며, 시뮬레이션 실행, 일시 정지, 재시작 등의 기능을 제공한다.

3D 뷰 컨트롤

마우스를 사용하여 Gazebo의 3D 환경을 자유롭게 이동할 수 있다. 로봇 모델을 다양한 각도에서 확인할 수 있으며, 다음과 같은 단축키를 사용하여 3D 뷰를 제어할 수 있다.

GUI 요소 추가

Gazebo의 기본 GUI 외에도, 사용자 정의 인터페이스를 추가하여 다양한 데이터를 실시간으로 모니터링할 수 있다. 이를 위해 플러그인을 통해 추가적인 데이터를 시각화할 수 있다.

예를 들어, 시뮬레이션 중 로봇의 센서 데이터를 실시간으로 모니터링하는 플러그인을 추가하여 Gazebo 화면에 센서 출력을 표시할 수 있다.

<plugin name="sensor_display" filename="libsensor_display.so">
  <update_rate>30</update_rate>
</plugin>

update_rate는 초당 업데이트 횟수를 설정한다. 이 플러그인은 센서 데이터를 Gazebo GUI에 시각적으로 출력하는 역할을 한다.

9. Gazebo 로그 및 기록 설정

Gazebo는 시뮬레이션 동안 발생하는 모든 이벤트를 기록할 수 있는 기능을 제공한다. 이를 통해 시뮬레이션 결과를 저장하고, 이후 분석을 위해 사용할 수 있다.

로그 기록 시작

다음 명령어를 통해 Gazebo의 로그 기록을 시작할 수 있다.

gazebo --record path_to_world_file.world

이 명령어는 시뮬레이션을 실행하면서 발생하는 이벤트와 데이터를 기록한다.

로그 재생

기록된 로그 파일은 다음 명령어를 통해 재생할 수 있다.

gazebo --playback path_to_log_file.log

이를 통해 기록된 시뮬레이션을 다시 확인할 수 있으며, 데이터를 기반으로 추가적인 분석을 수행할 수 있다.

로그 파일 분석

로그 파일을 분석하기 위해 다양한 도구를 사용할 수 있으며, 특히 로봇의 동작 데이터를 수집하고 분석하는 데 유용하다. Gazebo에서 제공하는 기본적인 분석 도구를 사용하여 로그 데이터를 그래프로 시각화할 수 있다.