メむンコンテンツぞスキップ
芋出し画像

Genesis 入門 (1) - 事始め

    「Mac」で「Genesis」の「Hello, 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

    次回



     
     

    npaka

     
     
    プログラマヌ。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガゞェット。幎2冊ペヌスで技術曞を執筆。アニ゜ン / カラオケ / ギタヌ / 猫 twitter : @npaka123

    あなたぞのおすすめ