Genesis 入門 (8) - インタラクティブ情報へのアクセスとデバッグ
「Genesis」の「インタラクティブ情報へのアクセス」と「デバッグ」についてまとめました。
前回
1. インタラクティブ情報へのアクセスとデバッグ
「Genesis」では、「Genesis」で作成されたオブジェクトの内部情報にアクセスするためのインターフェースを提供しています。これは、すべての「Genesis」クラスに対して __repr__() を介して実装されています。この機能は、IPython・pdb・ipdb でのデバッグに慣れている場合に非常に役立ちます。
今回は IPython を使用します。インストールしていない場合は、pip install ipython でインストールしてください。
import genesis as gs
# 初期化
gs.init()
# シーンの作成
scene = gs.Scene(show_viewer=False)
# シーンにエンティティを追加
plane = scene.add_entity(gs.morphs.Plane())
franka = scene.add_entity(
gs.morphs.MJCF(file='xml/franka_emika_panda/panda.xml'),
)
cam_0 = scene.add_camera()
# シーンのビルド
scene.build()
# IPythonのインタラクティブモードに入る
import IPython; IPython.embed()このスクリプトを直接実行することもできます (IPython がインストールされている場合)。または、ターミナルで IPython インタラクティブウィンドウに入り、最後の行を除いたコードをここに貼り付けることもできます。
この小さなコードブロックでは、平面エンティティと Frankaアームを追加しました。初心者の場合、シーンに実際に何が含まれているのか疑問に思うかもしれません。IPython (または ipdb・pdb・ネイティブのPythonシェル) で scene と入力するだけで、シーン内のすべての内容が適切にフォーマットされ、色付けされて表示されます。

一番上の行には、オブジェクトのタイプ (この場合は <gs.Scene>) が表示されます。次に、その中の利用可能なすべての属性が表示されます。たとえば、シーンが構築されていること (is_built が True)、そのタイムステップ (dt) が 0.01 秒の浮動小数点数であること、その一意の ID (uid) が '69be70e-dc9574f508c7a4c4de957ceb5' であることがわかります。シーンには、solvers と呼ばれる属性もあります。これは、基本的に、そのシーンが持つさまざまな物理ソルバーのリストです。さらに、シェル内で scene.solvers と入力して、このリストを調べることができます。このリストは、より見やすくするために、gs.List クラスを使用して実装されています。

Franka エンティティを検査することもできます。

ここでは、すべての geom と links、および関連情報が表示されます。さらに1層深く進み、franka.links[0] と入力します。

ここでは、リンクに含まれるすべての衝突ジオメトリ (geoms) とビジュアルジオメトリ (vgeoms)、およびその他の重要な情報 (intertial_mass)、シーン内のリンクのグローバル インデックス (idx)、リンクが属するエンティティ (entity)、ジョイント (joint) などが表示されます。
