URDF에서 로봇의 시각적 요소를 정의할 때 메쉬 파일은 로봇의 외형을 보다 정확하고 복잡하게 표현할 수 있는 방법 중 하나이다. 일반적으로 STL, Collada와 같은 파일 형식을 사용하며, 이들 파일은 로봇의 외부 구조를 시각적으로 나타내는 데 유용하다. 이러한 메쉬 파일은 URDF에서 직접 참조하여 로봇의 시각적 모델을 설정할 수 있다.

STL 파일

STL (Stereolithography)은 3D 프린팅에서 널리 사용되는 파일 형식이며, 주로 삼각형으로 이루어진 격자를 이용하여 표면을 표현한다. STL 파일은 단순하면서도 경량으로, 시뮬레이션 속도를 저하시키지 않으면서 복잡한 형상을 표현할 수 있다.

STL 파일을 URDF에 적용하는 과정은 아래와 같다.

  1. STL 파일 준비 먼저 로봇의 시각적 외형을 STL 파일로 준비해야 한다. 이를 위해 3D 모델링 소프트웨어(예: Blender, SolidWorks)를 사용할 수 있다.

  2. URDF에서 STL 파일 참조 URDF에서 STL 파일을 참조하기 위해서는 <mesh> 태그를 사용한다. 예를 들어, URDF에서 로봇의 팔을 STL 파일로 시각화하려면 아래와 같은 구문을 사용할 수 있다.

xml <visual> <geometry> <mesh filename="package://my_robot/meshes/arm.stl"/> </geometry> <material name="silver"/> </visual>

  1. 시각적 요소의 위치 및 크기 조정 STL 파일을 불러올 때, 크기와 위치를 조정하는 것이 중요하다. <origin> 태그를 사용하여 메쉬 파일의 위치와 회전값을 설정할 수 있다. 위치는 3차원 좌표 (x, y, z)로 나타내며, 회전은 Roll-Pitch-Yaw (RPY) 각도로 나타낸다. 수식으로 표현하면 회전 행렬은 다음과 같다.
\mathbf{R}(\text{RPY}) = \begin{bmatrix} \cos(\theta_y)\cos(\theta_z) & \cos(\theta_z)\sin(\theta_x)\sin(\theta_y) - \cos(\theta_x)\sin(\theta_z) & \sin(\theta_x)\sin(\theta_z) + \cos(\theta_x)\cos(\theta_z)\sin(\theta_y) \\ \cos(\theta_y)\sin(\theta_z) & \cos(\theta_x)\cos(\theta_z) + \sin(\theta_x)\sin(\theta_y)\sin(\theta_z) & \cos(\theta_x)\sin(\theta_y)\sin(\theta_z) - \cos(\theta_z)\sin(\theta_x) \\ -\sin(\theta_y) & \cos(\theta_y)\sin(\theta_x) & \cos(\theta_x)\cos(\theta_y) \end{bmatrix}

여기서 \theta_x, \theta_y, \theta_z는 각각 Roll, Pitch, Yaw 각도를 나타낸다.

  1. STL 파일의 축척 STL 파일의 기본 단위는 미터이며, 필요한 경우 축척을 변경할 수 있다. 이를 위해 <scale> 태그를 사용하며, 축척값을 (sx, sy, sz)로 지정한다. 이 값은 각 축에서의 비율을 의미하며, 값이 1보다 크면 모델이 커지고, 1보다 작으면 작아진다.

xml <geometry> <mesh filename="package://my_robot/meshes/arm.stl" scale="1 1 1"/> </geometry>

Collada 파일

