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"/>
- 박스 (box) : 상자로써 크기는 세 변 길이 가로(width), 세로(length), 높이(height)
-
메쉬(mesh) : 3D 캐드 파일로써 STL파일과 DAE(Digital Asset Exchange)파일로써 로봇을 3D로 설계한그대로 사용할 수 있다. STL은 색상X / DAE는 색상을 포함
ex) <mesh filename="package://meshes/example.stl"/> -
물리적 충돌 (collision) : 링크의 물리적으로 충돌 영역을 정의
- <geometry> : 기하학 값들을 설정, box(x, y, z), cylinder(radius, length), sphere(radius), mesh(filename)들을 통해 표현
*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) 이동 및 회전을 허용하는 관절
4. xacro(자크로) : xml + macro의 합성어로 XML에서 매크로(macro)를 사용할 수 있다.
- 매크로(macro) : 여러 개의 명령을 묶어 하나의 명령으로 만들어 여러 개의 명령을 수행하거나 반복적인 작업에서 매크로 명령만으로 효과적인 작업을 수행할 수 있게 하는것
- URDF를 만드는데 XML로도 가능하지만 xacro를 사용하면 더 손쉽게 만들 수 있다.