Gazebo의 구조와 이해

1 분 소요

Gazebo 의 구조와 이해


Gazebo는 물리시뮬레이션 오픈 소스 프로젝트로서, 대부분 로봇공학자의 필수적인 도구로 활용되고있다. 로봇을 설계하고, 회귀분석과 로봇의 현실적인 시나리오 동작을 가상시뮬레이션을 통해 검증 및 분석하여 사전설계 요소를 검증하거나, 혹은 데이터를 활용한 최근 이슈인 인공지능,빅데이터 와 같은 요소와 접목해 복잡한 실내 및 실외환경에 적합한 물리엔진, 고품격 그래픽과 프로그래밍 인터페이스를 제공한다.

현재 Gazebo는 Release 버전으로 Gazebo 11 까지 제공하고있으며 이러한 거대하고 가치있는 시뮬레이션은 다양한 패키지와 라이브러리를 활용해 누구나 사용 가능하도록 열려있다.

이 Post 에서는 Gazebo의 활용방법을 다루지 않는다. 복잡하고 불편한 글로 필자의 지식을 높이고자 개인적으로 정리한 글들을 쓰고 Gazebo 커뮤니티 내에서도 ‘고급’ 항목에 들어가는 내용을 다룰 것이다. 그렇지만, 누구나 보고 공부하고 이해할 수있는 글로 Gazebo의 내부 구조를 분석하고 공부하고자 한다.

Gazebo의 기능


Gazebo는 하기와 같은 기능을 사용자에게 제공하고있다.

  1. 물리 역학 시뮬레이션
  2. 고급 3D 그래픽
  3. 센서 및 노이즈
  4. 각종 별도의 Plugin API
  5. Robot Model
  6. TCP/IP를 활용한 시뮬레이션 솔루션
  7. 클라우드 기반의 시뮬레이션 솔루션
  8. 각종 Shell Command 기반 검사 및 제어

이렇게 쓰면, 이해하기 힘들지만 간단히 사진 몇장으로 이를 설명드리자면, 아래와 같다.

Relation

Relation

상기와 같은 솔루션은 Gazebo의 Node.js 기반의 gzserver 와 gzclient 기반으로 이루어진 Web 기반의 시뮬레이션 솔루션에 기반을 둔다고 볼 수 있다. 모두 비동기 형태로 제공되는 서버의 특성을 활용 했다고 볼 수 있으며, 엄청나게 최적화를 하는데 공을 들였다고 볼 수 있다.

여튼 두서가 길었다. Gazebo는 이러한 것이고 기능은 직접 활용해 보는것으로 충분히 확인이 가능하므로, 우리는 이 구조에 대해 이해하고자 한다.

Gazebo의 구조


Gazebo의 물리엔진은 크게 4개의 엔진으로 구성되어 있다.

영역 설명 링크
ODE Open Dynamic Engine으로 공간에서 물체간 동적 상호작용을 시뮬레이션하는데 활용되는 엔진이다.  
Bullet 충돌감지, 강체/연체 물리 시뮬레이션을 위한 2D 전문 물리 엔진이다. 영화의 특수효과 애니메이션 등에도 활용되고있다.  
Simbody 생체역학 및 기계 시스템 등에 활용되는 고품격 물체역학 물리 라이브러리이다. https://github.com/simbody
DART 실행 영역을 포함하는 메모리이거나 목적파일에 있는 프로그램 영역  

###

업데이트: