SDF(Simulation Description Format)는 Gazebo와 같은 시뮬레이터에서 로봇, 환경 및 센서의 정의를 XML 형식으로 표현하는 파일 포맷이다. SDF 파일은 로봇의 물리적 특성, 시각적 모델, 센서, 링크, 조인트, 플러그인 등 다양한 요소를 정의할 수 있으며, 각각의 요소는 XML 태그로 정의된다.
SDF는 XML 구조로 되어 있으며, 각 태그는 계층적으로 중첩될 수 있다. SDF 파일을 정의하기 위해 기본적으로 필요한 주요 요소는 다음과 같다:
1. sdf
태그
SDF 파일의 루트 태그는 <sdf>
이다. 이 태그는 SDF 파일의 버전을 명시하며, 파일의 나머지 부분을 포함한다. 기본 구조는 다음과 같다:
<sdf version="1.6">
<!-- 내용 -->
</sdf>
여기서 version
속성은 SDF 파일의 버전을 나타내며, 현재 최신 버전은 1.6이다.
2. model
태그
로봇이나 환경의 모델을 정의하는 데 사용되는 태그이다. <model>
태그는 로봇의 이름과 관련된 링크, 조인트, 센서 등의 하위 요소들을 포함할 수 있다. 기본적인 구조는 다음과 같다:
<model name="robot_name">
<!-- 링크, 조인트, 센서 등 -->
</model>
여기서 name
속성은 모델의 이름을 지정하는 데 사용된다.
3. link
태그
로봇의 물리적 요소(링크)를 정의하는 데 사용되는 태그이다. 링크는 로봇의 각 부위를 나타내며, 질량, 관성, 충돌 모델, 시각적 모델 등을 정의할 수 있다. 예를 들어, 다음과 같은 구조로 정의할 수 있다:
<link name="link_name">
<!-- 물리적 특성, 시각적 요소 등 -->
</link>
이때 link
는 로봇의 부분을 의미하며, name
속성은 링크의 이름을 나타낸다. 링크는 visual
, collision
, inertial
과 같은 여러 하위 태그를 포함할 수 있다.
4. visual
태그
visual
태그는 로봇의 시각적 모델을 정의하는 태그이다. 이 태그는 로봇의 외형을 정의하는 데 사용되며, 메쉬 파일이나 기본적인 기하학적 형상을 지정할 수 있다. 예시 구조는 다음과 같다:
<visual name="visual_name">
<!-- 시각적 모델 정의 -->
</visual>
5. collision
태그
collision
태그는 로봇의 충돌 모델을 정의한다. 충돌 모델은 물리 엔진에서 객체 간의 상호작용을 처리하는 데 사용된다. 기본적인 구조는 다음과 같다:
<collision name="collision_name">
<!-- 충돌 모델 정의 -->
</collision>
충돌 모델과 시각적 모델은 다를 수 있으며, 물리 엔진에서의 성능을 최적화하기 위해 더 단순한 기하학적 형상을 사용할 수 있다.
6. inertial
태그
inertial
태그는 로봇 링크의 질량, 관성 모멘트를 정의한다. 이 태그는 로봇의 동역학 시뮬레이션에서 중요한 역할을 한다. 구조는 다음과 같다:
<inertial>
<mass>1.0</mass>
<inertia>
<ixx>0.1</ixx>
<iyy>0.1</iyy>
<izz>0.1</izz>
<ixy>0.0</ixy>
<ixz>0.0</ixz>
<iyz>0.0</iyz>
</inertia>
</inertial>
여기서 mass
는 링크의 질량을 나타내고, inertia
는 링크의 관성 모멘트 텐서를 나타낸다. 이 텐서의 구성 요소는 각각 다음과 같이 정의된다:
관성 모멘트는 링크의 회전 운동을 설명하는 데 사용되며, 각 축을 기준으로 한 회전 저항을 나타낸다.
7. joint
태그
joint
태그는 로봇의 링크 간의 연결을 정의한다. 조인트는 링크를 서로 연결하고, 회전 또는 병진 운동을 허용한다. 조인트에는 다양한 유형이 있으며, 각 유형에 따라 운동의 자유도가 결정된다. 기본 구조는 다음과 같다:
<joint name="joint_name" 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>
여기서 주요 속성은 다음과 같다:
name
: 조인트의 이름을 정의한다.type
: 조인트의 유형을 정의한다. 여기서revolute
는 회전 조인트를 의미한다.parent
: 상위 링크를 정의한다.child
: 하위 링크를 정의한다.axis
: 조인트가 회전하거나 이동하는 축을 정의한다. 이때xyz
값은 축의 방향을 나타낸다.limit
: 조인트의 운동 범위를 정의한다. 예를 들어,lower
와upper
는 조인트의 회전 또는 이동 한계를 나타낸다.
조인트의 유형에는 회전 조인트(revolute
), 병진 조인트(prismatic
), 고정 조인트(fixed
), 범용 조인트(universal
) 등이 있다.
8. sensor
태그
SDF 파일에서는 로봇에 장착된 다양한 센서를 정의할 수 있다. sensor
태그를 사용하여 카메라, LIDAR, IMU 등 다양한 센서 유형을 정의할 수 있으며, 센서의 데이터 주기와 출력 형식도 설정할 수 있다. 기본 구조는 다음과 같다:
<sensor name="sensor_name" type="camera">
<camera>
<horizontal_fov>1.57</horizontal_fov>
<image>
<width>640</width>
<height>480</height>
</image>
</camera>
</sensor>
이 예시에서는 camera
센서를 정의하고 있으며, horizontal_fov
는 카메라의 수평 시야각을 나타내며, image
태그는 이미지의 해상도를 나타낸다.
9. plugin
태그
SDF는 로봇의 동작을 제어하거나 환경과 상호작용하는 플러그인을 설정할 수 있다. plugin
태그는 주로 Gazebo와 같은 시뮬레이터에서 로봇 동작을 제어하기 위해 사용된다. 기본 구조는 다음과 같다:
<plugin name="plugin_name" filename="plugin_filename.so">
<!-- 플러그인 설정 -->
</plugin>
name
: 플러그인의 이름을 정의한다.filename
: 로봇의 동작을 제어하는 플러그인 파일의 경로를 지정한다.
플러그인을 사용하여 동역학 시뮬레이션, 로봇 제어, 센서 데이터 처리 등을 설정할 수 있다.
10. world
태그
SDF 파일에서 로봇이 동작할 환경을 정의하기 위해 world
태그가 사용된다. world
태그는 환경의 지형, 빌딩, 조명, 날씨 등을 정의할 수 있으며, 이 환경 내에서 로봇이 동작하게 된다. 기본 구조는 다음과 같다:
<world name="world_name">
<!-- 환경 요소 정의 -->
</world>
여기서 world
태그는 환경을 정의하며, 다양한 요소를 포함할 수 있다. 예를 들어, 지형, 빛, 물리적 특성 등을 정의할 수 있다.