충돌 모델의 개념

URDF에서 충돌 모델은 로봇이 환경 내에서 다른 객체와 상호작용할 때 물리적으로 충돌할 수 있는 부분을 정의하는 데 사용된다. 충돌 모델은 실제 로봇이 환경과 충돌할 수 있는 영역을 표현하기 위한 간소화된 형상으로 정의되며, 이는 물리 엔진이 충돌 계산을 처리하는 데 필수적이다.

충돌 모델은 주로 로봇의 물리적 형태와 유사하게 설정되지만, 복잡한 메쉬 형상보다는 계산의 효율성을 높이기 위해 간단한 기하학적 형상을 사용한다. 일반적으로 충돌 모델에서는 다음과 같은 간단한 기하학적 형상을 사용한다: - 박스(Box) - 실린더(Cylinder) - 구(Sphere)

이러한 간단한 형상은 물리 엔진이 빠르게 충돌을 감지하고 계산할 수 있도록 하여 시뮬레이션 성능을 향상시킨다.

충돌 모델 정의의 수학적 표현

충돌 모델을 정의할 때, 기본적으로는 링크(Link)의 위치와 방향을 기준으로 물리적 충돌을 감지해야 한다. 이를 위해 링크의 변환 행렬(Transformation Matrix)이 사용되며, 링크에 연결된 조인트(Joint)를 통해 링크의 위치 및 회전이 결정된다.

링크의 위치와 방향은 일반적으로 다음과 같은 변환 행렬로 표현된다:

\mathbf{T}_{link} = \begin{bmatrix} \mathbf{R}_{link} & \mathbf{p}_{link} \\ \mathbf{0}^{T} & 1 \end{bmatrix}

여기서: - \mathbf{R}_{link}는 링크의 회전 행렬(3x3)로, 링크의 방향을 나타낸다. - \mathbf{p}_{link}는 링크의 위치 벡터(3x1)로, 링크의 중심 좌표를 나타낸다. - \mathbf{T}_{link}는 링크의 위치와 방향을 동시에 나타내는 4x4 변환 행렬이다.

충돌 모델을 정의할 때, 이러한 링크의 변환을 기준으로 각 기하학적 형상(Box, Cylinder, Sphere 등)의 위치와 방향도 함께 변환된다. 예를 들어, 충돌 모델로 박스(Box)를 사용한다면, 그 박스의 중심 좌표와 각 변의 길이를 링크의 좌표계에서 정의해야 한다.

박스의 충돌 모델을 정의하는 수학적 식은 다음과 같다:

\mathbf{p}_{box} = \mathbf{T}_{link} \cdot \mathbf{p}_{local}

여기서: - \mathbf{p}_{box}는 전역 좌표계에서 박스의 위치 벡터이다. - \mathbf{p}_{local}은 링크 좌표계에서 박스의 중심 위치 벡터이다. - \mathbf{T}_{link}는 링크의 변환 행렬로, 박스가 속한 링크의 위치와 방향을 나타낸다.

박스의 각 변의 길이는 다음과 같이 정의된다: - l_x, l_y, l_z는 각각 박스의 x축, y축, z축 방향의 길이를 나타낸다.

이러한 박스의 충돌 모델을 사용하여 물리 엔진은 박스와 환경 또는 다른 객체 간의 충돌을 감지할 수 있다. 충돌이 감지되면, 물리 엔진은 반작용 힘을 계산하여 로봇의 동작을 제어한다.

충돌 감지의 기본 원리

충돌 감지에는 두 객체의 기하학적 형상이 교차하는지를 확인하는 계산이 포함된다. 충돌 모델이 단순한 기하학적 형상으로 정의되면, 충돌 여부를 보다 빠르게 계산할 수 있다. 예를 들어, 두 개의 구(Sphere)가 충돌하는지를 계산하려면 각 구의 중심 간 거리가 두 구의 반지름의 합보다 작은지를 비교하면 된다.

두 구의 충돌 여부를 계산하는 공식은 다음과 같다:

d(\mathbf{p}_1, \mathbf{p}_2) = \|\mathbf{p}_1 - \mathbf{p}_2\|

여기서: - d(\mathbf{p}_1, \mathbf{p}_2)는 두 구의 중심 간 거리이다. - \mathbf{p}_1, \mathbf{p}_2는 각각 구 1과 구 2의 중심 위치 벡터이다.

