Genesis AI의 디버깅 인터페이스는 효율적이고 직관적인 디버깅 환경을 제공합니다. 이 인터페이스는 모든 Genesis 클래스에 구현된 __repr__() 메서드를 활용하여 객체의 내부 정보를 보기 쉽게 시각화합니다.
특히, IPython, pdb, 또는 ipdb를 활용한 디버깅에 익숙한 사용자들에게 유용하며, 이 외에도 기본 Python 셸에서도 사용할 수 있습니다.
IPython이 설치되어 있지 않다면, 아래 명령어로 설치합니다:
pip install ipython
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라는 유명한 로봇 팔로, 제네시스 시뮬레이션 환경에서 물리적 상호작용을 시뮬레이션하는 데 사용됩니다.
IPython 모드에서 scene을 입력하면 Scene 객체의 모든 내부 속성이 보기 좋게 출력됩니다.
예:
<gs.Scene>is_built: Scene이 빌드되었는지 여부 (True).dt: 시간 간격 (기본값 0.01초).uid: Scene 고유 ID ('69be70e-dc9574f508c7a4c4de957ceb5').solvers: Scene에 포함된 물리 엔진 리스트.scene.solvers
이처럼 scene.solvers를 입력하면 물리 솔버 리스트를 자세히 확인할 수 있습니다.

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

예:
franka.links[0]

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

커널의 종료는 exit()을 통해서 종료할 수 있습니다.
정적인 화면에서 실행했는데, 동적인 화면에서도 사용 가능한지 테스트 해보겠습니다.

드론이 날아가고 난 다음 scene, scene.solvers를 했을 때 제대로 된 동작을 하지 못 하는 것을 확인할 수 있었습니다. 화면이 종료된 다음 동작을 실시해서 그런가? 라는 생각이 들어서 이번엔
parser.add_argument("-v", "--vis", action="store_true", default=True)
의 default=True를 False로 고쳐 보이지 않는 화면으로 수정 후 진행해보겠습니다.

속도는 증가했으나, 아쉽게도 마찬가지로 동작하지 않았습니다.
이 부분에 대해서는 조금 더 이해하고, 더 알아본 다음 작성하도록 하겠습니다!!!
이 시스템은 객체 내부 구조를 계층적으로 탐색할 수 있도록 도와줍니다. 각 객체의 속성, 리스트, 중첩된 구조를 한눈에 파악할 수 있으며, 다음과 같은 장점이 있습니다:
1. 시각적 디버깅: 보기 좋게 정리된 정보 출력.
2. 직관적 탐색: 속성과 하위 객체를 클릭하듯 탐색.
3. 빠른 문제 해결: 복잡한 구조를 간단히 이해하고 오류를 찾아낼 수 있음.
복잡한 시뮬레이션 구조를 한눈에 확인할 수 있다는 점에서, 디버깅 과정에서의 시간 절약은 물론, 오류 추적 과정도 훨씬 단순화됩니다. 🚀