로봇 모델 만들기

박정훈·2024년 1월 18일
0

Simulation

목록 보기
1/2
post-thumbnail

환경 구성

  • Ubuntu 20.04
  • ROS Noetic
  • Gazebo 11

로봇 모델 생성

  • URDF (Unified Robot Description Format)
    • 로봇 모델에 대해 기술할 때 사용
    • 링크, 관절, 센서 등 로봇의 구조를 정의하는 XML 기반 파일 형식
    • 로봇 모델의 시각화를 생성하고 운동학 및 동적 시뮬리에션을 수행하는데 사용
  • SDF (Simulation Description Format)
    • Gazebo 시뮬레이터를 사용하는 로봇 시스템의 시뮬레이션에 사용되는 파일 형식
    • 질량, 관성 및 마찰과 같은 물리적 속성을 포함하여, URDF보다 포괄적인 표현을 제공하는 XML 기판 파일 형식
    • SDF는 중력, 바람, 마찰 등 다양한 환경에서 로봇의 동작을 시뮬레이션 하는데 사용

로봇 패키지 만들기

$ cd ~/sim_ws/src/
$ catkin_create_pkg robot_description rospy urdf xacro
$ mkdir -p robot_description/urdf
$ touch robot_description/urdf/robot.urdf

robot.urdf

<?xml version="1.0" ?>
<robot name="robot">
    <!-- Link - chassis -->
    <link name="link_chassis">
        <inertial>
            <mass value="10" />
            <origin xyz="0 0 0.3" rpy="0 0 0" />
            <inertia ixx="1.5417" ixy="0" ixz="0" iyy="3.467" iyz="0" izz="4.742" />
        </inertial>
        <collision>
            <geometry>
                <box size="2 1.3 0.4" />
            </geometry>
        </collision>
        <visual>
            <geometry>
                <box size="2 1.3 0.4" />
            </geometry>
            <material name="Red">
                <color rgba="1 0 0 1" />
            </material>
        </visual>
    </link>
</robot>

실행을 위한 launch 파일 만들기

$ cd ~/sim_ws/src/
$ mkdir -p robot_description/launch
$ touch robot_description/launch/rviz.launch

rviz.launch

<launch>
    <param name="robot_description" command="cat '$(find robot_description)/urdf/robot.urdf'" />
    <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
    <node name="rviz" pkg="rviz" type="rviz" />
</launch>

실행

roslaunch robot_description rviz.launch

Add>RobotModel
FixedFrame : link_chassis

Link & Joint

Inertial

<intertial>
	<mass value="10" />
    <origin
    	xyz="0 0 0.3"
        rpy="0 0 0" />
    <inertia
    	ixx="1.5417"
        ixy="0"
        ixz="0"
        iyy="3.467"
        iyz="0"
        izz="4.742"
</inertial>
  • mass : 물체의 무게, kg
  • origin : 관성값의 무게중심
  • inertia : 관성의 분포를 나타내는 matrix

Colision / Visual

<colision>
	<geometry>
    	<box size="2 1.3 0.4" />
    </geometry>
</colision>
<visual>
	<geometry>
    	<box size="2 1.3 0.4" />
    </geometry>
</visual>
  • colision : simulation상에서 물리적 상호작용 계산(실제 연산이 돌아가는 영역)
  • visual : rendering에만 사용

Joint

 <joint name="joint_chassis_left_wheel" type="continuous">
        <origin rpy="0 0 0" xyz="-0.5 0.65 0" />
        <child link="link_left_wheel" />
        <parent link="link_chassis" />
        <axis rpy="0 0 0" xyz="0 1 0" />
        <limit effort="10000" velocity="1000" />
        <joint_properties damping="1.0" friction="1.0" />
</joint>

Meshes

  • STL파일 적용

Gazebo에서 Robot 불러오기

$ roslaunch robot_description empty_world.launch
$ roslaunch robot_description spawn.launch
$ roslaunch robot_description spawn.launch x:=6  model_name:=second_model
Usage: roslaunch [options] [package] <filename> [arg_name:=value...]
       roslaunch [options] <filename> [<filename>...] [arg_name:=value...]

Force와 Torque 적용하기

Window -> Plot

model 우클릭 Apply Force/Torque

profile
.______.

0개의 댓글