# URDF의 시각적 요소와 물리적 요소의 차이점

#### 시각적 요소의 정의

시각적 요소는 로봇 모델이 시뮬레이션 환경에서 어떻게 보이는지를 결정하는 구성 요소이다. 이는 사용자가 로봇을 직관적으로 이해하고 상호작용할 수 있도록 도와주는 역할을 한다. 시각적 요소는 로봇의 외관, 재질, 색상 등 시뮬레이션의 그래픽적인 표현에 중점을 두며, 주로 **메쉬 파일** (STL, Collada 등)과 같은 외부 파일을 통해 정의된다.

URDF에서 시각적 요소는 `<visual>` 태그 안에서 정의된다. 이는 로봇의 형상과 색상, 재질 등을 포함하며, 물리적 시뮬레이션에 영향을 미치지 않는다.

```xml
<visual>
  <geometry>
    <mesh filename="robot_model.dae"/>
  </geometry>
  <material name="grey">
    <color rgba="0.5 0.5 0.5 1.0"/>
  </material>
</visual>
```

위 예시에서는 `robot_model.dae` 파일을 이용해 로봇의 외형을 정의하고, 색상은 회색(`rgba` 값)으로 설정하고 있다.

#### 물리적 요소의 정의

물리적 요소는 로봇이 실제로 물리 법칙에 따라 시뮬레이션에서 어떻게 동작하는지를 결정한다. 물리적 요소는 질량, 관성 모멘트, 충돌 영역 등 물리적 상호작용에 영향을 미치는 요소들을 포함한다. 로봇이 시뮬레이션에서 움직일 때, 이 요소들은 로봇의 속도, 가속도, 마찰, 충돌 등을 계산하는 데 사용된다.

URDF에서 물리적 요소는 `<inertial>`, `<collision>` 태그 안에서 정의된다. 예를 들어, `<inertial>` 태그는 로봇의 질량과 관성 모멘트를 정의하며, 이는 시뮬레이션에서 로봇의 운동에 중요한 역할을 한다.

```xml
<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>
<collision>
  <geometry>
    <box size="1 1 1"/>
  </geometry>
</collision>
```

여기에서, 로봇의 질량이 5kg이고, 관성 모멘트는 대각 성분만 있는 단순한 형태로 정의되었다. 또한, 충돌 모델은 크기가 1m³인 박스로 정의되어 있으며, 이는 시뮬레이션에서 다른 물체와의 충돌을 계산할 때 사용된다.

#### 시각적 요소와 물리적 요소의 주요 차이점

시각적 요소와 물리적 요소의 차이점은 다음과 같은 측면에서 분명하게 나타난다.

**그래픽과 물리 계산의 목적**

* **시각적 요소**는 로봇이 시뮬레이션에서 어떻게 보이는지에만 영향을 미치며, 물리 법칙에 따른 계산에 영향을 주지 않는다. 이는 시뮬레이션의 렌더링 엔진이 처리한다.
* **물리적 요소**는 로봇이 물리 법칙에 따라 어떻게 움직이고 상호작용하는지를 결정하며, 주로 물리 엔진이 처리한다.

**형상의 단순화와 복잡성**

시각적 요소는 로봇의 외형을 더욱 상세하고 복잡하게 만들 수 있지만, 물리적 요소는 충돌 및 물리적 상호작용을 계산하는 데 단순화된 모델을 사용한다. 예를 들어, 로봇의 외관은 복잡한 메쉬 모델을 사용할 수 있지만, 물리적 충돌 계산에는 단순한 박스나 구 같은 형상을 사용할 수 있다.

**시뮬레이션의 성능 최적화**

시각적 요소는 시뮬레이션 성능에 큰 영향을 미치지 않지만, 물리적 요소는 로봇의 움직임과 충돌 계산에 직접적인 영향을 미치기 때문에 물리 엔진의 성능과 시뮬레이션의 속도에 중요한 역할을 한다.

#### 수학적 모델의 차이

물리적 요소와 시각적 요소는 수학적 모델에서도 차이를 보인다.

