
Genesis 入門 (1) - 事始め
「Mac」で「Genesis」の「Hello, Genesis」を試したのでまとめました。
・Python 3.10
・macOS Sequoia 15.2
・Ubuntu 22.04
1. Genesis
「Genesis」は、ロボット工学、Embodied AI、Physical AIアプリケーション向けに設計された包括的な物理シミュレーションプラットフォームです。同時に複数の機能を備えています
2. MacでGenesisをはじめる
2-1. Minicondaの準備
pipだとうまくいかなかったので、「Miniconda」を使います。
(1) 「Miniconda」のインストール。
mkdir -p ~/miniconda3
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh
(2) アクティベート。
プロンプトが「(base) ~ %」になります。
source ~/miniconda3/bin/activate
2-2. Genesis のインストール
「Genesis」のインストール手順は、次のとおりです。
(1) Pythonの仮想環境の準備。
プロンプトが「(my_env) ~ %」になります。
conda create --name my_env python=3.10 -y
conda activate my_env
conda install pytorch torchvision torchaudio -c pytorch
(2) パッケージのインストール。
pip install genesis-world
自分の環境では、「pyrender」をインストールする必要がありました。
conda config --add channels conda-forge
conda install pyrender
2-3. Hello, Genesis の実行
「Hello, Genesis」のサンプルコードを試します。
(1) サンプルコードの実行。
「render_on_macos.py」を実行します。
git clone https://github.com/Genesis-Embodied-AI/Genesis
cd Genesis
python examples/render_on_macos.py -v

Genesisの動作確認 (1)https://t.co/dAM2T1IZG9 pic.twitter.com/jegeZVU8zh
— 布留川英一 / Hidekazu Furukawa (@npaka123) December 21, 2024
アームがロードされ、床に自由落下します。
3. UbuntuでGenesisをはじめる
3-1. Genesis のインストール
(1) Pythonの仮想環境の準備。
プロンプトが「(my_env) ~ %」になります。
python -m venv env
source env/bin/activate
pip install torch torchvision torchaudio
(2) パッケージのインストール。
pip install genesis-world
自分の環境では、「PyOpenGL==3.1.5」にダウングレードする必要がありました。
pip install PyOpenGL==3.1.5
3-2. Hello, Genesis の実行
「Hello, Genesis」のサンプルコードを試します。
(1) サンプルコードの実行。
「hello_genesis.py」を実行します。
git clone https://github.com/Genesis-Embodied-AI/Genesis
cd Genesis
python examples/tutorials/hello_genesis.py

