ホームページ > テクノロジー周辺機器 > AI > Genesis Physics Engine:Genesisを設定するための段階的なガイド

Genesis Physics Engine:Genesisを設定するための段階的なガイド

Christopher Nolan
リリース: 2025-03-01 09:54:09
オリジナル
334 人が閲覧しました

昨年、Genesisは、現実的な物理シミュレーション、インタラクティブ4Dワールドなどを作成するためのエキサイティングな新しいツールとしてリリースされました。私はそれを試してみたいと思っていましたが、それを機能させるのは簡単ではありませんでした。セットアップ中に多くの課題に直面したことを認めなければなりません。 

このチュートリアルでは、私が遭遇した問題を簡単に共有し、Google Colabといくつかのトリックを使用して最終的に実行した方法を示します。

Genesisの概要のみが必要な場合は、以前の記事「Genesis Physics Engine:Guide with Examples」をご覧ください。

創世記

での私の最初のセットアップエクスペリエンス

私が最初にGenesisで作業を始めたとき、私はドキュメントのインストール手順に従いました。すぐに、依存関係に問題が発生しました。 Genesisには、Taichi(1.7.x)と呼ばれるモジュールの特定のバージョンが必要ですが、私のmacosはそれをサポートしていませんでした。参照のために、私のMacは8歳です…。

いくつかの調査の後、私は他のユーザーが同じ問題を抱えていることに気付きました。何時間もの労力を費やして、その創世記を特定のPythonバージョンでのみ機能させることを発見した後、最終的にインストールしました。

しかし、新しい問題が発生しました。それは何もレンダリングせず、私はOpenGLにいくつかの問題を抱えていました。 GitHubからサンプルファイルを実行しようとしたとしても、より多くのエラーと競合に直面しました。

それから、私がそれを整理したと思ったとき、私は「ユニフォームではない」などのエラーが発生し始めました。 このプロセスを通して、私はオンラインで調査して、他の誰かが同じ問題に遭遇したかどうかを確認しました。それは私だけではなかったことが判明しました。多くの人が同じ困難に直面し、多くの人がスクリプトを機能させる解決策を見つけることができなかったようです。

私がどのようにして創世記を作ったか:Google Colab to the Rescue 最初のフラストレーションの後、私はProアカウントでGoogle Colabを試すことにしましたが、それはまさに自分が必要としているものであることが判明しました。 ColabのGPUリソ​​ースを使用して、:ができました

必要なすべての依存関係をインストールすることはまったくありません

GPUバックエンドを使用して、優れたパフォーマンスとリアルなレンダリングを実現します。

最後に、基本的な例を実行し、創世記の可能性を調べます。

NVIDIA A100-SXM4-40GBを選択しました。これは、Genesisシミュレーションを効率的に処理するのに十分なほど強力であることが証明されました。 

Google Colab環境をセットアップしてGenesisをインストールしたら、ドキュメントから最も簡単な例を実行しようとしました。

    この例は、CPUバックエンドでGenesisを初期化し、基本的なシーンを表示する必要があります。ただし、すぐに次のエラーに遭遇しました
  • エラーメッセージは、Genesisがシーンをレンダリングするためにグラフィカルウィンドウを作成しようとしていることを示していますが、Google Colabはリアルタイムの視覚化をサポートしていません。 Colabはローカルディスプレイにアクセスできないリモート環境で実行されるため、Gs.scene()のshow_viewer = trueパラメーターは、初期化が機能しません。エラーメッセージで提案されているように、私は視聴者を無効にするためにコードを変更しました:

import genesis as gs
gs.init(backend=gs.cpu)
scene = gs.Scene(show_viewer=True)
ログイン後にコピー
ログイン後にコピー
これにより、スクリプトがクラッシュせずに実行できました。ただし、このアプローチは、結果を直接視覚化する方法がなかったことを意味していました。

オンラインで見た後、他の人が同じ問題に直面していることを発見しました。多くの提案されたソリューションには、リモートOpenGL環境の構成またはXVFBを使用して仮想ディスプレイを作成することが含まれていました。残念ながら、おそらく環境の依存の競合と制限のために、これらの方法をColabで確実に動作させることができませんでした。 この時点で、より実用的な回避策が必要でした!

リアルタイムのレンダリングはColabでは選択肢ではなかったため、フレームごとにフレームごとに画像として保存することにしました。これらのアイデアを使用して、後でアニメーションに組み合わせることができる一連の画像を生成することができました。

実装と出力

