# 충돌 모델 정의

충돌 모델은 로봇 시뮬레이션에서 물리적 상호작용을 처리하기 위해 반드시 필요한 요소이다. 로봇의 링크(link)가 서로 혹은 환경과 충돌할 때 발생하는 물리적인 상호작용을 정의하기 위해 충돌 모델을 설계해야 한다. 이러한 충돌 모델은 실제 물리적 특성과 유사하게 동작해야 하므로, 단순한 형상(예: 박스, 실린더, 구)으로 정의하는 경우가 많다.

### 충돌 모델의 역할

충돌 모델은 주로 물리 엔진(ODE, Bullet 등)에서 사용되어 물체 간의 상호작용을 시뮬레이션한다. 시뮬레이션에서 충돌이 발생할 경우, 물체는 물리적으로 반응하여 운동 상태가 변한다. 이러한 충돌 계산은 시뮬레이션 성능에 중요한 영향을 미치기 때문에 충돌 모델의 형상과 정의가 효율적으로 설계되어야 한다.

### 기본 충돌 형상

충돌 모델은 시뮬레이션 성능을 고려해 간단한 형상으로 정의된다. 일반적으로 박스, 실린더, 구와 같은 기본 형상이 사용된다. 이들 형상은 수학적으로 간단하게 정의되며, 충돌 계산을 쉽게 할 수 있다.

#### 박스(Box) 충돌 모델

박스 충돌 모델은 축에 정렬된 직육면체로 정의된다. 박스는 다음과 같은 수학적 표현으로 정의할 수 있다.

박스의 길이, 너비, 높이를 각각 $l\_x$, $l\_y$, $l\_z$라 할 때, 박스의 충돌 모델은 다음과 같이 정의된다.

$$
\mathbf{C}\_{\text{box}} = \left{ \mathbf{r} \in \mathbb{R}^3 , \middle| , -\frac{l\_x}{2} \leq x \leq \frac{l\_x}{2}, , -\frac{l\_y}{2} \leq y \leq \frac{l\_y}{2}, , -\frac{l\_z}{2} \leq z \leq \frac{l\_z}{2} \right}
$$

여기서 $\mathbf{C}\_{\text{box}}$는 박스의 충돌 모델을 정의하는 집합이고, $\mathbf{r} = \[x, y, z]^T$는 공간 내 점을 나타내는 벡터이다. 이 정의에 따라, 박스 내부에 속하는 점들은 모두 충돌 모델로 간주된다.

#### 실린더(Cylinder) 충돌 모델

실린더 충돌 모델은 중심 축에 대해 대칭인 원통형 모양을 갖는다. 실린더의 반지름과 높이를 각각 $r$, $h$라 할 때, 실린더의 충돌 모델은 다음과 같이 정의된다.

$$
\mathbf{C}\_{\text{cylinder}} = \left{ \mathbf{r} \in \mathbb{R}^3 , \middle| , x^2 + y^2 \leq r^2, , -\frac{h}{2} \leq z \leq \frac{h}{2} \right}
$$

이 경우, 실린더의 충돌 모델은 반지름 $r$ 내에서, 그리고 높이 $h$의 범위 내에 있는 점들로 구성된다. 충돌 계산은 주로 실린더의 중심 축을 기준으로 이루어지며, 실린더의 상하단 모서리 부분에서도 충돌이 발생할 수 있다.

#### 구(Sphere) 충돌 모델

구 충돌 모델은 가장 단순한 충돌 모델 중 하나로, 반지름 $r$을 가지는 구형으로 정의된다. 구의 충돌 모델은 다음과 같은 수학적 식으로 나타낼 수 있다.

$$
\mathbf{C}\_{\text{sphere}} = \left{ \mathbf{r} \in \mathbb{R}^3 , \middle| , x^2 + y^2 + z^2 \leq r^2 \right}
$$

여기서 $\mathbf{C}\_{\text{sphere}}$는 구의 충돌 모델을 정의하는 집합이고, $r$은 구의 반지름이다. 구 충돌 모델은 모든 방향에서 동일한 반경을 가지므로 계산이 간단하며, 많은 로봇 시뮬레이션에서 기본 충돌 모델로 사용된다.

### 충돌 모델의 사용 예

간단한 충돌 형상을 정의한 후, 이를 URDF 파일에 포함시켜야 한다. URDF에서 충돌 모델은 `<collision>` 태그를 통해 정의되며, 각 링크에 대해 설정할 수 있다. 이때 충돌 모델은 로봇의 실제 물리적 특성과 가까운 간단한 기하학적 형태를 사용하여 시뮬레이션 성능을 최적화할 수 있다.

예를 들어, 로봇의 링크가 직육면체(박스) 형태라면 다음과 같이 URDF에서 충돌 모델을 정의할 수 있다.

```xml
<collision>
  <geometry>
    <box size="1 0.5 0.2"/>
  </geometry>
</collision>
```

여기서 `size` 속성은 박스의 길이, 너비, 높이를 