URDF(Unified Robot Description Format)는 XML 기반의 파일 형식으로, 로봇의 구조적 정보를 정의하는 데 사용된다. URDF 파일은 로봇의 링크(link)와 조인트(joint)를 표현하며, 이러한 요소들의 관계와 물리적 특성을 기술하여 로봇의 시각적, 물리적, 동역학적 동작을 시뮬레이션할 수 있게 한다. URDF는 로봇을 구성하는 각 부분을 명확하게 정의하고, 이들 간의 관계를 설정하여 로봇이 어떻게 동작할지를 결정한다.

URDF의 기본 구조

URDF 파일은 XML 형식을 따르며, 주요 구성 요소로는 <robot> 태그 안에 링크와 조인트가 포함된다. 파일의 기본 구조는 다음과 같다:

<robot name="robot_name">
  <!-- 링크 정의 -->
  <link name="link_name">
    <!-- 시각적 요소 정의 -->
    <visual>
      <!-- 메쉬 또는 기본 형상을 사용하여 정의 -->
    </visual>
    <!-- 물리적 충돌 요소 정의 -->
    <collision>
      <!-- 충돌 모델 정의 -->
    </collision>
    <!-- 물리적 특성 정의 -->
    <inertial>
      <!-- 질량, 관성 행렬 등 -->
    </inertial>
  </link>

  <!-- 조인트 정의 -->
  <joint name="joint_name" type="joint_type">
    <!-- 부모 링크와 자식 링크 정의 -->
    <parent link="parent_link_name"/>
    <child link="child_link_name"/>
    <!-- 조인트 축과 한계값 정의 -->
    <axis xyz="1 0 0"/>
    <limit effort="100" velocity="1.0"/>
  </joint>
</robot>

이 기본 구조는 모든 URDF 파일이 따르는 형식이며, URDF의 핵심 구성 요소인 링크와 조인트가 어떻게 연결되고 정의되는지 보여준다.

링크의 역할

링크는 로봇의 각 구성 요소를 나타내는 기본적인 단위이다. 링크는 로봇의 각 파트를 나타내며, 각각의 링크는 시각적 요소(visual), 충돌 요소(collision), 물리적 특성(inertial)을 가진다. 각 링크는 로봇의 구성 요소가 가지는 위치와 형태, 물리적 특성을 정의한다.

시각적 요소

<visual> 태그는 로봇의 시각적 모델을 정의한다. 이는 시뮬레이션에서 로봇의 외형을 결정하며, 기본 형상(예: 박스, 구, 실린더) 또는 메쉬 파일(예: STL, Collada)을 사용할 수 있다.

<visual>
  <geometry>
    <box size="1 1 1"/>
  </geometry>
  <material name="material_name">
    <color rgba="1 0 0 1"/>
  </material>
</visual>

위 예제에서는 크기 1x1x1의 박스 형상을 시각적으로 정의하며, 빨간색으로 설정된 재질을 적용한다.

충돌 요소

<collision> 태그는 로봇의 충돌 모델을 정의한다. 이는 로봇이 환경과 상호작용할 때 발생하는 충돌을 계산하는 데 사용된다. 시각적 요소와는 별도로 정의되며, 더 단순한 형상을 사용하여 계산 성능을 최적화할 수 있다.

<collision>
  <geometry>
    <cylinder radius="0.5" length="2"/>
  </geometry>
</collision>

위 예제는 반지름이 0.5, 길이가 2인 실린더 형상의 충돌 모델을 정의한다.

물리적 특성

<inertial> 태그는 링크의 질량과 관성(inertia)을 정의하는데 사용된다. 관성 행렬은 링크의 물리적 움직임을 시뮬레이션할 때 중요한 역할을 하며, URDF에서 이 값들을 직접 입력할 수 있다.

관성 행렬 \mathbf{I}는 다음과 같은 3x3 대칭 행렬로 표현된다:

\mathbf{I} = \begin{bmatrix} I_{xx} & I_{xy} & I_{xz} \\ I_{xy} & I_{yy} & I_{yz} \\ I_{xz} & I_{yz} & I_{zz} \end{bmatrix}

URDF에서는 관성 행렬의 성분을 직접 정의하며, 이는 각 축에 대한 회전 관성(moment of inertia)을 나타낸다. 관성 행렬과 질량 m은 링크의 움직임을 정확하게 시뮬레이션하는 데 필수적이다.

<inertial>
  <mass value="5.0"/>
  <inertia ixx="0.1" ixy="0.0" ixz="0.0" iyy="0.1" iyz="0.0" izz="0.1"/>
</inertial>

위 예제는 질량이 5kg이고, 관성 행렬 \mathbf{I}가 대각선 성분을 가지는 링크를 정의한 것이다.

조인트(Joint)

조인트의 역할

조인트는 로봇의 링크 사이의 연결을 나타내며, 로봇의 각 부분이 어떻게 서로 연결되고 움직이는지를 정의한다. URDF에서 조인트는 부모 링크와 자식 링크 간의 상호작용을 설명하며, 다양한 유형의 조인트를 통해 회전, 직선 이동 등을 표현할 수 있다.

조인트의 유형

조인트는 다양한 타입을 가지며, URDF에서 지원하는 주요 조인트 타입은 다음과 같다:

부모와 자식 링크의 관계

조인트는 두 링크 간의 부모-자식 관계를 정의한다. 조인트는 반드시 부모 링크와 자식 링크 사이에 존재하며, 부모 링크는 상대적으로 고정되거나 주된 위치를 가지는 링크로 정의되고, 자식 링크는 부모 링크에 대해 움직일 수 있는 링크로 설정된다.

<joint name="joint1" type="revolute">
  <parent link="link1"/>
  <child link="link2"/>
</joint>

위 예제에서 조인트는 link1을 부모로 하고 link2를 자식으로 하며, revolute 타입으로 설정되어 회전 조인트를 형성한다.

조인트의 축과 한계값

각 조인트는 축(axis)을 가지며, 조인트의 타입에 따라 특정 축을 따라 움직이거나 회전할 수 있다. 예를 들어, 회전 조인트는 하나의 회전 축을 설정하고, 그 축을 기준으로 회전이 발생한다.

조인트의 축은 3D 벡터 \mathbf{a} = (x, y, z)로 정의되며, 이는 조인트가 회전하거나 이동할 축을 나타낸다. 또한 조인트에는 힘(토크)이나 속도에 대한 한계를 정의할 수 있다.

<axis xyz="0 0 1"/>
<limit effort="100" velocity="1.0" lower="-1.57" upper="1.57"/>

위 예제에서는 조인트의 축을 z-축으로 설정하며, 이는 조인트가 z-축을 기준으로 회전함을 의미한다. 또한, 회전 범위를 -1.57 \leq \theta \leq 1.57로 제한하며, 토크 한계를 100, 속도를 1.0으로 설정한다.

물리적 특성의 정의

URDF에서 조인트는 움직임의 물리적 특성을 정의할 수 있다. 주로 다음과 같은 물리적 요소들이 사용된다:

<dynamics damping="0.1" friction="0.2"/>

위 예제는 조인트의 감쇠 계수와 마찰 계수를 정의한 것으로, 움직임이 더욱 안정적으로 이루어지도록 제어한다.