충돌 조건은 다음과 같다:

d(\mathbf{p}_1, \mathbf{p}_2) < r_1 + r_2

여기서 r_1, r_2는 각각 구 1과 구 2의 반지름이다.

이 공식을 사용하면 두 구가 충돌하는지 여부를 빠르게 판단할 수 있다. 박스, 실린더와 같은 다른 형상에 대해서도 유사한 충돌 감지 알고리즘이 적용된다.

충돌 모델의 기하학적 형상 정의

충돌 모델에서 사용하는 기본적인 기하학적 형상은 물리 엔진에서 충돌 감지를 효율적으로 수행할 수 있도록 설계된다. 로봇의 복잡한 메쉬(mesh) 모델을 그대로 사용하는 대신, 간소화된 기하학적 모델을 사용하여 충돌 계산을 수행한다. 여기서는 URDF에서 자주 사용되는 기하학적 형상인 박스(Box), 실린더(Cylinder), 구(Sphere)의 정의와 충돌 감지 방식을 설명한다.

박스(Box) 충돌 모델 정의

박스는 3개의 축 방향으로 길이를 가지는 직육면체로 정의된다. 박스의 충돌 모델은 다음과 같은 매개변수로 설정된다:

박스의 충돌 모델에서, 박스의 중심 좌표를 기준으로 한 충돌 영역은 다음과 같이 정의된다:

\mathbf{p}_{box} = \left( \frac{l_x}{2}, \frac{l_y}{2}, \frac{l_z}{2} \right)

여기서 박스는 중심 좌표를 기준으로 l_x, l_y, l_z의 절반씩 확장된 범위를 가지며, 각 축 방향에서 충돌 감지가 이루어진다.

실린더(Cylinder) 충돌 모델 정의

실린더는 원형 단면을 가지며 특정 축 방향으로 높이를 가지는 기하학적 형상이다. 실린더 충돌 모델은 다음과 같은 매개변수로 정의된다:

실린더의 충돌 영역은 해당 축을 따라 반지름 r과 높이 h로 정의된다. 실린더의 축 방향을 기준으로 충돌 모델을 정의하면, 실린더의 상단과 하단 그리고 원형 단면의 경계에서 충돌 감지가 발생한다.

실린더의 충돌 영역은 다음과 같은 수학적 관계로 표현될 수 있다:

\mathbf{p}_{cyl} = \left( r \cos{\theta}, r \sin{\theta}, \frac{h}{2} \right)

여기서 \theta는 원형 단면에서의 각도를 나타낸다.

구(Sphere) 충돌 모델 정의

구는 가장 단순한 기하학적 형상으로, 중심을 기준으로 일정한 반지름을 가지는 3차원 구형이다. 구의 충돌 모델은 다음과 같은 매개변수로 정의된다:

구의 충돌 영역은 단순히 중심에서 반지름 r만큼의 거리를 기준으로 계산되며, 충돌 감지 계산이 매우 간단하다. 구의 충돌 영역은 다음과 같이 정의된다:

\|\mathbf{p}_{sphere}\| \leq r

여기서 \mathbf{p}_{sphere}는 구의 중심에서 특정 지점까지의 거리 벡터이다.

복잡한 충돌 모델에서 메쉬 사용

간단한 기하학적 형상으로 충돌 모델을 정의하는 것이 불가능한 경우, 복잡한 메쉬 파일을 사용할 수 있다. 복잡한 메쉬 충돌 모델은 STL 또는 Collada와 같은 형식의 파일을 사용하여 로봇의 실제 물리적 형상을 충돌 모델로 정의한다.

메쉬 기반 충돌 모델의 충돌 감지는 각 삼각형 면에서의 충돌을 계산하며, 이는 복잡한 객체의 충돌 감지를 정밀하게 처리할 수 있다. 하지만, 메쉬 파일을 사용하는 경우 계산 복잡도가 증가하여 시뮬레이션 성능에 영향을 줄 수 있다.

복잡한 충돌 모델을 사용할 때는 메쉬 파일을 적절히 단순화하거나, 충돌 감지 영역에서 중요한 부분만을 메쉬로 정의하는 것이 권장된다.

충돌 모델의 물리적 특성