**관성 모멘트와 질량 중심**

물리적 요소에서 가장 중요한 것은 로봇의 질량과 관성 모멘트이다. 관성 모멘트는 로봇의 회전 운동에 대한 저항을 나타내며, 이는 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}
$$

여기서 $I\_{xx}$, $I\_{yy}$, $I\_{zz}$는 주 관성 모멘트이고, $I\_{xy}$, $I\_{xz}$, $I\_{yz}$는 관성 모멘트의 상호 작용 항이다. 관성 모멘트는 로봇의 질량 분포에 따라 계산되며, 이는 로봇이 회전할 때 얼마나 쉽게 움직이는지를 결정한다.

질량 중심 $\mathbf{C}$는 로봇의 질량이 집중된 위치를 나타내며, 이는 로봇의 균형과 안정성에 영향을 미친다. 질량 중심은 일반적으로 $x$, $y$, $z$ 좌표로 정의된다.

$$
\mathbf{C} = \begin{bmatrix} x\_c \ y\_c \ z\_c \end{bmatrix}
$$

**물리적 충돌 모델의 단순화**

물리적 충돌 모델은 계산 효율성을 위해 단순화된 기하학적 형상을 사용한다. 예를 들어, 로봇의 충돌 모델은 구체나 박스와 같은 단순한 형상으로 정의될 수 있다. 충돌 검출은 이러한 단순한 모델을 사용해 빠르게 수행된다. 충돌 모델의 수학적 표현은 일반적으로 **충돌 상자** 또는 **충돌 구체**의 형태로 제공된다.

충돌 상자의 경우, 충돌 모델의 수학적 표현은 다음과 같다.

$$
\mathbf{B} = \left{ \mathbf{x} \mid |x| \leq \frac{w}{2}, |y| \leq \frac{h}{2}, |z| \leq \frac{d}{2} \right}
$$

여기서 $w$, $h$, $d$는 상자의 폭, 높이, 깊이이며, $\mathbf{x}$는 공간에서의 좌표이다.

충돌 구체의 경우, 수학적 표현은 구의 반지름 $r$에 의해 정의된다.

$$
\mathbf{S} = \left{ \mathbf{x} \mid |\mathbf{x} - \mathbf{c}| \leq r \right}
$$

여기서 $\mathbf{c}$는 구의 중심 좌표이고, $r$는 반지름이다.

**시각적 모델의 복잡성**

반대로, 시각적 요소는 로봇의 외관을 시뮬레이션에서 실제와 가깝게 보이도록 하는 것이 목적이기 때문에 매우 복잡한 3D 메쉬 모델로 정의될 수 있다. 이러한 메쉬는 **STL** 또는 **Collada**와 같은 파일 형식으로 저장되며, 수학적으로는 복잡한 다면체의 모음으로 볼 수 있다. 하지만 이러한 메쉬는 물리적 시뮬레이션에서 사용되지 않으며, 단순히 시각적 표현에만 사용된다.

#### 로봇 모델링에서의 역할

시각적 요소와 물리적 요소는 각각 다른 역할을 한다.

**시각적 요소의 역할**

시각적 요소는 로봇의 외형을 직관적으로 나타내어 사용자가 로봇을 쉽게 인식할 수 있도록 돕는다. 이는 로봇의 시뮬레이션 환경에서 중요한 부분이다. 하지만 시각적 요소는 물리적 시뮬레이션에서 로봇의 움직임이나 충돌 계산에 영향을 미치지 않기 때문에, 단순히 로봇의 외관에만 집중된다.

**물리적 요소의 역할**

물리적 요소는 로봇이 물리 법칙에 따라 어떻게 움직이는지, 다른 물체와 어떻게 상호작용하는지를 결정한다. 물리적 요소는 로봇의 질량, 관성, 충돌 모델을 정의하여 시뮬레이션에서 로봇의 동역학을 계산하는 데 사용된다. 이는 물리 엔진에서 처리되며, 로봇이 다른 물체와 충돌하거나 움직일 때 물리적 상호작용을 계산하는 데 중요한 역할을 한다.