Collada(.dae)는 더 복잡한 시각적 요소를 지원하는 파일 형식으로, STL과 달리 색상 및 재질 정보도 포함할 수 있다. 또한 애니메이션 및 여러 모델링 기능을 지원하여 로봇의 외형을 더욱 사실적으로 표현할 수 있다.

  1. Collada 파일 준비 Collada 파일은 STL 파일과 마찬가지로 3D 모델링 소프트웨어(Blender, Maya 등)를 사용하여 준비할 수 있다. 모델을 제작한 후, Collada 파일 형식으로 내보내기(export)하여 URDF에서 사용할 수 있다.

  2. URDF에서 Collada 파일 참조 Collada 파일은 STL 파일과 유사하게 <mesh> 태그를 통해 URDF에 참조된다. Collada 파일은 재질(material)과 색상 정보도 포함할 수 있으므로, 재질 관련 태그를 추가로 정의할 필요가 없다. 예를 들어, 로봇의 몸체를 Collada 파일로 시각화하려면 아래와 같은 구문을 사용할 수 있다.

xml <visual> <geometry> <mesh filename="package://my_robot/meshes/body.dae"/> </geometry> </visual>

  1. 시각적 요소의 위치 및 회전 설정 STL 파일과 동일하게 <origin> 태그를 통해 위치와 회전을 설정할 수 있다. 여기서 위치는 (x, y, z)로 나타내고, 회전은 Roll-Pitch-Yaw 각도로 정의된다. 앞서 제시한 회전 행렬 \mathbf{R}(\text{RPY})을 동일하게 적용할 수 있다.

  2. Collada 파일의 축척 Collada 파일도 STL 파일처럼 기본 단위가 미터로 설정되며, 필요한 경우 축척을 변경할 수 있다. <scale> 태그를 사용하여 각 축에 대한 크기를 조정할 수 있다. 예를 들어, 아래 구문은 Collada 파일을 사용한 로봇 모델의 크기를 변경하는 방법을 보여준다.

xml <geometry> <mesh filename="package://my_robot/meshes/body.dae" scale="1.2 1.2 1.2"/> </geometry>

  1. Collada 파일의 재질 및 색상 Collada 파일에는 자체적으로 재질 및 색상 정보가 포함될 수 있다. 따라서 STL 파일처럼 URDF에서 추가적으로 재질을 설정할 필요가 없다. 그러나 필요에 따라 URDF에서 재질을 덮어쓸 수도 있으며, 이를 위해 <material> 태그를 사용한다. 재질 설정의 기본 예시는 아래와 같다.

xml <material name="blue"> <color rgba="0 0 1 1"/> </material>

  1. Collada 파일의 애니메이션 Collada 파일의 장점 중 하나는 애니메이션 기능을 지원한다는 점이다. 로봇의 특정 부분을 움직이거나 동작 시퀀스를 표현할 수 있다. 이때 URDF 파일 내에서 애니메이션 기능을 정의하는 것은 직접적으로 이루어지지 않지만, Gazebo와 같은 시뮬레이션 환경에서 이를 활용할 수 있다. Collada 파일 내에 정의된 애니메이션 시퀀스는 시뮬레이션에서 로봇의 동작을 구현하는 데 사용될 수 있다.

메쉬 파일의 적용 시 고려사항

  1. 메쉬 파일의 복잡성 STL 또는 Collada 파일의 복잡도가 높을수록 시뮬레이션의 성능이 저하될 수 있다. 특히 Collada 파일은 STL보다 더 많은 정보(재질, 색상, 애니메이션 등)를 포함하므로, 시뮬레이션에서 로봇이 많거나 복잡한 환경에서는 성능 저하가 발생할 수 있다. 이러한 경우, 메쉬 파일의 다각형 수(polygons)를 줄이는 것이 필요할 수 있다.

  2. 충돌 모델과의 차이 시각적 요소로 사용되는 메쉬 파일은 충돌 모델로도 사용할 수 있다. 그러나 시각적으로 복잡한 메쉬 파일은 충돌 처리에서 과도한 계산을 요구할 수 있으므로, 충돌 모델은 보통 간단한 형상으로 정의하는 것이 일반적이다. 충돌 모델에 대한 간단한 형상 정의는 이후 충돌 모델 섹션에서 다룰 예정이다.