1. 표현력의 차이
URDF는 상대적으로 간단한 구조를 가지고 있어 직관적이고 쉽게 작성할 수 있다. 반면 SDF는 더 복잡한 표현력을 제공하여 물리 엔진에 대한 세밀한 설정이 가능하다.
URDF는 주로 로봇의 기본적인 구성 요소를 정의하는 데 사용된다. 즉, 링크(link), 조인트(joint), 시각적 요소, 충돌 모델 등의 요소를 포함하는 단순한 로봇 모델에 적합하다. URDF는 제한된 수의 물리 엔진만 지원하며, Gazebo와 통합되어 사용될 때 특정한 기능적 한계를 가진다.
SDF는 물리 시뮬레이션의 구체적인 요구 사항을 다루는 데 유리하다. 예를 들어, SDF는 다양한 물리 엔진 (예: ODE, Bullet 등)을 지원하며, 중력, 마찰, 관성 모멘트와 같은 물리적 특성의 상세한 설정을 가능하게 한다. 이는 복잡한 환경에서 보다 현실적인 시뮬레이션을 구현하는 데 필수적이다.
2. 구조적 차이
URDF는 XML 기반으로 비교적 단순한 구조를 제공하며, 여러 가지 템플릿을 적용하거나 복잡한 로봇을 표현할 수 있는 유연성이 떨어진다. 예를 들어 URDF에서는 기본적으로 한 번 정의된 값은 반복적으로 사용할 수 없고, 복잡한 조건을 처리할 수 없다. 이로 인해 반복적이거나 복잡한 로봇을 정의할 때 코드가 길어질 수 있다.
SDF는 보다 복잡한 구조를 가지고 있으며, 매크로와 템플릿을 활용하여 복잡한 시뮬레이션 환경과 로봇을 보다 효율적으로 정의할 수 있다. 또한, SDF는 URDF보다 다층적 구조를 지원하며, 환경 구성 요소를 추가할 수 있는 유연성을 제공한다. 예를 들어, SDF에서는 로봇뿐만 아니라 환경(지형, 건물, 물체 등)까지 정의할 수 있다.
3. 물리 엔진 설정 차이
URDF는 물리 엔진에 대한 설정이 제한적이다. 주로 ROS와의 통합을 위해 설계되었으며, Gazebo에서 사용할 때도 기본적인 물리 엔진 설정만 가능하다.
SDF는 다양한 물리 엔진 설정을 지원한다. 예를 들어, 중력 가속도 \mathbf{g}, 마찰 계수 \mu, 관성 모멘트 \mathbf{I}와 같은 변수들을 세밀하게 조정할 수 있다. 이는 더 현실적인 시뮬레이션 결과를 얻는 데 유리하다. 물리 엔진에 따라 다르게 설정할 수 있는 항목이 다음과 같다:
- 중력: \mathbf{g} = \begin{bmatrix} 0 \\ 0 \\ -9.81 \end{bmatrix} \text{m/s}^2
- 마찰 계수: \mu = 0.5
- 관성 모멘트: \mathbf{I} = \begin{bmatrix} I_{xx} & 0 & 0 \\ 0 & I_{yy} & 0 \\ 0 & 0 & I_{zz} \end{bmatrix}
SDF는 이러한 설정을 통해 각 물리 엔진의 특성에 맞는 세밀한 시뮬레이션을 가능하게 한다.
4. 동적 환경과 상호작용
URDF는 로봇 자체의 구성 요소를 정의하는 데 중점을 두기 때문에 환경과의 상호작용을 포함하는 데 한계가 있다. 즉, URDF로는 로봇의 링크, 조인트, 충돌 모델 등만을 정의할 수 있으며, 환경 요소를 따로 정의하거나 제어하는 것은 어렵다. 이는 복잡한 시뮬레이션 환경에서 동적 요소를 포함하기 어려운 제한점을 야기한다.
반면, SDF는 환경 요소까지 포함하여 시뮬레이션할 수 있는 구조를 제공한다. 이를 통해 로봇이 특정 환경에서 상호작용하는 상황을 더 세밀하게 표현할 수 있다. 예를 들어, SDF는 지형, 건물, 물체 등과 같은 환경 요소를 정의하고, 물리 엔진을 통해 이들과 로봇 간의 충돌이나 상호작용을 시뮬레이션할 수 있다. 이를 통해 로봇의 동작이 실제 물리적 환경에서 어떻게 반응하는지 보다 현실적으로 표현할 수 있다.
동적 환경에서의 상호작용을 위해 SDF에서는 다음과 같은 물리적 상호작용을 정의할 수 있다:
- 충돌 처리: 로봇과 환경 간의 충돌 이벤트를 정의할 수 있으며, 충돌에 따른 반응을 물리 엔진에서 처리한다.
- 동적 객체: 환경에 포함된 물체들이 로봇과의 상호작용을 통해 움직이거나 반응하는 동적 객체로 정의될 수 있다.
이와 같은 동적 환경 설정은 SDF의 주요 장점 중 하나이다.
5. 파일 크기 및 복잡성
URDF는 상대적으로 간단한 구조를 가지고 있기 때문에 파일 크기와 복잡성이 작다. 이는 URDF가 주로 로봇의 기본적인 구성 요소만을 정의하는 데 초점을 맞추기 때문이다. 하지만 복잡한 로봇을 정의할 때는 URDF 파일이 길어질 수 있으며, 반복적인 코드 작성이 필요할 수 있다.
SDF는 보다 복잡한 구조를 지원하며, 다층적 구조와 세밀한 설정이 가능하기 때문에 파일 크기가 더 커질 수 있다. 또한, 환경 모델링, 물리 엔진 설정, 센서 통합 등의 추가 요소를 정의하면서 SDF 파일은 URDF보다 더 복잡하고 길어질 수 있다.
이러한 차이점으로 인해 SDF는 복잡한 로봇이나 대규모 환경을 시뮬레이션할 때 더 적합하며, URDF는 간단한 로봇 모델에 적합하다.
6. 센서 통합
URDF는 ROS와의 통합을 위해 주로 사용되므로, 기본적인 센서 정의를 포함할 수 있다. 하지만 센서의 세밀한 동작이나 구체적인 설정을 위해서는 제한적일 수 있다. 예를 들어, URDF에서 IMU, 카메라, LIDAR 등의 센서를 정의할 수는 있지만, 이러한 센서들의 구체적인 특성이나 동작 방식을 정교하게 다루는 데는 어려움이 있다.
SDF는 다양한 센서 설정을 세밀하게 다룰 수 있는 기능을 제공한다. SDF를 통해 센서의 위치, 방향, 감지 범위, 해상도 등을 더욱 정교하게 설정할 수 있으며, 물리 엔진과의 상호작용을 통해 보다 정확한 센서 데이터를 얻을 수 있다. 예를 들어, LIDAR 센서의 감지 범위를 \theta = \begin{bmatrix} \theta_{\text{min}} \\ \theta_{\text{max}} \end{bmatrix}로 설정하여 감지 각도를 조정할 수 있으며, 카메라 센서의 해상도는 R = \begin{bmatrix} R_{\text{width}} \\ R_{\text{height}} \end{bmatrix}로 정의할 수 있다.
이를 통해 SDF는 로봇의 동작뿐만 아니라 다양한 센서의 동작을 현실적으로 시뮬레이션하는 데 유리하다.
7. 플러그인 지원
URDF는 주로 ROS와의 통합을 목적으로 사용되며, 기본적인 로봇 모델링을 처리하는 데 적합하다. URDF로 작성된 로봇 모델은 Gazebo와 같은 시뮬레이션 도구에서 사용할 수 있지만, 복잡한 동작이나 동적 상호작용을 다루는 플러그인을 처리하는 데는 제한적이다. 예를 들어, URDF에서 로봇의 기본적인 움직임이나 센서 데이터를 처리할 수 있지만, 고급 플러그인 기능을 지원하지는 않는다.
반면, SDF는 다양한 플러그인을 지원하며, 이러한 플러그인을 통해 로봇의 동작을 더 세밀하게 제어할 수 있다. 특히 Gazebo에서 SDF를 사용할 때 플러그인을 통해 물리 엔진의 동작을 세밀하게 설정하거나 로봇과 환경 간의 상호작용을 구체적으로 다룰 수 있다. SDF에서 지원하는 플러그인 기능은 다음과 같다:
- 동역학 플러그인: 로봇의 움직임과 물리적 특성을 제어하기 위해 사용된다. 예를 들어, 조인트의 움직임을 제어하는 플러그인, 로봇의 주행 속도를 조정하는 플러그인 등이 있다.
- 센서 플러그인: 로봇에 부착된 다양한 센서(예: 카메라, LIDAR, IMU 등)의 동작을 제어하고 데이터를 처리하는 플러그인이다. SDF를 통해 이러한 센서 플러그인을 정의하고, Gazebo에서 시뮬레이션할 수 있다.
- 환경 상호작용 플러그인: 로봇과 환경 간의 상호작용을 제어하는 플러그인이다. 예를 들어, 로봇이 환경에서 물체와 충돌할 때의 반응을 제어하거나, 환경 요소들이 로봇의 동작에 영향을 미치는 방식을 플러그인을 통해 설정할 수 있다.
이러한 플러그인들은 SDF에서 보다 복잡한 시뮬레이션을 가능하게 하며, 로봇의 동작과 물리적 상호작용을 현실적으로 모델링하는 데 중요한 역할을 한다.
8. Gazebo와의 통합성
URDF는 ROS의 표준 로봇 정의 언어로 많이 사용되지만, Gazebo와의 통합성에서는 일부 제한이 있다. 기본적으로 Gazebo에서 URDF를 사용할 수 있지만, 복잡한 물리적 상호작용이나 환경 요소를 포함한 시뮬레이션을 실행할 때는 추가적인 설정이 필요하다. 예를 들어, Gazebo에서 URDF를 사용할 때 일부 고급 기능은 플러그인을 통해서만 가능하며, 물리 엔진에 대한 세밀한 제어는 어렵다.
SDF는 Gazebo와 밀접하게 통합되어 있으며, Gazebo의 모든 기능을 활용할 수 있는 구조를 제공한다. SDF는 Gazebo의 기본 파일 형식으로 사용되기 때문에, Gazebo의 다양한 물리 엔진과 시뮬레이션 기능을 세밀하게 제어할 수 있다. 예를 들어, SDF는 물리 엔진의 마찰 계수, 중력 설정, 환경과의 상호작용 등을 세밀하게 조정할 수 있으며, 이를 통해 Gazebo에서 더욱 현실적인 시뮬레이션을 실행할 수 있다.
또한, Gazebo에서의 시뮬레이션 환경 설정, 로봇 동작, 센서 데이터 출력 등이 SDF와 자연스럽게 통합되기 때문에, 복잡한 시뮬레이션 프로젝트에서 SDF를 사용하는 것이 더 유리하다.