🤖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>
お願い致します