open-rdc / IsaacLabInvestigation

0 stars 0 forks source link

既存環境への外部からのモデルのインポート方法の調査 #4

Open aiba0921 opened 3 months ago

aiba0921 commented 3 months ago

Isaac Labを使用する上で、今後G1やH1等の既存のモデル以外にも各々で用意したモデルを使用する必要が出てくる。そのため外部からモデルをインポートする方法を調査する

aiba0921 commented 3 months ago
  1. Isaac Labのディレクトリ内に自分がインポートしたいurdfファイルをとそのメッシュファイル等が入ったディレクトリを作成する
  2. 以下を実行しurdfファイルをusdファイルに変換する。保存するディレクトリは自由で構わないと思われる。(自分はマニュアルの保存先そのままにした)
    ./isaaclab.sh -p source/standalone/tools/convert_urdf.py \
    your_urdf_directory/your_urdf_name.urdf \
    source/extensions/omni.isaac.lab_assets/data/Robots/ANYbotics/your_usd_name.usd \
    --merge-joints \
    --make-instanceable
aiba0921 commented 3 months ago

デモ環境へのインポート方法

モデルについて

3.以下のように追加したモデルのこの環境での名称やパスを指定する基本的にここは各固有の名称以外は他のモデルと同様で構わない
# Robots
cassie = Articulation(CASSIE_CFG.replace(prim_path="/World/Cassie"))
h1 = Articulation(H1_CFG.replace(prim_path="/World/H1"))
g1 = Articulation(G1_CFG.replace(prim_path="/World/G1"))
robotis_op2 = Articulation(ROBOTISOP2_CFG.replace(prim_path="/World/robotis_op2")) # 追加分
robots = [cassie, h1, g1, robotis_op2]

4.`./isaaclab.sh -p source/standalone/demos/bipeds.py`を実効すると以下のようにモデルをインポートすることができる
<img src="https://github.com/user-attachments/assets/164e6755-f209-4dee-b2e1-cd157055dfc9" width="320">
aiba0921 commented 3 months ago

既存学習環境へのインポート方法

from .rough_env_cfg import G1RoughEnvCfg
  1. rough_env_cfg.py内の以下のG1_MINIMAL_CFGの部分をunitree.pyで指定した自身のロボットの名称に変更する
    from omni.isaac.lab_assets import G1_MINIMAL_CFG  # isort: skip
  2. class G1Rewards~G1RoughEnvCfgについては各クラス内のbody_names=joint_names=の項目を自身のモデルのlinkの名称やjointの名称に変更すれば良い。
  3. flat_env_cfg.py内に唯一記述されているモデルについての部分が以下になっており、この部分を自分のモデルの名称に変更する
        self.rewards.dof_torques_l2.params["asset_cfg"] = SceneEntityCfg(
            "robot", joint_names=[".*_hip_.*", ".*_knee_joint"]
        )

    学習の実行

    • あくまで既存のG1で平地歩行を行う学習環境に自身のモデルをインポートしているだけなので学習を開始する際に入力するコマンドは以下のように既存のものそのままである。
      ./isaaclab.sh -p source/standalone/workflows/rsl_rl/train.py --task Isaac-Velocity-Flat-G1-v0 --headless

      学習済みモデルを用いた制御

    • こちらも既存のコマンドと同様である
      ./isaaclab.sh -p source/standalone/workflows/rsl_rl/play.py --task Isaac-Velocity-Flat-G1-v0 --num_envs 32 --load_run 2024-08-16_15-58-55 --checkpoint model_1499.pt

      全体的に不自然さはまだ残っているがそれでも、既存の環境のモデルに関する部分を書き換えて1500エピソード学習を行っただけでここまで動けるようになっている。あとは報酬のスケールや各関節の目標位置などの調整である。(自然な歩行をさせる場合このパラメータ調整が一番重要で大変)

ROBOTIS-OP2_1500episode.webm