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