ROS2 이론 정리

ROS2 URDF에 대한 모든 것

dawon-project 2025. 1. 6. 20:09

1. URDF : ROS에서 실제 물리적인 로봇이 아닌 가상환경에서 로봇의 규격을 정의할 수 있는 규칙으로, XML 형식으로 구성
     => gazebo에 가상으로 만든 로봇 URDF를 띄워서 시뮬레이션 진행할 수 있다.


-> URDF에서의 각도는 라디안을 사용 (360도 -> 2π, 180도 ->π)

2. URDF의 로봇 좌표계상의 표현

  • 직교 좌표계 : 로봇의 3차원 공간에서의 위치 정의 (단위 : meter)
  • 오일러각 : 로봇이 x축에 대해서 회전(roll), y축에 대해서 회전(pitch), z축에 대해서 회전(yaw)을 통해 로봇이 바라보는 방향 정의   
      -> 로봇의 부품이 전체 로봇에서 어디에 위치하는지 정의 (팔, 다리, 손가락 등)

3. URDF에서 사용하는 XML 태그

  • robot
  • sensor/proposals
  • link
  • transmission
  • joint
  • gazebo
  • sensor
  • model_state
  • model

 

*<robot> 태그 : URDF에서 로봇을 설명하기 위한 루트로서 반드시 포함되어야 하며 로봇의 이름을 정의한다.
 ex) <robot name="manipulator">

                            <!-- manipulator robot links and joints and more -->                 
        </robot>

*<link> 태그 : link는 강체의 물리적 특성(inertial: 관성), 시각적 형체(visual), 물리적 충돌(collision) 속성을 가지고있다.

  • 강체 : 어떤 힘으로도 모양과 부피를 바꿀 수 없는 가상적인 물체
              -> 링크에는 강체의 물리적 특성(inertial), 시각적인 형체(visual), 물리적 충돌(collision) 속성을 갖는다.
             -> 단순히 형태만 가지고 있는 것이 아니라 관성 등과 같은 물체의 성질을 가지고 있다.
  • <origin> : link의 기준 좌표(Frame)으로, 바로 앞에 연결되어 있는 조인트의 좌표를 사용
                -> 각각의 특성 태그들은 link origin으로부터 각각의 상대 위치를 <origin> 값으로 설정, 즉, 그 값은 link origin으로부터의 상대적 이동(xyz 속성)과 회전(rpy 속성 : roll, pitch, yaw)한 위치이다.
  • 물리적 특성(inertial) : 질량(mass)은 kg로 정의, 관성(inertial)은 3 x 3 회전 관성 행렬으로 아래에서 굵은체 값만 정의

  • 시각적 형체 (visual) : geometry와 mesh를 통해 로봇의 형체를 구현
    • <geometry> : 기하학 값들을 설정, box(x, y, z), cylinder(radius, length), sphere(radius), mesh(filename)들을 통해 표현     
                   -> mesh에는 3D 모델링 된 stl 파일을 지정 가능 
                   -> <geometry>의 여러 속성 값들은 <origin>에서 설정한 위치 값을 중심으로 대칭
      • 박스 (box) : 상자로써 크기는 세 변 길이 가로(width), 세로(length), 높이(height)
             ex) <box size = "0.6 0.1 0.2"/>
      • 실린더(cylinder) : 실린더는 반지름(radius)과 길이
             ex) <cylinder length = "0.6" radius = "0.2"/>
      • 구(sphere) : 공으로써 반지름(radius)  
             ex) <sphere radius ="0.2"/> 
         
    • 메쉬(mesh) : 3D 캐드 파일로써 STL파일과 DAE(Digital Asset Exchange)파일로써 로봇을 3D로 설계한그대로 사용할 수 있다. STL은 색상X / DAE는 색상을 포함 
             ex) 
      <mesh filename="package://meshes/example.stl"/>             

    • 물리적 충돌 (collision) : 링크의 물리적으로 충돌 영역을 정의

link 태그 예시

*joint : 두 link 간의 연결 -> 모든 link는 한 개 이상의 joint로 연결되어야 한다.

  • 부모 링크(parent) : 기준이 되는 링크
  • 자식 링크 (child) : 타겟이 되는 링크
  • <origin> : parent link에 대한 child link의 위치 관계
  • joint의 종류
    • 고정 관절 (fixed joint) : 두개의 link를 하나의 link와 같이 연결할 때 사용
    • 회전 관절 (revolute joint) : 선풍기의 좌우 회전과 같이 일정 각도 범위를 회전하는 joint -> 서보모터에 많이 사용
    • 연속 회전 (continuous joint) : 선풍기의 날개나 자동차의 바퀴처럼 연석 회전을 하는 joint -> DC 모터에 많이 사용
    • 프리즘 관절 (prismatic joint) : 현관문 도어락처럼 단일 축에 대해 선형으로 범위를 갖고 이동하는 관절
    • 자유 관절 (floating joint) : 평면에 수직으로 이동 및 회전을 할 수 있는 관절
         -> 6차원 (xyz, rpy) 이동 및 회전을 허용하는 관절

URDF 예시
gazebo에 띄운 URDF

4. xacro(자크로) : xml + macro의 합성어로 XML에서 매크로(macro)를 사용할 수 있다.  

  • 매크로(macro) : 여러 개의 명령을 묶어 하나의 명령으로 만들어 여러 개의 명령을 수행하거나 반복적인 작업에서 매크로 명령만으로 효과적인 작업을 수행할 수 있게 하는것
  • URDF를 만드는데 XML로도 가능하지만 xacro를 사용하면 더 손쉽게 만들 수 있다.