URDFモデル

サンプル

基底ルール

ディレクトリ構造

  • xacroファイルだけではなく、urdfファイルも生成して保管する [1]

  • コライダー用の3Dモデルファイル名にプリフィックス collider_ をつける

<MODEL_NAME>_description
|- urdf/
    |- <MODEL_NAME>.xacro
    |- <MODEL_NAME>.urdf
|- meshes/
    |- <LINK_NAME>.dae
    |- collider_<LINK_NAME>.stl
|- launch/
    |- display.launch.py
    |- display.rviz
|- CMakeLists.txt
|- package.xml

オブジェクトの命名ルール

システムの主体に応じた命名ルールを選択する

  • ROS主体: snake_case

  • AGX主体: MixedCase PascalCase_PascalCase

タイプ

ROS主体

AGX主体

モデル原点リンク

tf_origin

TF_Origin

ベースリンク

base_link

リンク(慣性あり)

<NAME>_link

RB_<NAME>

ダミーリンク(慣性なし)

dummy_<NAME>_link

Dummy_RB_<NAME>

位置参照用リンク

tf_<NAME>

TF_<NAME>

ジョイント

<NAME>_joint

Hinge_<NAME> など

ダミージョイント

dummy_joint_<NAME>

Dummy_LockJoint_<NAME>

リンク構造

  • モデル原点を表す空リンク TF_Origin を設ける [2]

  • [ROS_REP105] に従い、モデル本体の位置姿勢参照用に base_link を設ける

  • base_link は慣性をもたないダミーリンクとするか、慣性をもたせて機構の一部とする

  • ダミージョイントを次のとおり扱う

    • 名前にプリフィックス Dummy_ をつける

    • typefixed

    • parentchild に加え、必要に応じて origin を設定する

    • 他のパラメータは設定しない。

    # <joint name="Dummy_LockJoint_${parent}_${child}" type="fixed">
      <parent link="${parent}" />
      <child link="${child}" />
    </joint>
    

リンク構造の例(AGX主体の命名)

リンク構造

TF_Origin               # モデル座標系原点
|- Dummy_LockJoint_base # ダミージョイント
    |-base_link         # リンク(慣性あり)

Xacro

<link name="TF_Origin"/ >

<joint name="Dummy_LockJoint_base" type="fixed">
  <parent link="TF_Origin" />
  <child link="base_link" />
</joint>

<link name="base_link">
  <inertial>
     <!-- Inertial parameters -->
  <inertial/>
</link>

リンク構造

TF_Origin                   # モデル座標系原点
|- Dummy_LockJoint_Origin   # ダミージョイント
    |-RB_Body               # リンク(慣性あり)
        |- Dummy_LockJoint_Body_base   # ダミージョイント
            |- base_link               # ダミーリンク(慣性なし)

Xacro

<link name="TF_Origin"/ >

<joint name="Dummy_LockJoint_Origin" type="fixed">
  <parent link="TF_Origin" />
  <child link="RB_Body" />
</joint>

<link name="RB_Body">
  <inertial>
     <!-- Inertial parameters -->
  <inertial/>
</link>

<joint name="Dummy_LockJoint_Body_base" type="fixed">
  <parent link="RB_Body" />
  <child link="base_link" />
</joint>

<link name="base_link" />

メッシュファイル

  • visualcollision はCOLLADA(.dae)またはSTL(.stl)とする。推奨を次に示す。

    • visual : COLLADA(.dae)

    • collision : STL(.stl) [AGXUnity]

  • collision メッシュファイルは面を閉じること

    • 面が閉じていないと、正しく接触判定ができず、すり抜けが起きる

AGXにおけるダミーオブジェクトの扱い

AGX SDKのURDFインポーターはオブジェクトの名前に関係なく、RigidBodyやジョイントを生成する。 AGXでダミーとして扱う場合は、AGXオブジェクトの生成後、次の条件に従い独自で処理をすること。 全ての名前は大文字小文字を区別せずに扱う。

  • 名前にプリフィックス Dummy が入るジョイント

    1. 名前にプリフィックス TF が入るRigidBodyが存在する場合は、接続先のRigidBodyにObserverFrameをつける(以下例)

      • rb0: 名前にプリフィックス TF がある

      • rb1: rb0の名前のObserverFrameをrb1に設定する

    2. 対象のジョイントを削除する

  • 名前にプリフィックス DummyTF が入るRigidBody

    1. 対象のRigidBodyをシミュレーションから削除する

  • 名前に base_link がつくRigidBody

    1. 同じ名前のObserverFrameをRigidBodyにつける

    2. 不要であれば、対象のRigidBodyをシミュレーションから削除する

参考文献

[ROS_REP105]

ROS.org. REP 105 – Coordinate Frames for Mobile Platforms. ROS Enhancement Proposals (REPs), URL: https://www.ros.org/reps/rep-0105.html, (参照 2025-6-23).

付録: 方針

  • RVizなどのROSツールと共有できる構成としたい

  • 要確認。AGXUnityのSTLファイルインポートはシーンファイルに頂点データを保存する。シーンファイルが肥大化するので、使用を避けたい

[AGXUnity]

AGXUnity 3.0.1以前はCOLLADA(.dae)を使うこと。 STL(.stl)はメッシュ情報をシーンファイルに保存する仕様であり、シーンファイルのサイズが肥大化してしまう。