ROS 2

URDF란?

정지홍 2025. 2. 3. 13:55

URDF (Unified Robot Description Format)

  • URDF는 ROS의 로봇의 기하학과 구성을 명세화 시킨 file format이다.
    • 즉, 로봇의 모델을 표현하기 위한 XML 기반의 파일 형식이다.
  • URDF의 기본 구성 요소
    • 1. Link 링크
      • 로봇의 구성 요소 중 하나이며, 실제 물리적인 부분을 나타낸다.
      • 각 link는 질량,크기,표면,재질 등의 속성을 가질 수 있다.
      • ex) 바퀴 , 팔 , 몸체 등
    • 2. Joint 관절
      • 관절은 두개의 link를 연결하는 역할을 한다.
      • 관절은 회전하는 관절(revolute), 직선으로 이동하는 관절(prismatic)처럼 다양하게 존재
        • 각 관절은 위치,각도, 제한 등을 정의하는 것이 가능하다.
    • 3. visual 시각적 속성
      • 로봇의 외형을 나타내는 시각적 요소를 정의한다.
        • ex) 모델링에 사용되는 색상,텍스처,메시 등 정의...
    • 4. collision 충돌 속성
      • 로봇의 충돌 처리에 필요한 요소를 정의한다.
        • 충돌 감지를 위해서 사용하는 형태나 재질을 정의하며, 실제 물리 엔진에서 사용한다.
    • 5. inertial 관성 속성
      • 각 링크의 물리적인 특성들을 정의한다.
        • ex) 질량,무게 중심, 관성 모멘트 등을 정의.

 

 

 

URDF의 구조와 주요 요소

  • <robot>
    • URDF 파일의 루트 요소이다.
    • 해당 태그는 로봇의 전체 모델을 감싸는 역할을 하며, 로봇의 이름을 지정할 수 있다.
<robot name="my_robot">
</robot>

 

  • <link>
    • 실제 물리적인 형태이며, 다른 link와 연결되기 위해서 joint를 가질수있다.
    • <visual>은 시각적 속성,외형을 정의
      • geometry는 형상(박스,구,원통 등)을 정의
      • material은 재질을 정의
    • <collision>은 물리적 충돌 처리 속성, 시뮬레이션 시 충동 계산에 사용된다.
    • <inertial>은 관성 속성, 질량 , 관성 모멘트 , 무게 중심을 정의한다.
<link name="base_link">
  <visual>
    <geometry>
      <box size="0.5 0.5 0.1"/>
    </geometry>
    <material name="blue"/>
  </visual>
  <collision>
    <geometry>
      <box size="0.5 0.5 0.1"/>
    </geometry>
  </collision>
  <inertial>
    <mass value="1.0"/>
    <inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01"/>
  </inertial>
</link>

 

  • <joint>
    • 두 개 이상의 링크를 연결하는 관절을 정의
    • 관절은 링크들을 어떻게 연결하고 움직이게 할지를 정의한다.
    • type은 관절의 종류이다.
      • revolute 회전 , prismatic 직선 이동 , fixed 고정
    • parent , child
      • 부모와 자식 링크를 정의한다.
      • 관절은 부모 링크에서 자식링크로 이동하거나 회전하는 역할을 한다.
    • origin은 관절의 상대적인 위치와 회전을 정의
    • axis는 관절이 움직일 축을 정의
    • limit는 관절의 동작 범위를 정의
<joint name="joint1" type="revolute">
  <parent link="base_link"/>
  <child link="arm"/>
  <origin xyz="0 0 0.1" rpy="0 0 0"/>
  <axis xyz="0 1 0"/>
  <limit lower="0" upper="1.57" effort="10" velocity="1"/>
</joint>