アームがロードされ、床に自由落下します。
4. コードの説明
4-1. 初期化
gs.init() でGenesisを初期化します。
# 初期化
gs.init(backend=gs.cpu)
パラメータは、次のとおりです。
gs.init(
seed = None, # 乱数シード
precision = '32', # 精度レベル ('32'/'64')
debug = False, # デバッグ
eps = 1e-12, # EPS
backend = gs_backend.gpu, # バックエンドデバイス (gs.cpu/gs.cuda/gs.vulkan/gs.metal)
theme = 'dark', # カラーテーマ (dark/light/dumb)
logging_level = None, # ログレベル ('warning'など)
logger_verbose_time = False, # ログに時間情報を含めるか
)
4-2. シーンの作成
gs.Scene() でシーンを作成します。Genesis内のオブジェクト (ロボットやカメラなど) は、すべてシーンに配置されます。
scene = gs.Scene()
パラメータは、次のとおりです。
・sim_options (gs.options.SimOptions)
シミュレータ全体を構成するオプション。ソルバーを管理。
・coupler_options (gs.options.CouplerOptions)
異なるソルバー間のカプラーを構成するオプション。
・tool_options (gs.options.ToolOptions)
tool_solver (scene.sim.ToolSolver) を構成するオプション。
・rigid_options (gs.options.RigidOptions)
rigid_solver (scene.sim.RigidSolver) を構成するオプション。
・avatar_options (gs.options.AvatarOptions)
avatar_solver (scene.sim.AvatarSolver) を構成するオプション。
・mpm_options (gs.options.MPMOptions)
mpm_solver (scene.sim.MPMSolver) を構成するオプション。
・sph_options (gs.options.SPHOptions)
sph_solver (scene.sim.SPHSolver) を構成するオプション。
・fem_options (gs.options.FEMOptions)
fem_solver (scene.sim.FEMSolver) を構成するオプション。
・sf_options (gs.options.SFOptions)
sf_solver (scene.sim.SFSolver) を構成するオプション。
・pbd_options (gs.options.PBDOptions)
pbd_solver (scene.sim.PBDSolver) を構成するオプション。
・vis_options (gs.options.VisOptions)
visualizer (scene.visualizer) を構成するオプション。
インタラクティブビューアとカメラの両方を制御。
・viewer_options (gs.options.ViewerOptions)
viewer (scene.visualizer.viewer) を構成するオプション。
・renderer (gs.renderers.Renderer)
カメラが画像をレンダリングする際に使用するレンダラー。
インタラクティブビューアの動作には影響しない。
・show_viewer (bool)
インタラクティブビューアを表示するかどうかを指定。
・show_FPS (bool)
ターミナルに FPS を表示するかどうかを指定。
メソッドは、次のとおりです。
・add_entity() : シーンにエンティティを追加。
・add_light() : シーンにライトを追加。
・add_camera() : シーンにカメラを追加。
・add_emitter() : シーンに流体エミッターを追加。
・add_force_field() : シーンに力場を追加。
・build() : シーンのビルド。
・reset() : シーンのリセット。
・get_state() : シーンの現在の状態を取得。
・step() : シミュレーションを時間的に1ステップ進める。
・draw_debug_line() : ラインの描画。
・draw_debug_arrow() : 矢印の描画。
・draw_debug_frame() : 3軸座標フレームの描画。
・draw_debug_mesh() : メッシュの描画。
・draw_debug_sphere() : 球体の描画。
・draw_debug_box() : ボックスの描画。
・draw_debug_points() : ポイントの描画。
・clear_debug_objects() : デバッグオブジェクトのクリア。
少し複雑な例は、次のとおりです。
シミュレーションの dt を 0.01 秒に設定し、重力を設定し、インタラクティブビューアの初期カメラポーズを設定しています。
scene = gs.Scene(
sim_options=gs.options.SimOptions(
dt=0.01,
gravity=(0, 0, -10.0),
),
show_viewer=True,
viewer_options=gs.options.ViewerOptions(
camera_pos=(3.5, 0.0, 2.5),
camera_lookat=(0.0, 0.0, 0.5),
camera_fov=40,
),
)
4-3. シーンにエンティティを追加
scene.add_entity() でエンティティを追加します。
今回は、1つの平面と1つのアームを追加しています。
plane = scene.add_entity(gs.morphs.Plane())
franka = scene.add_entity(
gs.morphs.MJCF(file='xml/franka_emika_panda/panda.xml'),
)
・Entity
Genesis内のオブジェクト (ロボットやカメラなど) は、「Entity」で表します。add_entity() の最初のパラメータは「Morph」です。
・Morph
「Morph」は、「Entity」の geometry と pose をカプセル化します。「Morph」を使用することで、プリミティブや外部ファイルから「Entity」をインスタンス化できます。
franka = scene.add_entity(
gs.morphs.MJCF(
file = 'xml/franka_emika_panda/panda.xml'
pos = (0, 0, 0),
euler = (0, 0, 90), # オイラー (x-y-z 規則)
# quat = (1.0, 0.0, 0.0, 0.0), # クォータニオン (w-x-y-z 規則)
scale = 1.0,
),
)
・プリミティブ
サポートしているプリミティブは、次のとおりです。
・gs.morphs.Plane
・gs.morphs.Box
・gs.morphs.Cylinder
・gs.morphs.Sphere
移動タスクの学習では、様々な種類の組み込み地形と、gs.morphs.Terrain を介してユーザーが指定した高さマップから初期化された地形をサポートしています。
・外部ファイル
サポートしている外部ファイルは、次のとおりです。
・gs.morphs.MJCF
・gs.morphs.URDF
・gs.morphs.Mesh (*.obj, *.ply, *.stl, *.glb, *.gltf)
外部ファイルから読み込む場合は、file でファイルの場所を指定する必要があります。この時、絶対パスと相対パスの両方をサポートします。相対パスの場合は、現在の作業ディレクトリの相対パスだけでなく、genesis/assets 下のパスも検索します。
外部「URDF」を使用して Frankaアームをロードする場合は、「Morph」を gs.morphs.URDF(file='urdf/panda_bullet/panda.urdf', fixed=True) に変更します。ロボットのベースリンクとワールドを接続するジョイントタイプを既に指定している「MJCF」とは異なり、「URDF」にはこの情報が付属していません。そのため、デフォルトでは、「URDF」のロボットツリーのベースリンクはワールドから切断されています (より正確には、自由な6自由度ジョイントを介してワールドに接続されています)。したがって、ベースリンクを固定する場合は、morphs.URDF と morphs.Mesh に fixed=True を指定する必要があります。
4-4. シーンのビルド と インタラクティブビューアでの表示
scene.build()
for i in range(1000):
scene.step()
・シーンのビルド
scene.build() でシーンをビルドします。これにより、すべてが配置され、デバイスメモリが割り当てられ、シミュレーションの基礎となるデータフィールドが作成されます。
・インタラクティブビューア
シーンがビルドされると、インタラクティブビューアが表示されます。ビューアには、ビデオ録画・スクリーンショット・視覚化モード切り替えなどのキーボードショートカットが付属しています。
【おまけ】 Miniconda の主なコマンド
(1) baseにアクティベート (conda環境外からも可能)。
source ~/miniconda3/bin/activate
(2) my_envにアクティベート (conda環境内のみ)。
conda activate my_env
(3) 環境の一覧。
conda info --envs
(4) デアクティベート。
conda deactivate
(5) my_envの削除。
conda remove --name my_env --all