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의 핵심 구성 요소인 링크와 조인트가 어떻게 연결되고 정의되는지 보여준다.
링크(Link)
링크의 역할
링크는 로봇의 각 구성 요소를 나타내는 기본적인 단위이다. 링크는 로봇의 각 파트를 나타내며, 각각의 링크는 시각적 요소(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 대칭 행렬로 표현된다:
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에서 지원하는 주요 조인트 타입은 다음과 같다:
- Revolute: 회전 조인트. 한 축을 기준으로 회전하는 움직임을 제공한다.
- Prismatic: 직선 조인트. 특정 축을 따라 직선으로 이동하는 움직임을 제공한다.
- Fixed: 고정 조인트. 두 링크 사이의 상대적인 움직임이 없도록 고정한다.
- Continuous: 제한 없는 회전 조인트. 360도 회전이 가능한 조인트이다.
- Floating: 6 자유도를 가지며, 회전과 직선 이동을 모두 허용한다.
- Planar: 특정 평면에서의 움직임을 허용한다.
부모와 자식 링크의 관계
조인트는 두 링크 간의 부모-자식 관계를 정의한다. 조인트는 반드시 부모 링크와 자식 링크 사이에 존재하며, 부모 링크는 상대적으로 고정되거나 주된 위치를 가지는 링크로 정의되고, 자식 링크는 부모 링크에 대해 움직일 수 있는 링크로 설정된다.
<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에서 조인트는 움직임의 물리적 특성을 정의할 수 있다. 주로 다음과 같은 물리적 요소들이 사용된다:
- Damping: 조인트의 감쇠 계수를 나타내며, 조인트가 회전하거나 이동할 때 저항력을 제공한다.
- Friction: 마찰 계수를 나타내며, 조인트의 움직임에 대한 저항을 추가한다.
- Effort: 조인트에 적용할 수 있는 최대 힘 또는 토크를 정의한다.
<dynamics damping="0.1" friction="0.2"/>
위 예제는 조인트의 감쇠 계수와 마찰 계수를 정의한 것으로, 움직임이 더욱 안정적으로 이루어지도록 제어한다.