1. 들어가기 전에
URDF는 ROS(Robot Operating System)에서 로봇 모델을 XML로 설명 합니다. ROS는 가제보(gazebo)와 연동을 하여 로봇을 만들기 전에 URDF로 로봇 모델을 정의하여 시뮬레이션을 할 수 있습니다.
다음은 URDF에서 사용하는 XML 입니다.
- robot
- sensor/proposals
- link
- transmission
- joint
- gazebo
- sensor
- model_state
- model
이 문서에서는 로봇을 설명하는데 필요한 robot, link, joint 에 대해서 설명 합니다.
호도법 (라디안, radian)
URDF에서 사용하는 각도는 우리가 많이 사용하는 60분법이 아닌 라디안(radian, 호도법)을 사용 합니다. 라디안은 반지름 r과 호의 길이가 r과 같을 때의 각을 1 라디안이라고 정의 합니다.
360도는 2π가 되고 180도는 π입니다.
좌표계
URDF로 로봇을 좌표계에 표현은 2가지로 표현을 합니다.
첫번째는 직교 좌표계를 통해서 3차원 공간에 로봇이 어디에 있는지 알 수 있습니다. 직교 좌표계로만 로봇을 표현하면 로봇이 어느 방향을 향하고 있는지 알 수 없습니다.
두번째는 오일러 각을 통해서 로봇이 x축에 대해서 회전(roll), y축에 대해서 회전(pitch), z축에 대해서 회전(yaw)을 통해 로봇을 표현하면 3차원 공간에서 완벽하게 로봇을 표현 할 수 있습니다.
URDF에서는 xyz와 rpy로 로봇의 위치를 설정 합니다.
2. URDF (Unified Robot Description Format)
2.1. robot
URDF에서 로봇을 설명하기 위한 루트로써 반드시 포함되어야 하며 로봇의 이름을 정의 합니다.
robot 예는 다음과 같습니다.
<robot name="manipulator">
<!-- manipulator robot links and joints and more -->
</robot>
2.2. link
링크(link)를 설명하기 위해서는 강체(rigid body)에 대해 먼저 설명을 해야 합니다. 물리 시간에 강체에 대한 정의는 외부의 힘을 받아도 그 크기와 모양이 변하지 않는 이상적인 고체를 강체라고 합니다. 우리가 주위에서 볼 수 있는 쇠구슬을 보통 강체라고 합니다.
URDF에서 자동차 로봇이라면 차체도 강체가 되며, 바퀴도 강체로써 모두 링크(link)로 설명 됩니다. 링크에는 강체의 물리적 특성(inertial), 시각적 형체(visual), 물리적 충돌(collision) 속성을 갖고 있습니다.
원점 좌표(origin)
좌표는 직교 좌표계를 통해 로봇의 위치를 3차원 공간 상에서 표현을 하고 오일러 각을 통해 로봇의 방향을 표현 합니다 직교 좌표계의 단위는 미터(meter)를 사용하고 오일러 각은 라디안(radin)으로 정의 합니다.
- xyz : 직교 좌표계 값
- rpy : 오일러 각 값(roll, pitch, yaw)
링크는 크게 물리적 특성(inertial), 시각적 특성(visual), 물리적 충돌(collison)을 갖고 있으며, 각각 다른 위치 값을 갖을 수 있습니다.
물리적 특성(inertial)
강체의 물리적 특성은 질량과 관성이 있습니다.
- 질량(mass)은 킬로그램(kilogram)으로 정의 합니다.
- 관성(inertia)은 3x3 회전 관성 행렬 입니다. 대칭으로써 아래 굵은체 값만 정의를 합니다.
ixx ixy ixz
ixy iyy iyz
ixz iyz izz
시각적 형체(visual)
시각적 형체는 2가지 방법으로 표현을 할 수 있습니다. 지오메트리(geometry)와 메쉬(mesh)가 있습니다.
- 지오메트리(geometry)
- 박스 (box) : 상자로써 크기는 세 변 길이 가로(width), 세로(length), 높이(height) 입니다.
<box size="0.6 0.1 0.2"/>
- 실린더(cylinder) : 실린더는 반지름(radius)과 길이 입니다.
<cylinder length="0.6" radius="0.2"/>
- 구(sphere) : 공으로써 반지름(radius) 입니다.
<sphere radius="0.2"/>
- 메쉬(mesh) : 3D 캐드 파일로써 STL파일과 DAE(Digital Asset Exchange)파일로써 로봇을 3D로 설계를 한 그대로를 사용할 수 있습니다. STL과 DAE파일의 차이점은 DAE 파일은 색상까지 포함하고 있습니다.
<mesh filename="package://meshes/example.stl"/>
- 매터리얼(material) 색상이나 재질의 질감을 표현 합니다.컬러 (color)는 rgba(red, green, blue, alpa)로 색상을 표현 합니다. 범위는 0.0 ~ 1.0 입니다.
<color rgba="1.0 1.0 0.0 1.0" />
- 질감(texture> 질감을 표현 합니다.
<texture filename="package:://textures/example.png"/>
물리적 충돌(collison)
실제 로봇이 벽이나 다른 물체와 충돌하면 로봇이 더 이상 움직이지 못하는 것처럼 링크(link, 강체)의 물리적으로 충돌(collison) 영역을 정의 합니다. 시각적 형체의 지오메트릭(geometry)와 같게 설정하면 됩니다.
다음은 링크(link)의 예 입니다.
<link name="base_link">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
<material name="Red">
<color rgba="1.0 0.0 0.0 1.0" />
</material>
</visual>
<collision>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
</collision>
<inertial>
<mass value="1.0e-03" />
<inertia ixx="1.0e-03" ixy="0.0" ixz="0.0" iyy="1.0e-03" iyz="0.0" izz="1.0e-03" />
</inertial>
</link>
2.3. joint
로봇은 여러 개의 관절(joint)로 이루어져 있으며 관절(joint)는 링크(강체)간 연결을 합니다. 모든 링크는 한 개 이상의 관절로 연결되어야 합니다.
관절(joint)의 종류
URDF에서 로봇이 표현할 수 있는 모든 관절을 포함하지는 않지만 중요한 관절은 모두 지원을 합니다.
- 고정 관절 (fixed joint)
고정 관절은 두 개의 링크를 하나의 링크과 같이 연결할 때 사용을 합니다.
- 회전 관절 (revolute joint)
회전 관절은 선풍기의 좌우 회전과 같이 일정 각도 범위를 회전하는 관절로써, 회전 관절에는 서보모터를 많이 사용 합니다.
- 연속 회전 (continuous joint)
선풍기의 날개나 자동차의 바퀴처럼 연속 회전을 하는 관절로써, 보통 DC모터를 많이 사용 합니다.
- 프리즘 관절 (prismatic joint)
현관문 도어락처럼 단일 축에 대해 선형으로 범위를 갖고 이동하는 관절입니다. 프리즘 관절에는 액추에이터가 있습니다.
- 평면 관절 (planar joint)
평면에 수직으로 이동 및 회전을 할 수 있는 관절 입니다.
- 자유 관절 (floating joint)
6차원(직교 좌표계 3차원, 오일러 각 3차원) 이동 및 회전을 허용하는 관절 입니다.
관절의 종류는 많지만 대부분 사용하는 관절은 고정관절(fixed joint), 회전 관절(revolute joint), 연속 회전(continuous joint)를 사용 합니다.
부모 링크 (parent)
모든 관절에는 부모 링크를 가져야 합니다.
자식 링크 (child)
모든 관절에는 자식 링크를 가져야 합니다.
축 (axis)
관절의 축을 표현 합니다.
동역학 특성(dynamics)
관절의 물리적 동역학 특성을 설정 합니다.
- damping
관절의 물리적 감쇄(daming, 제동) 값으로써, 선형운동(직선 운동) 일 때는 N.s/m 이고, 회전 운동 일 때는 N.m.s/radian 입니다.
- friction
관절의 물리적 정지 마찰(friction) 값으로써, 선형운동(직선 운동) 일 때는 N(뉴톤) 이고, 회전 운동 일 때는 N.m 입니다.
관절 제한(limit)
관절의 제한은 회전 관절(revolute joint)와 프리즘 관절(prismatic joint)에서만 정의 할 수 있습니다. 180도의 서보모터와 같이 서보모터는 0도에서 180도까지의 범위를 정의할 때 사용을 합니다.
- lower (하한 값)
관절의 하한 값으로써 선형 운동(직선 운동)일 때는 미터(meter)로 정의를 하고, 회전 운동일 때는 라디안으로 정의를 합니다.
- upper (상한 값)
관절의 상한 값으로써 단위는 하한 값과 같습니다.
- 힘 (effort)
관절의 최대 힘을 정의 합니다. 관절 제한(limit)은 선택사항이나 관절 제한 값을 정의하면 최대 힘(effort)는 반드시 정의를 해야 합니다.
- 속도 (velocity)
관절의 최대 속도를 정의 합니다. 선형 운동(직선 운동) 일 때는 m/s이고, 회전 운동 일 때는 radian/s 입니다.
<link name="base_footprint" />
<link name="base_link">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
<material name="Red">
<color rgba="1.0 0.0 0.0 1.0" />
</material>
</visual>
<collision>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
</collision>
<inertial>
<mass value="1.0e-03" />
<inertia ixx="1.0e-03" ixy="0.0" ixz="0.0" iyy="1.0e-03" iyz="0.0" izz="1.0e-03" />
</inertial>
</link>
<joint name="base_joint" type="fixed">
<parent link="base_footprint"/>
<child link="base_link"/>
</joint>
'로봇 이야기 > ros2' 카테고리의 다른 글
기구학 (Kinematics) 이란? (0) | 2023.01.03 |
---|---|
매니퓰레이터(manipulator) URDF 모델링 (0) | 2022.12.31 |
xacro (XML macro) (0) | 2022.12.30 |
ROS2 URDF 시뮬레이션(simulation) workspace 만들기 (0) | 2022.12.13 |
ROS2 설치 - foxy (0) | 2022.12.13 |
댓글