Genesis Interactive Information Access and Debugging

Cloud_ Ghost·2025년 1월 10일

Genesis

목록 보기
5/5

Genesis AI의 디버깅 인터페이스는 효율적이고 직관적인 디버깅 환경을 제공합니다. 이 인터페이스는 모든 Genesis 클래스에 구현된 __repr__() 메서드를 활용하여 객체의 내부 정보를 보기 쉽게 시각화합니다.
특히, IPython, pdb, 또는 ipdb를 활용한 디버깅에 익숙한 사용자들에게 유용하며, 이 외에도 기본 Python 셸에서도 사용할 수 있습니다.

🛠 Genesis 디버깅 인터페이스 사용법

설치 준비

IPython이 설치되어 있지 않다면, 아래 명령어로 설치합니다:

pip install ipython

scene 명령의 역할

IPython 등 대화형 쉘에서 scene을 입력하면 장면 내부의 모든 구성 요소가 텍스트로 출력됩니다.
포맷 및 컬러화된 출력은 정보의 가독성을 높여 초보자가 쉽게 이해하도록 돕습니다.
출력되는 정보에는 추가된 엔터티(평면, 로봇 팔 등)와 장면 속성들이 포함됩니다.

코드 예제

아래는 Genesis AI의 기본 객체를 생성하고 디버깅 인터페이스를 사용하는 간단한 코드 예제입니다:

import genesis as gs

gs.init()

# 새로운 Scene 생성
scene = gs.Scene(show_viewer=False)

# 평면(Plane) 엔티티 추가
plane = scene.add_entity(gs.morphs.Plane())

# Franka Emika Panda 로봇 팔 추가
franka = scene.add_entity(
    gs.morphs.MJCF(file='xml/franka_emika_panda/panda.xml'),
)

# 카메라 추가
cam_0 = scene.add_camera()

# Scene 빌드
scene.build()

# IPython 인터랙티브 모드 진입
import IPython; IPython.embed()

이 코드는 Scene 객체를 생성하고, 평면과 Franka 로봇 팔을 추가한 뒤 IPython에서 객체 내부를 탐색할 수 있도록 준비합니다.


이렇게 import IPython; IPython.embed() 를 하면 아래 터미널에 입력 가능한 화면이 생기며, 거기에 scene을 입력하면 아래와 같이 내용이 나오게 됩니다.

장면에 추가된 엔터티(plane, Franka arm)는 장면(scene)에 포함된 객체들입니다.

Plane: 일반적으로 기본 평면으로 작용하며 로봇 팔과 같은 객체를 배치할 기준을 제공합니다.
Franka arm: Franka Emika라는 유명한 로봇 팔로, 제네시스 시뮬레이션 환경에서 물리적 상호작용을 시뮬레이션하는 데 사용됩니다.


🔍 객체 내부 탐색

1. Scene 탐색

IPython 모드에서 scene을 입력하면 Scene 객체의 모든 내부 속성이 보기 좋게 출력됩니다.

예:

  • 객체 타입: <gs.Scene>
  • 속성 정보:
    • is_built: Scene이 빌드되었는지 여부 (True).
    • dt: 시간 간격 (기본값 0.01초).
    • uid: Scene 고유 ID ('69be70e-dc9574f508c7a4c4de957ceb5').
    • solvers: Scene에 포함된 물리 엔진 리스트.
scene.solvers

이처럼 scene.solvers를 입력하면 물리 솔버 리스트를 자세히 확인할 수 있습니다.


2. Franka 엔티티 탐색

franka를 입력하면 로봇 팔 객체에 대한 세부 정보를 확인할 수 있습니다:

  • geoms: 로봇의 물리적 충돌 형상 정보.
  • links: 로봇 팔의 각 링크 정보.

예:

franka.links[0]

위 명령어는 로봇 팔의 첫 번째 링크의 세부 정보를 보여줍니다:

  • geoms: 링크의 충돌 형상 리스트.
  • vgeoms: 시각적 형상 정보.
  • inertial_mass: 링크의 관성 질량.
  • idx: Scene 내 글로벌 인덱스.
  • joint: 링크와 연결된 관절 정보.

커널의 종료는 exit()을 통해서 종료할 수 있습니다.

Test (동적인 화면에서 동작 가능한가?)

정적인 화면에서 실행했는데, 동적인 화면에서도 사용 가능한지 테스트 해보겠습니다.

드론이 날아가고 난 다음 scene, scene.solvers를 했을 때 제대로 된 동작을 하지 못 하는 것을 확인할 수 있었습니다. 화면이 종료된 다음 동작을 실시해서 그런가? 라는 생각이 들어서 이번엔

parser.add_argument("-v", "--vis", action="store_true", default=True)

의 default=True를 False로 고쳐 보이지 않는 화면으로 수정 후 진행해보겠습니다.

속도는 증가했으나, 아쉽게도 마찬가지로 동작하지 않았습니다.

이 부분에 대해서는 조금 더 이해하고, 더 알아본 다음 작성하도록 하겠습니다!!!

💡 왜 유용한가요?

이 시스템은 객체 내부 구조를 계층적으로 탐색할 수 있도록 도와줍니다. 각 객체의 속성, 리스트, 중첩된 구조를 한눈에 파악할 수 있으며, 다음과 같은 장점이 있습니다:
1. 시각적 디버깅: 보기 좋게 정리된 정보 출력.
2. 직관적 탐색: 속성과 하위 객체를 클릭하듯 탐색.
3. 빠른 문제 해결: 복잡한 구조를 간단히 이해하고 오류를 찾아낼 수 있음.

복잡한 시뮬레이션 구조를 한눈에 확인할 수 있다는 점에서, 디버깅 과정에서의 시간 절약은 물론, 오류 추적 과정도 훨씬 단순화됩니다. 🚀

profile
행복합시다~

0개의 댓글