ROS

Ubuntu16.04 ROS Kinetic - ex_urdf 패키지. RVIZ 회전막대 모델

donie 2021. 1. 20. 01:39

1. ex_urdf 패키지

ex_urdf 패키지 생성

catkin_create_pkg ex_urdf roscpp tf geometry_msgs urdf rviz xacro

 

2. urdf 파일

urdf 폴더 생성 후 pan_tilt.urdf 작성

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

    <link name="base_link">
        <visual>
            <geometry>
                <cylinder length="0.01" radius="0.2"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0"/>
            <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">
        <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">
        <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">
        <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">
        <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>

 

3. launch 파일

launch폴더 생성 후 view_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>

 

4. 빌드 및 파일 확인

빌드

cm

 

생성한 urdf파일에 문법적인 오류가 있는지 확인

check_urdf pan_tilt.urdf

이렇게 나오면 오류가 없는 것이다.

 

link와 joint관계도 pdf파일로 저장

urdf_to_graphiz pan_tilt.urdf

pdf파일을 열어서 확인하면 아래와 같다.

5. joint-state-publisher-gui 패키지 설치

sudo apt update

sudo apt install ros-kinetic-joint-state-publisher-gui

 

6. RVIZ 실행

roslaunch ex_urdf view_pan_tilt_urdf.launch

명령어를 실행하면 RVIZ에서 에러도 발생하고 화면에 아무것도 나타나지 않는다.

 

7. RVIZ 세팅

1) Displays - Fixed Frame에서

map → base_link로 변경

2) Add버튼

By display type에서 RobotModel과 TF추가

 

결과 화면

joint_state_publisher창은 RVIZ창에 가려서 안보일 수 있다.

클릭해주면 앞으로 나옴.

스크롤바로 pan_joint값과 tilt_joint값을 변경하면서 모델이 어떻게 변하는지 살펴본다.

 

8. RVIZ 설정 내용 저장

종료버튼을 누르면 저장할 것인지 물어본다.

Save 버튼 눌러서 저장!