このセクションでは、コードと私が得た出力の実装に​​ついて説明します。

GPU環境のセットアップ

まず、Genesis:

をインストールしました

それから、GPU加速のためのCUDAバックエンドで創世記を初期化しました。

これは私が得た出力です:

GenesisException: No display detected. Use show_viewer=False for headless mode.
ログイン後にコピー
ログイン後にコピー

シーンの作成と構築

scene = gs.Scene(show_viewer=False)
ログイン後にコピー
ログイン後にコピー
結果を保存するディレクトリを作成

最初に必要なのは、ジェネシスがレンダリングした画像を保存できるフォルダーでした。 

pip install genesis-world
ログイン後にコピー
ログイン後にコピー
os.makedirs()関数は、指定されたパスでsimulation_framesというフォルダーを作成し、存在する_ok =真の引数は、フォルダーが既に存在する場合、エラーが発生しないことを保証します。

このように、私はシミュレーションからすべてのフレームと出力を保存するための専用の場所を持っていました。

シーンを初期化

次に、オブジェクトを追加して対話できるシーンを作成する必要がありました。

gs.scene()新しいシミュレーション空間を初期化し、show_viewer = falseをリアルタイムの視覚化を無効にします。この時点で、私は空のシーンを構築し始める準備ができていました。
import genesis as gs
gs.init(backend=gs.cuda)
ログイン後にコピー
平面とボックスを追加します

シーンの準備ができたら、オブジェクトを追加し始めました。最初に地面として機能する飛行機を追加しました。

平面は、シミュレーションのフラットベースとして機能します。デフォルトでは、それは無限であり、X-Y軸に沿って平らになります。

次に、シーンにボックスを追加しました:

[Genesis] [INFO] Running on [NVIDIA A100-SXM4-40GB] with backend gs.cuda. Device memory: 39.56 GB.
[Genesis] [INFO] ? Genesis initialized. Version: 0.2.1, Seed: None, Precision: 32.
ログイン後にコピー
ボックスをシーンの中央にある(0、0、0)に設定し、幅0.5ユニット、背が高く、深いようにサイズを変更し、デフォルトよりも小さくなりました。

今、私は簡単なセットアップを持っていました:地面としての飛行機とその上に置かれた箱。

カメラを追加

シーンで何が起こっているかをキャプチャするために、カメラを追加しました。
import genesis as gs
gs.init(backend=gs.cpu)
scene = gs.Scene(show_viewer=True)
ログイン後にコピー
ログイン後にコピー

画像解像度を320x240ピクセルに設定し、テストに実用的な選択肢を設定し、カメラを(3.5、2.0、2.5)に配置しました。ボックスが焦点を合わせたままであることを確認するために、ボックスの中央のすぐ上のカメラを(0、0、0.5)狙いました。 30度の視野(FOV)を備えたカメラは、シーンの狭く焦点を絞った視点を捉えました。 

シーンを構築します

次のステップは、シミュレーションとレンダリングのためにシーンを作成するためのシーンを構築することでした。

GenesisはJust-in-Time(JIT)コンピレーションを使用してシミュレーションを最適化するため、このステップは重要です。シーンを構築したとき、創世記:
GenesisException: No display detected. Use show_viewer=False for headless mode.
ログイン後にコピー
ログイン後にコピー

シーン内のオブジェクトにメモリが割り当てられたメモリ。

レンダリングおよび物理的計算のためにGPUカーネルを準備しました。
  • シミュレーションがスムーズに実行されるために必要なすべてのデータ構造を設定します。
  • 今ではすべての準備が整いました。私の飛行機、箱、カメラがセットアップされ、シーンが構築されました。
  • 出力のレンダリングと保存
  • シミュレーションを視覚化するために、フレームごとに出力をレンダリングして保存しました。各フレームは、Simulation_Framesディレクトリに画像として保存されました。 

レンダリングプロセス中に、最初の数フレームが迅速にレンダリングされたこと(最大2,297 fps)になったが、シミュレーションが進むにつれてパフォーマンスが低下することを観察しました。 FPSは最終的にフレーム25によって約0.33 fpsに低下しました。これは、シミュレーションの計算の複雑さの増加、またはより大きなシーンのGPUリソ​​ースの制約の増加による可能性があります。

これは私が得た出力です:

これらは私が得た画像です:

scene = gs.Scene(show_viewer=False)
ログイン後にコピー
ログイン後にコピー

pip install genesis-world
ログイン後にコピー
ログイン後にコピー

