見出し画像

🤖URDF、SDF、MJCFの違い

URDF (Unified Robot Description Format)


  • ROS(Robot Operating System)で使用される主要なロボット記述フォーマット。

  • ロボットの機械構造、関節、センサー、その他の部品を定義するためのXMLベースのフォーマット。

  • 主にロボットのキネマティクス(運動学)とビジュアルおよびコリジョンジオメトリの定義に使用される。

  • 力学的な詳細(摩擦、不完全性など)の表現は限られている。

以下は、簡単な2軸ロボットアームのURDFサンプルです。このサンプルでは、ロボットは基底(base_link)、2つのリンク(link1、link2)、そして2つの回転関節(joint1、joint2)で構成されています。

<?xml version="1.0"?>
<robot name="simple_two_link_arm">

  <!-- Base Link -->
  <link name="base_link">
    <visual>
      <geometry>
        <box size="0.1 0.1 0.1"/>
      </geometry>
    </visual>
  </link>

  <!-- Link 1 -->
  <link name="link1">
    <visual>
      <geometry>
        <cylinder length="1.0" radius="0.1"/>
      </geometry>
    </visual>
  </link>

  <!-- Link 2 -->
  <link name="link2">
    <visual>
      <geometry>
        <cylinder length="1.0" radius="0.1"/>
      </geometry>
    </visual>
  </link>

  <!-- Joint 1 -->
  <joint name="joint1" type="revolute">
    <parent link="base_link"/>
    <child link="link1"/>
    <origin xyz="0 0 0.05" rpy="0 0 0"/>
    <axis xyz="0 0 1"/>
    <limit lower="-1.57" upper="1.57" effort="100.0" velocity="0.5"/>
  </joint>

  <!-- Joint 2 -->
  <joint name="joint2" type="revolute">
    <parent link="link1"/>
    <child link="link2"/>
    <origin xyz="0 0 1" rpy="0 0 0"/>
    <axis xyz="0 0 1"/>
    <limit lower="-1.57" upper="1.57" effort="100.0" velocity="0.5"/>
  </joint>

</robot>

SDF (Simulation Description Format)

  • Gazeboという人気のあるロボットシミュレーション環境で使用されるフォーマット。

  • URDFよりも詳細な物理的特性(摩擦、不完全性、バネ特性など)を持つオブジェクトや環境を記述するためのフォーマット。

  • ロボットだけでなく、物理シミュレーション全体のシーンや環境を記述する能力がある。

  • 多体の動的シミュレーションや環境要素(風、光など)の詳細な記述が可能。


以下は、簡単な2軸ロボットアームのSDFサンプルです。このサンプルでは、ロボットアームは基底(base)、2つのリンク(link1、link2)、そして2つの回転関節(joint1、joint2)で構成されています。さらに、物理的な属性やシミュレーションの詳細も含めることができます。

<sdf version="1.6">
  <model name="simple_two_link_arm">
    <static>false</static>

    <!-- Base link -->
    <link name="base">
      <pose>0 0 0.1 0 0 0</pose>
      <visual name="base_visual">
        <geometry>
          <box>
            <size>0.2 0.2 0.2</size>
          </box>
        </geometry>
      </visual>
    </link>

    <!-- Link 1 -->
    <link name="link1">
      <pose>0 0 0.5 0 0 0</pose>
      <visual name="link1_visual">
        <geometry>
          <cylinder>
            <radius>0.1</radius>
            <length>1.0</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <!-- Link 2 -->
    <link name="link2">
      <pose>0 0 1.5 0 0 0</pose>
      <visual name="link2_visual">
        <geometry>
          <cylinder>
            <radius>0.1</radius>
            <length>1.0</length>
          </cylinder>
        </geometry>
      </visual>
    </link>

    <!-- Joint 1 -->
    <joint name="joint1" type="revolute">
      <parent>base</parent>
      <child>link1</child>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <lower>-1.57</lower>
          <upper>1.57</upper>
        </limit>
      </axis>
    </joint>

    <!-- Joint 2 -->
    <joint name="joint2" type="revolute">
      <parent>link1</parent>
      <child>link2</child>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <lower>-1.57</lower>
          <upper>1.57</upper>
        </limit>
      </axis>
    </joint>

  </model>
</sdf>

MJCF (MuJoCo XML Format)

  • MuJoCo(Multi-Joint dynamics with Contact)という高速物理シミュレーションエンジン専用のフォーマット。

  • ロボットや他の物理オブジェクトの定義に使用され、特に接触ダイナミクスのシミュレーションに優れている。

  • MJCFは、効率的なシミュレーションのために特化されており、シンプルながら高度な機能を提供する。

以下は、簡単な2リンクのロボットアームのMJCFサンプルです。この例では、ロボットは基底("base")と2つのリンク("link1"、"link2")、そして2つの関節("joint1"、"joint2")で構成されています。

<mujoco model="simple_two_link_arm">
    <worldbody>
        <body name="base" pos="0 0 0">
            <geom shape="box" size="0.1 0.1 0.1" type="fixed"/>
            <body name="link1" pos="0 0 0.1">
                <geom shape="cylinder" size="0.05 0.5" />
                <joint name="joint1" type="hinge" axis="0 0 1" pos="0 0 0" range="-90 90"/>
                <body name="link2" pos="0 0 1">
                    <geom shape="cylinder" size="0.05 0.5"/>
                    <joint name="joint2" type="hinge" axis="0 0 1" pos="0 0 0" range="-90 90"/>
                </body>
            </body>
        </body>
    </worldbody>
</mujoco>

MuJoCoはMulti-Joint dynamics with Contactの略です。ロボット工学、バイオメカニクス、グラフィックス、アニメーション、機械学習など、環境と相互作用する多関節構造の高速かつ正確なシミュレーションを必要とする分野の研究開発を促進することを目的とした汎用物理エンジンです。
このリポジトリはGoogle DeepMindによって管理されている。
MuJoCoはC APIを持ち、研究者や開発者を対象としています。ランタイム・シミュレーション・モジュールは、パフォーマンスを最大化するように調整されており、組み込みのXMLコンパイラによって事前に割り当てられた低レベルのデータ構造で動作します。このライブラリには、OpenGLでレンダリングされたネイティブGUIによるインタラクティブな可視化が含まれています。MuJoCoはさらに、物理関連量を計算するための多数のユーティリティ関数を公開しています。
また、PythonバインディングとUnityゲームエンジン用のプラグインも提供しています。


お願い致します