要約
- 5分でインストール可能:
pip install genesis-worldまたは GPU加速を目的とした Docker を使用 - 剛体、関節型、ソフトボディのシミュレーションを YAML/JSON で設定—基本的な構成には コーディング不要
- 1万環境以上の並列環境を Ray または MPI を用いて 強化学習(RL)トレーニング に活用
- URDF/MJCF形式のロボットを 1コマンド でインポートし、Python API を介して LiDAR や カメラ などのセンサーを追加
- Stable Baselines3 や RLlib を用いて 大規模トレーニング を実施し、分析用に CSV/JSON 形式でデータをエクスポート
1. インストールと最初のシーン作成
Genesis のインストール
ハードウェアやワークフローに応じてインストール方法を選択してください。
オプション1:pip インストール(ほとんどのユーザーにおすすめ)
pip install "genesis-world>=2.4.0" --upgrade
インストール確認:
python -c "import genesis; print(genesis.__version__)"
期待される出力:
2.4.0
オプション2:Docker(GPU加速)
docker pull genesisworld/genesis:latest
docker run --gpus all -it genesisworld/genesis:latest python -c "import genesis; print('GPU detected:', genesis.is_gpu_available())"
期待される出力:
GPU detected: True
オプション3:ソースからのインストール(開発用)
git clone https://github.com/genesis-sim/genesis.git
cd genesis
pip install -e ".[dev]" # テストやリントツールを含む開発依存関係をインストール
初めてのシーン作成
Genesis は YAML/JSON を用いて環境を設定します。まずは単純な 2Dワールド から始めましょう。
-
simple_world.yamlを作成:name: "シンプルな2Dワールド" description: "1台のエージェントと静的障害物が存在する基本的な環境" physics: engine: "pybullet" # "pybullet"、"mujoco"、または "custom" をサポート gravity: [0.0, 0.0, -9.81] agents: - name: "agent_0" type: "circle" radius: 0.5 color: [0.0, 0.5, 1.0] # RGB initial_position: [0.0, 0.0] obstacles: - type: "rectangle" width: 2.0 height: 0.2 position: [0.0, -1.0] color: [0.5, 0.0, 0.0] -
シミュレーションを実行:
python -m genesis run --config simple_world.yaml --headless False期待される出力: エージェントと障害物が表示された 2Dレンダリングウィンドウ が開きます。
注意点
- エラー:
ModuleNotFoundError: No module named 'pybullet'→ PyBullet をインストールしてください:pip install pybullet - エラー:
CUDA not available→ DockerのGPUコマンド を使用するか、または CUDAドライバ をインストールしてください。詳細は Genesis ドキュメント をご覧ください。
2. 剛体、関節型、ソフトボディのシミュレーション
剛体物理
simple_world.yaml を修正し、剛体ロボットを追加します:
agents:
- name: "robot_arm"
type: "urdf"
urdf_file: "path/to/robot.urdf"
initial_position: [1.0, 0.0]
joints:
- name: "joint_1"
type: "revolute"
lower_limit: -1.57
upper_limit: 1.57
関節型ボディ(URDF/MJCF)
-
サンプル URDF をダウンロード(例:ROS Industrial から):
wget https://raw.githubusercontent.com/ros-industrial/franka_description/master/urdf/franka_panda.urdf -O panda.urdf -
simple_world.yamlを更新:physics: engine: "mujoco" # 関節型ボディにはより適したエンジン agents: - name: "panda" type: "urdf" urdf_file: "panda.urdf" initial_position: [0.0, 0.0, 0.5] -
実行:
python -m genesis run --config simple_world.yaml
ソフトボディダイナミクス(v2.4.0 新機能)
設定ファイルでソフトボディ物理を有効化:
physics:
engine: "pybullet"
soft_body:
enabled: True
stiffness: 0.5
damping: 0.1
agents:
- name: "soft_robot"
type: "mesh"
mesh_file: "soft_robot.obj"
material:
type: "soft"
friction: 0.3
3. データ生成のための並列環境
Genesis は 高スループットシミュレーション に優れており、RL データ収集に最適です。Ray を用いて分散環境を構築します。
ステップ1:Ray のインストール
pip install "ray[default]"
ステップ2:並列ワールドの設定
parallel_worlds.yaml を作成:
num_environments: 1000 # 最大1万環境までスケール可能
base_config: "simple_world.yaml" # 既存の設定ファイルを再利用
randomization:
agent_position: True
obstacle_count: [0, 5] # 各環境のランダムな障害物数
ステップ3:分散シミュレーションの起動
python -m genesis parallel --config parallel_worlds.yaml --backend ray --num_cpus 8
期待される出力:
[Genesis] 8つのCPUにわたり1000環境を起動しました。
[Genesis] データエクスポートが有効化されました:/tmp/genesis_data/
RL 用データのエクスポート
Genesis は自動的に /tmp/genesis_data/(設定可能)にデータを保存します。Python で読み込みます:
import pandas as pd
df = pd.read_csv("/tmp/genesis_data/agent_trajectories.csv")
print(df.head())
4. URDF/MJCF ロボットのインポート
URDF の例
.urdfファイルをrobots/ディレクトリに配置します。simple_world.yamlを更新:agents: - name: "my_robot" type: "urdf" urdf_file: "robots/my_robot.urdf" initial_position: [0.0, 0.0, 0.1] sensors: - type: "lidar" range: 5.0 resolution: 0.1
MJCF の例
- MuJoCo のツールを用いて MJCF を URDF に変換 します。
- 設定ファイルの
urdf_fileフィールドを使用します。
URDF の検証
python -m genesis validate --urdf robots/my_robot.urdf
期待される出力:
[Genesis] URDF の検証に成功しました。
[Genesis] ジョイント数: 6 (回転: 4, 直動: 2)
5. センサーとレンダリング
エージェントにセンサーを追加
simple_world.yaml を拡張:
agents:
- name: "sensor_agent"
type: "circle"
sensors:
- type: "camera"
resolution: [64, 64]
fov: 90
position: [0.0, 0.0, 0.2]
- type: "lidar"
range: 3.0
num_beams: 360
センサーデータのレンダリング
可視化モードで実行:
python -m genesis run --config simple_world.yaml --render_sensors True
期待される出力: リアルタイムセンサー表示(カメラ画像、LiDAR スキャン)が表示されたウィンドウが開きます。
レンダリングの保存
python -m genesis run --config simple_world.yaml --output_dir ./renders --save_frames True
出力:
./renders/ に frame_001.png、frame_002.png などのフレームが保存されます。
6. 大規模ポリシーのトレーニング
Stable Baselines3 との統合
-
RL 依存関係をインストール:
pip install stable-baselines3[extra] -
Genesis 用のカスタム環境ラッパー (
genesis_env.py) を作成:from genesis import GenesisEnv from stable_baselines3.common.env_checker import check_env class GenesisWrapper(GenesisEnv): def __init__(self, config_path="simple_world.yaml"): super().__init__(config_path) self.observation_space = self._get_obs_space() self.action_space = self._get_action_space() def _get_obs_space(self): # センサー(例:カメラ + LiDAR)に基づいて定義 return gym.spaces.Box(low=-1, high=1, shape=(64*64*3 + 360,)) def _get_action_space(self): # ロボットの自由度に合わせる return gym.spaces.Box(low=-1, high=1, shape=(6,)) env = GenesisWrapper() check_env(env) # 環境の検証 -
PPO ポリシーのトレーニング:
from stable_baselines3 import PPO model = PPO("MlpPolicy", env, verbose=1) model.learn(total_timesteps=10000) model.save("ppo_genesis")
分散 RL(RLlib)
pip install ray[rllib]
RLlib を用いてトレーニング:
from rllib_genesis import GenesisEnv
from ray.rllib.algorithms.ppo import PPOConfig
config = PPOConfig()
config.env_config["config_path"] = "simple_world.yaml"
config.env_config["num_environments"] = 10
config.num_workers = 4
trainer = config.build()
for i in range(10):
result = trainer.train()
print(f"イテレーション {i}, 報酬: {result['episode_reward_mean']}")
7. Genesis、Isaac Lab、MuJoCo の比較
| 機能 | Genesis | NVIDIA Isaac Lab | MuJoCo |
|---|---|---|---|
| マルチエージェント対応 | 1万エージェント以上 (分散処理) | 1000エージェント以上 (GPU最適化) | 単一エージェント中心 |
| 物理エンジン | PyBullet、MuJoCo、カスタム | PhysX (GPU加速) | Bullet、カスタム物理 |
| RL 統合 | Stable Baselines3、RLlib、PettingZoo | Isaac Gym、OmniGraph | OpenAI Gym、カスタムラッパー |
| ダイナミックワールド | 対応 (地形、リソース) | 対応 (手法生成) | 非対応 (静的環境) |
| レンダリング | Matplotlib、PyGame、OpenGL | Omniverse (高精細) | 基本的 (デフォルトはヘッドレス) |
| 使いやすさ | YAML/JSON設定 + Python API | OmniGraph (ビジュアルスクリプティング) | XMLベース (学習曲線が急) |
| クラウド展開 | AWS/GCP テンプレート | NVIDIA Omniverse Cloud | 非対応 |
| コスト | 無料 (OSS) | 無料 (OSS)、エンタープライズサポート | 無料 (OSS)、商用ライセンス |
Genesis を選ぶべきシーン:
- 高スループットマルチエージェントシミュレーション が必要な場合(例:スワームロボティクス、交通シミュレーション)。
- ダイナミックで手法生成されたワールド を扱う場合。
- Python ファーストワークフロー を好む場合(YAML 設定)。
Isaac Lab を選ぶべきシーン:
- 高精細3Dレンダリング が必要な場合(例:ロボットの知覚スタック)。
- Omniverse または NVIDIA ハードウェア を使用しているチーム。
MuJoCo を選ぶべきシーン:
- 単一エージェント RL で 高精度物理 が必要な場合。
- プロトタイプ構築 で 最小限のセットアップ を望む場合。
次のステップ
- 並列ワールドの実験:1000環境 にスケールアップし、RL 用データをエクスポートしてください。
- ロボットとの統合:
simple_world.yamlを URDF/MJCF に置き換え、センサー融合をテストしてください。 - クラウド展開:Genesis の AWS/GCP テンプレート を利用し、大規模シミュレーションを実行してください。
カスタム物理AIソリューション—シミュレーションからデプロイまで—について、Hyperion Consulting の Physical AI レディネスオーディット をご利用ください。これは、チームがエンサンブルシステムをより迅速に実装できるようサポートします。