충돌 모델을 정의할 때 중요한 요소는 물리적 특성을 포함하여 로봇의 움직임과 환경과의 상호작용을 결정하는 것이다. 이러한 물리적 특성에는 질량, 관성, 마찰 계수 등이 포함되며, 충돌 시 로봇이 어떻게 반응할지를 결정하는 중요한 요소들이다.

질량과 관성

질량(m)은 로봇의 각 링크의 무게를 나타내며, 로봇의 충돌 시 힘과 가속도에 직접적인 영향을 미친다. URDF에서 각 링크의 질량을 정의할 때는 해당 링크의 중심에서 질량 중심이 어떻게 배분되는지를 명시해야 한다.

질량 중심을 나타내는 수학적 표현은 다음과 같다:

\mathbf{p}_{cm} = \left( x_{cm}, y_{cm}, z_{cm} \right)

여기서 \mathbf{p}_{cm}은 질량 중심 좌표이다.

관성 모멘트(\mathbf{I})는 로봇의 각 링크가 회전할 때 그 링크가 저항하는 정도를 나타낸다. 관성 모멘트는 충돌 후 링크가 어떻게 회전할지에 영향을 미치는 중요한 물리적 특성이다. URDF에서는 각 링크의 관성 텐서(inertia tensor)를 정의하여 이를 나타낸다.

관성 모멘트는 다음과 같은 3 \times 3 행렬로 정의된다:

\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}는 교차 관성 모멘트로 각 축 사이의 상호작용을 나타낸다.

질량과 관성은 충돌 후 로봇이 어떻게 이동하고 회전할지 결정하는 중요한 물리적 특성이다. 물리 엔진은 이러한 물리적 특성을 기반으로 충돌 시 로봇의 동작을 계산한다.

마찰

마찰은 충돌 후 로봇과 표면 간의 상호작용을 결정하는 또 다른 중요한 요소이다. URDF에서는 마찰 계수(\mu)를 정의하여, 로봇이 표면에서 얼마나 쉽게 미끄러질 수 있는지를 설정할 수 있다.

마찰 계수는 정지 마찰과 동적 마찰로 나뉜다: - 정지 마찰(\mu_s)은 로봇이 멈춰 있을 때 표면에서 미끄러지기 시작하는 데 필요한 최소한의 힘을 나타낸다. - 동적 마찰(\mu_k)은 로봇이 움직이고 있을 때 표면에서 미끄러질 때의 저항을 나타낸다.

마찰 계수는 로봇의 충돌 후 정지 및 이동을 결정하는 중요한 변수로, 시뮬레이션에서 로봇의 현실적인 동작을 구현하는 데 필수적이다.

마찰 계수를 사용하는 충돌 모델에서의 힘 계산은 다음과 같은 식으로 정의된다:

F_f = \mu \cdot F_n

여기서: - F_f는 마찰력이다. - \mu는 마찰 계수로, 정지 마찰 또는 동적 마찰 중 하나이다. - F_n은 로봇과 표면 사이의 수직 접촉력(일반적으로 중력에 의해 결정됨)이다.

마찰 계수를 정확히 설정함으로써, 로봇이 환경과 상호작용할 때 더 현실적인 물리적 반응을 얻을 수 있다.

충격과 반발 계수

로봇이 충돌할 때, 충돌에 의해 발생하는 힘과 그 충격을 제어하기 위해 반발 계수(e)를 정의할 수 있다. 반발 계수는 두 객체가 충돌 후 얼마나 반발하는지를 나타내는 값으로, 0에서 1 사이의 값을 가진다. 반발 계수가 1에 가까울수록, 충돌 후 객체는 더 많이 반발하며, 0에 가까울수록 충돌 후 거의 반발하지 않고 에너지가 소멸된다.

반발 계수를 사용하는 충돌 모델에서의 속도 변화는 다음과 같이 표현된다:

v_{\text{final}} = e \cdot v_{\text{initial}}

여기서: - v_{\text{final}}은 충돌 후의 속도이다. - v_{\text{initial}}은 충돌 전의 속도이다. - e는 반발 계수이다.

반발 계수를 적절히 설정함으로써, 충돌 후 로봇의 에너지가 얼마나 소실되는지 또는 얼마나 유지되는지를 제어할 수 있다.