URDF XML 형식

정승균·2021년 1월 8일
0

ROS

목록 보기
9/14
post-thumbnail

Ⅰ. 기본 형식


<?xml version="1.0"?>
<robot name="my_robot">
  <link> ... </link>
  <link> ... </link>
  <link> ... </link>
  <joint>  ....  </joint>
  <joint>  ....  </joint>
  <joint>  ....  </joint>
</robot>


1. 예시

<link name="base_link">
  <visual>
    <geometry>
      <cylinder length="0.01" radius="0.2"/>
    </geometry>
    <origin rpy="0 0 0" xyz="0 0 0"/>
    <material name="yellow">
      <color rgba="1 1 0 1"/>
    </material>
  </visual>

  <collision>
    <geometry>
      <cylinder length="0.03" radius="0.2"/>
    </geometry>
    <origin rpy="0 0 0" xyz="0 0 0"/>
  </collision>

  <inertial>
    <mass value="1"/>
    <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
  </inertial>
</link>

2. <visual name="name">

시각적 형체를 정의

  • <origin xyz="0 0 0" rpy="0 0 0" /> 기준 프레임에 대한 visual element의 프레임을 정의

  • <geometry> : 모양을 정의

    • <box size="1 1 1" /> : 육각형 모양
    • <cylinder length="1" radius="1" /> : 원기둥 모양
    • <sphere radius="1" /> : 구 모양
  • <material name="material_name"> : 렌더링을 정의

    • <color rgba="1 1 1 1" /> : 0~1 범위를 갖는 red/green/blue/alpha 의 값을 지정
    • <texture filename="path" /> : 텍스쳐 파일 지정

3. <collision name="name">

물리적 히트박스를 설정

  • <origin xyz="0 0 0" rpy="0 0 0" /> 기준 프레임에 대한 collision element의 프레임을 정의

  • <geometry> : 모양을 정의

    • <box size="1 1 1" /> : 육각형 모양
    • <cylinder length="1" radius="1" /> : 원기둥 모양
    • <sphere radius="1" /> : 구 모양

3. <inertial>

물리적 특성을 정의

  • <origin xyz="0 0 0" rpy="0 0 0" /> 기준 프레임에 대한 inertial element의 프레임을 정의

  • <mass value="1"> : 질량을 설정

  • <inertia ixx= "1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> : 관성 모멘트를 설정


Ⅲ. <joint name="name" type="type">


1. 예시

<joint name="pan_joint" type="revolute">
  <parent link="base_link"/>
  <child link="pan_link"/>
  <origin xyz="0 0 0.1"/>
  <axis xyz="0 0 1" />
  <limit effort="300" velocity="0.1" lower="-3.14" upper="3.14"/>
  <dynamics damping="50" friction="1"/>
</joint>

2. type

  • revolute : 축을 중심으로 제한을 가지고 회전
  • continuous : 축을 중심으로 제한 없이 회전
  • fixed : 고정
  • prismatic : 축방향으로 선형으로 이동
  • planar : 축에 수직인 평면상에서 이동
  • floating : 완전 자유 이동

3. <orgin>

  • <origin xyz="0 0 0" rpy="0 0 0" /> 부모링크의 프레임에 대한 자식링크의 프레임을 정의

4. <parent>

  • <parent link="base_link"/> : 부모링크 설정

5. <child>

  • <child link="pan_link"/> : 자식링크 설정

6. <axis>

  • <axis xyz="0 0 1" /> : joint의 축 설정

7. <dynamics>

  • <dynamics damping="50" friction="1"/> : 물리적 특성 설정

8. <limit>

  • <limit effort="300" velocity="0.1" lower="-3.14" upper="3.14"/> : 제한 설정

Ⅳ. 전체 예시

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

    <link name="base_link">
        <visual>
            <geometry>
                <cylinder length="0.01" radius="0.2"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0"/>
            <material name="yellow">
                <color rgba="1 1 0 1"/>
            </material>
        </visual>

        <collision>
            <geometry>
                <cylinder length="0.03" radius="0.2"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0"/>
        </collision>

        <inertial>
            <mass value="1"/>
            <inertia  ixx= "1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
        </inertial>
    </link>

    <joint name="pan_joint" type="revolute">
        <parent link="base_link"/>
        <child link="pan_link"/>
        <origin xyz="0 0 0.1"/>
        <axis xyz="0 0 1" />
        <limit effort="300" velocity="0.1" lower="-3.14" upper="3.14"/>
        <dynamics damping="50" friction="1"/>
    </joint>

    <link name="pan_link">
        <visual>
            <geometry>
                <cylinder length="0.4" radius="0.04"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0.09"/>
            <material name="red">
                <color rgba="0 0 1 1"/>
            </material>
        </visual>

        <collision>
            <geometry>
                <cylinder length="0.4" radius="0.06"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0.09"/>
        </collision>

        <inertial>
            <mass value="1"/>
            <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
        </inertial>
    </link>

    <joint name="tilt_joint" type="revolute">
        <parent link="pan_link"/>
        <child link="tilt_link"/>
        <origin xyz="0 0 0.2"/>
        <axis xyz="0 1 0" />
        <limit effort="300" velocity="0.1" lower="-4.71239" upper="-1.570796"/>
        <dynamics damping="50" friction="1"/>
    </joint>

    <link name="tilt_link">
        <visual>
            <geometry>
                <cylinder length="0.4" radius="0.04"/>
            </geometry>
            <origin rpy="0 1.570796 0" xyz="0 0 0"/>
            <material name="green">
                <color rgba="1 0 0 1"/>
            </material>
        </visual>

        <collision>
            <geometry>
                <cylinder length="0.4" radius="0.06"/>
            </geometry>
            <origin rpy="0 1.570796 0" xyz="0 0 0"/>
        </collision>

        <inertial>
            <mass value="1"/>
            <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
        </inertial>
    </link>
    
</robot>
  • RVIZ로 확인

0개의 댓글