Genesis Physics Engine:Genesisを設定するための段階的なガイド

Genesis Physics Engine:Genesisを設定するための段階的なガイド

Genesis Physics Engine:Genesisを設定するための段階的なガイド各画像は、カメラを通して見られるように、時間の経過とともに飛行機に関連してボックスがどのように動くかを示しています。シミュレーションはステップで実行され、各ステップでは、ボックスの位置が変更され、ボックスが動いているように見えます。

この例は、Genesisが単純な物理的相互作用をシミュレートして表示する方法を強調しています。このセットアップは基本的なものですが、シーンでオブジェクトがどのように動作するかについての良いアイデアを提供します。しかし、Genesisでより複雑で現実的なシナリオを完全に作成できます!次のセクションでは、これらの機能のいくつかを調べます。

創世記:機能と機能

オブジェクトとシーンの作成

Genesisを使用すると、さまざまなオブジェクトやモーフを追加することで、複雑なシーンを作成できます。オブジェクトは、飛行機、箱、球体などの単純なプリミティブから、ロボットや地形などのより複雑なエンティティまでさまざまです。

形状プリミティブ:

    gs.morphs.plane
  • gs.morphs.box
  • gs.morphs.cylinder
  • gs.morphs.sphere
外部ファイルのサポート:

    MJCF:gs.morphs.mjcf for mujoco xmlロボット構成。
  • urdf:gs.morphs.urdf Unified Robot説明フォーマットファイル。
  • メッシュ:.obj、.ply、.stl、.glb、および.gltf。
  • Genesisは、「モーフ」と呼ばれる統一された概念を使用して、ジオメトリとポーズ情報をカプセル化します。このオブジェクト指向設計により、メソッドを使用してエンティティと直接相互作用することができます。
レンダリングと視覚化

Genesisの重要な強みの1つは、高度なカメラ機能を使用して詳細な視覚出力を作成できることです。カメラは「ヘッドレスモード」で動作します。つまり、ディスプレイ画面を必要とせずに画像を生成できることを意味します。通常のカラー画像(RGB)、オブジェクトがどれだけ遠いかを示す深度マップ、シーンのさまざまな部分にラベルを付けるセグメンテーションマスク、表面の詳細を表す通常のマップなど、さまざまなタイプのビジュアルを作成できます。

ビデオの録画

カメラにシミュレーションの各フレームを自動的に記録できるようにすることで、ビデオを作成できます。録音中にカメラを移動して、ビデオをよりダイナミックで没入させることもできます。 たとえば、

カメラを構成して、フレームをキャプチャしながら、シーンの周りの円形のパスに移動するように構成できます。 cam.start_recording()関数は録音を開始し、シミュレーションの各ステップでカメラの位置が更新されます。すべてのフレームがキャプチャされたら、cam.stop_recording()はビデオを「video.mp4」として保存します。

最終的なビデオは、シミュレーションのスムーズなビューを提供し、オブジェクトがどのように相互作用して移動するかを示しています。 移動タスクの地形生成

ロボット工学とAIトレーニング用のさまざまな種類の地形を作成することもできます。 gs.morphs.terrainを使用してカスタム高さマップを提供することにより、組み込みの地形オプションを使用したり、独自のデザインを使用したりできます。これらの地形は、ロボットがどのように動くかをテストしてトレーニングするのに最適であり、ジェネシスはロボット研究のための優れたツールになります。

拡張性

シミュレーションをいくつかの方法でカスタマイズすることもできます。オブジェクトに現実的なテクスチャを追加して、よりリアルに見えるようにすることができます。また、モデルをインポートするための多くのファイル形式をサポートしており、フォーマットがサポートされていない場合は、追加することを要求できます。さらに、パーソナライズされたファイルと設定を使用して、独自のカスタムオブジェクトシェイプ(モーフと呼ばれる)を作成できます。

結論

このチュートリアルは、創世記を始めるのに役立つ簡単な例を提供しました。この強力な物理エンジンの仕組みを示すために、シーンの作成、オブジェクトの追加、出力のレンダリングなど、基本をカバーしました。

しかし、これは創世記ができることの始まりに過ぎません。強力なGPUや十分なメモリのような適切なハードウェアを使用すると、非常に多くの可能性があります。複雑なロボットシミュレーションや、AIトレーニング用の高品質のデータセットの作成に使用できます。セットアップは難しい場合がありますが、間違いなく大きな可能性を秘めたツールです!

以上がGenesis Physics Engine:Genesisを設定するための段階的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート