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_caseAGX主体: MixedCase
PascalCase_PascalCase
タイプ |
ROS主体 |
AGX主体 |
|---|---|---|
モデル原点リンク |
|
|
ベースリンク |
|
← |
リンク(慣性あり) |
|
|
ダミーリンク(慣性なし) |
|
|
位置参照用リンク |
|
|
ジョイント |
|
|
ダミージョイント |
|
|
リンク構造
モデル原点を表す空リンク
TF_Originを設ける [2][ROS_REP105] に従い、モデル本体の位置姿勢参照用に
base_linkを設けるbase_linkは慣性をもたないダミーリンクとするか、慣性をもたせて機構の一部とするダミージョイントを次のとおり扱う
名前にプリフィックス
Dummy_をつけるtype は
fixedparent 、child に加え、必要に応じて 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" />
メッシュファイル
visual、collision はCOLLADA(.dae)またはSTL(.stl)とする。推奨を次に示す。
visual : COLLADA(.dae)
collision : STL(.stl) [AGXUnity]
collision メッシュファイルは面を閉じること
面が閉じていないと、正しく接触判定ができず、すり抜けが起きる
AGXにおけるダミーオブジェクトの扱い
AGX SDKのURDFインポーターはオブジェクトの名前に関係なく、RigidBodyやジョイントを生成する。 AGXでダミーとして扱う場合は、AGXオブジェクトの生成後、次の条件に従い独自で処理をすること。 全ての名前は大文字小文字を区別せずに扱う。
名前にプリフィックス
Dummyが入るジョイント名前にプリフィックス
TFが入るRigidBodyが存在する場合は、接続先のRigidBodyにObserverFrameをつける(以下例)rb0: 名前にプリフィックス
TFがあるrb1: rb0の名前のObserverFrameをrb1に設定する
対象のジョイントを削除する
名前にプリフィックス
Dummy、TFが入るRigidBody対象のRigidBodyをシミュレーションから削除する
名前に
base_linkがつくRigidBody同じ名前のObserverFrameをRigidBodyにつける
不要であれば、対象のRigidBodyをシミュレーションから削除する
参考文献
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 3.0.1以前はCOLLADA(.dae)を使うこと。 STL(.stl)はメッシュ情報をシーンファイルに保存する仕様であり、シーンファイルのサイズが肥大化してしまう。