[ROS] URDF 알아보기

Nodazi·2024년 1월 8일
0

ROS

목록 보기
6/21
post-thumbnail

🤔0.URDF란?

URDF (Unified Robot Description Format)은 직역하면 통합 로봇 설명 형식으로 로봇의 3D 형상 및 외관, 관성 등 물리적 특성 등을 XML 언어로 정의한 로봇 모델링 언어이다. URDF로 정의된 로봇은 RVIZ 및 Gazebo에서 물리 시뮬레이션을 할 수 있다.
Gazebo 실행화면

🏁1.URDF 좌표계와 단위

URDF 는 아래의 그림과 같이 x, y, z 축을 사용한다.
회전을 표현하기위해 오일러 각도 roll, pitch, yaw 를 사용한다.

단위는 아래의 표와 같이 사용된다.

  1. 길이 : 미터 m
  2. 각도 : 라디안 radian
  3. 질량 : kg
  4. 속도 : m/s
  5. 각속도 : radian /s

🐣2.URDF 형상과 색상 표현

2.1형상표현

cylinder : 원통
box : 상자
sphere : 공

2.2색상 표현

RGB 3원색과 투과율(0~1) 을 정의하여 사용한다.

🐤.URDF 기구 표현

기구의 속성을 부여하여 동작을 제어할 수 있다.

Base: 고정부분(grounded)
Link: 관절에 연결되는 로봇 팔의 부분
Joint: 링크를 연결하는 부위로 보통 모터의 회전을 통해 움직임을 만듦

Joint 의 경우 아래의 속성을 부여하여 제어 할 수 있다.

fixed: 고정
revolution : 작동 범위 제한
continuous : 연속회전

🐢4.예제를 통해 URDF 알아보기

🤖pan_tilt.urdf

<?xml version="1.0"?>
<robot name="ex_urdf_pan_tilt">

    <link name="base_link"> ## link : base_link
        <visual>
            <geometry>
                <cylinder length="0.01" radius="0.2"/> ## 형태 (길이, 각도)
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0"/> ## x,y,z 좌표 및 영점조절
            <material name="yellow">
                <color rgba="1 1 0 1"/>  ## 색상값
            </material>
        </visual>

        <collision>
            <geometry>
                <cylinder length="0.03" radius="0.2"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0"/>
        </collision>

        <inertial>
            <mass value="1"/>
            <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
        </inertial>
    </link>

    <joint name="pan_joint" type="revolute"> ## joint : pan_joint 
        <parent link="base_link"/>
        <child link="pan_link"/>
        <origin xyz="0 0 0.1"/>
        <axis xyz="0 0 1" />
        <limit effort="300" velocity="0.1" lower="-3.14" upper="3.14"/>
        <dynamics damping="50" friction="1"/>
    </joint>

    <link name="pan_link">  ## link : pan_link
        <visual>
            <geometry>
                <cylinder length="0.4" radius="0.04"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0.09"/>
            <material name="red">
                <color rgba="0 0 1 1"/>
            </material>
        </visual>

        <collision>
            <geometry>
                <cylinder length="0.4" radius="0.06"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0.09"/>
        </collision>

        <inertial>
            <mass value="1"/>
            <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
        </inertial>
    </link>

    <joint name="tilt_joint" type="revolute"> ## joint : tilt_joint
        <parent link="pan_link"/>
        <child link="tilt_link"/>
        <origin xyz="0 0 0.2"/>
        <axis xyz="0 1 0" />
        <limit effort="300" velocity="0.1" lower="-4.71239" upper="-1.570796"/>
        <dynamics damping="50" friction="1"/>
    </joint>

    <link name="tilt_link">   ## link : tilt_link
        <visual>
            <geometry>
                <cylinder length="0.4" radius="0.04"/>
            </geometry>
            <origin rpy="0 1.570796 0" xyz="0 0 0"/>
            <material name="green">
                <color rgba="1 0 0 1"/>
            </material>
        </visual>

        <collision>
            <geometry>
                <cylinder length="0.4" radius="0.06"/>
            </geometry>
            <origin rpy="0 1.570796 0" xyz="0 0 0"/>
        </collision>

        <inertial>
            <mass value="1"/>
            <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
        </inertial>
    </link>
    
</robot>

여기서 아래의 명령어를 터미널 창에 입력하면 Link와 Joint 관계도를 PDF파일로 만들어준다.

🖥️terminal

$urdf_to_graphiz pan_tilt.urdf


🖥️terminal

$sudo apt-get install liburdfdom-tools

만약 찾을수 없는 명령이라고 나오면 위의 명령어를 터미널에 입력해줘야 한다.

🚀pan_tilt_urdf.launch

<launch>
    <arg name="model" />

    <param name="robot_description" textfile="$(find ex_urdf)/urdf/pan_tilt.urdf" />

    <!-- Setting gui parameter to true for display joint slider -->
    <param name="use_gui" value="true"/>
    <!-- Starting Joint state publisher node which will publish the joint values -->
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
    <!-- Starting robot state publish which will publish tf -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
    <!-- Launch visualization in rviz -->
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find ex_urdf)/urdf.rviz" required="True" />
</launch>

Joint state 변경 gui 설치
🖥️terminal

$sudo apt install ros-melodic-joint-state-publisher-gui 

해당 명령어를 터미널에 입력하여 Joint state 변경 gui를 설치해준다. 아래에서 어떤식으로 동작하는지 알아보자.

이제 코드를 모드 작성하였으니 launch 파일을 실행시켜 나타나는 화면을 확인하자.

🚗5.실행화면

위와 같은 기둥형태의 로봇을 확인 할 수 있다.


아까 터미널을 통해 ros-melodic-joint-state-publisher-gui 를 설치하였다면 위 화면을 확인 할 수 있다.
이 창은 Joint의 각도를 조절하는 gui이다. 아래 영상에서 버튼을 이용하여 Joint를 조절하는 모습을 볼 수 있다.

Randomize 버튼을 통해 랜덤으로 조절할 수도 있다.

profile
GoGoSing

0개의 댓글

관련 채용 정보