Make a Simple Gripper - modulabs/gazebo-tutorial GitHub Wiki

Gazebo ์„ค์น˜ํ•˜๋ฉด home ํด๋”์— ~/.gazebo/models ํด๋”๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ ์—ฌ๊ธฐ์— ๋ชจ๋ธ ํŒŒ์ผ๋“ค์ด ๊ด€๋ฆฌ๋œ๋‹ค. (Model Database documentation๊ณผ SDF๋ฅผ ์ฐธ์กฐ)

์ด์ „์ฒ˜๋Ÿผ Gazebo๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•ด์„œ ๋ชจ๋ธ๋“ค์„ Insertํ•  ์ˆ˜ ์žˆ์ง€๋งŒ *.world ํŒŒ์ผ์„ ์ด์šฉํ•˜๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๋ชจ๋ธ์„์„ Insertํ•œ ์ฑ„๋กœ Gazebo๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ์€ gripper.world ํŒŒ์ผ ์˜ˆ์‹œ๋‹ค.

world ํŒŒ์ผ์„ ์œ„ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

$ mkdir -p ~/.gazebo/simple_gripper_tutorial

world ํŒŒ์ผ ์ƒ์„ฑ

$ gedit ~/.gazebo/simple_gripper_tutorial/gripper.world
<?xml version="1.0"?>
  <sdf version="1.4">
    <world name="default">

    <!-- A ground plane -->
    <include>
      <uri>model://ground_plane</uri>
    </include>

    <!-- A global light source -->
    <include>
      <uri>model://sun</uri>
    </include>

    <include>
      <uri>model://my_gripper</uri>
    </include>

    </world>
  </sdf>

world์—์„œ ground_plane, sun, my_gripper ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ๋“ค์ด๊ณ  ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ 'model://' ๋‹ค์Œ์— ์˜ค๋Š” ์ด๋ฆ„์€ model.config ํŒŒ์ผ๊ณผ *.sdf ํŒŒ์ผ๋“ค์ด ์ƒ์„ฑ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์ด๋‹ค.

๋จผ์ € ๋ชจ๋ธ ํŒŒ์ผ ์ƒ์„ฑ์„ ์œ„ํ•ด์„œ ~/.gazebo/models์— ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

    $ mkdir -p ~/.gazebo/models/my_gripper
    $ cd ~/.gazebo/models/my_gripper

Gripper ๋ชจ๋ธ ํŒŒ์ผ์€ model.config, simple_gripper.sdf ๋‘ ๊ฐœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (model.config ํŒŒ์ผ์€ ์ด๋ฆ„์„ ์ž„์˜๋กœ ์ง€์„ ์ˆ˜ ์—†๋‹ค!)

$ gedit ~/.gazebo/models/my_gripper/model.config
<?xml version="1.0"?>

<model>
  <name>My Gripper</name>
  <version>1.0</version>
  <sdf version='1.4'>simple_gripper.sdf</sdf>

  <author>
    <name>My Name</name>
    <email>[email protected]</email>
  </author>

  <description>
    My awesome robot.
  </description>
</model>
$ gedit ~/.gazebo/models/my_gripper/simple_gripper.sdf
<?xml version="1.0"?>
<sdf version="1.4">
    <model name="simple_gripper">
        <link name="riser">
            <pose>-0.15 0.0 0.5 0 0 0</pose>
            <inertial>
                <pose>0 0 -0.5 0 0 0</pose>
                <inertia>
                    <ixx>0.01</ixx>
                    <ixy>0</ixy>
                    <ixz>0</ixz>
                    <iyy>0.01</iyy>
                    <iyz>0</iyz>
                    <izz>0.01</izz>
                </inertia>
                <mass>10.0</mass>
            </inertial>
            <collision name="collision">
                <geometry>
                    <box>
                        <size>0.2 0.2 1.0</size>
                    </box>
                </geometry>
            </collision>
            <visual name="visual">
                <geometry>
                    <box>
                        <size>0.2 0.2 1.0</size>
                    </box>
                </geometry>
                <material>
                    <script>Gazebo/Purple</script>
                </material>
            </visual>
        </link>
        <link name="palm">
            <pose>0.0 0.0 0.05 0 0 0</pose>
            <inertial>
                <inertia>
                    <ixx>0.01</ixx>
                    <ixy>0</ixy>
                    <ixz>0</ixz>
                    <iyy>0.01</iyy>
                    <iyz>0</iyz>
                    <izz>0.01</izz>
                </inertia>
                <mass>0.5</mass>
            </inertial>
            <collision name="collision">
                <geometry>
                    <box>
                        <size>0.1 0.2 0.1</size>
                    </box>
                </geometry>
            </collision>
            <visual name="visual">
                <geometry>
                    <box>
                        <size>0.1 0.2 0.1</size>
                    </box>
                </geometry>
                <material>
                    <script>Gazebo/Red</script>
                </material>
            </visual>
        </link>
        <link name="left_finger">
            <pose>0.1 0.2 0.05 0 0 -0.78539</pose>
            <inertial>
                <inertia>
                    <ixx>0.01</ixx>
                    <ixy>0</ixy>
                    <ixz>0</ixz>
                    <iyy>0.01</iyy>
                    <iyz>0</iyz>
                    <izz>0.01</izz>
                </inertia>
                <mass>0.1</mass>
            </inertial>
            <collision name="collision">
                <geometry>
                    <box>
                        <size>0.1 0.3 0.1</size>
                    </box>
                </geometry>
            </collision>
            <visual name="visual">
                <geometry>
                    <box>
                        <size>0.1 0.3 0.1</size>
                    </box>
                </geometry>
                <material>
                    <script>Gazebo/Blue</script>
                </material>
            </visual>
        </link>
        <link name="left_finger_tip">
            <pose>0.336 0.3 0.05 0 0 1.5707</pose>
            <inertial>
                <inertia>
                    <ixx>0.01</ixx>
                    <ixy>0</ixy>
                    <ixz>0</ixz>
                    <iyy>0.01</iyy>
                    <iyz>0</iyz>
                    <izz>0.01</izz>
                </inertia>
                <mass>0.1</mass>
            </inertial>
            <collision name="collision">
                <geometry>
                    <box>
                        <size>0.1 0.2 0.1</size>
                    </box>
                </geometry>
            </collision>
            <visual name="visual">
                <geometry>
                    <box>
                        <size>0.1 0.2 0.1</size>
                    </box>
                </geometry>
                <material>
                    <script>Gazebo/Blue</script>
                </material>
            </visual>
        </link>
        <link name="right_finger">
            <pose>0.1 -0.2 0.05 0 0 .78539</pose>
            <inertial>
                <inertia>
                    <ixx>0.01</ixx>
                    <ixy>0</ixy>
                    <ixz>0</ixz>
                    <iyy>0.01</iyy>
                    <iyz>0</iyz>
                    <izz>0.01</izz>
                </inertia>
                <mass>0.1</mass>
            </inertial>
            <collision name="collision">
                <geometry>
                    <box>
                        <size>0.1 0.3 0.1</size>
                    </box>
                </geometry>
            </collision>
            <visual name="visual">
                <geometry>
                    <box>
                        <size>0.1 0.3 0.1</size>
                    </box>
                </geometry>
                <material>
                    <script>Gazebo/Green</script>
                </material>
            </visual>
        </link>
        <link name="right_finger_tip">
            <pose>0.336 -0.3 0.05 0 0 1.5707</pose>
            <inertial>
                <inertia>
                    <ixx>0.01</ixx>
                    <ixy>0</ixy>
                    <ixz>0</ixz>
                    <iyy>0.01</iyy>
                    <iyz>0</iyz>
                    <izz>0.01</izz>
                </inertia>
                <mass>0.1</mass>
            </inertial>
            <collision name="collision">
                <geometry>
                    <box>
                        <size>0.1 0.2 0.1</size>
                    </box>
                </geometry>
            </collision>
            <visual name="visual">
                <geometry>
                    <box>
                        <size>0.1 0.2 0.1</size>
                    </box>
                </geometry>
                <material>
                    <script>Gazebo/Green</script>
                </material>
            </visual>
        </link>
        <static>false</static>
        <joint name="palm_left_finger" type="revolute">
            <pose>0 -0.15 0 0 0 0</pose>
            <child>left_finger</child>
            <parent>palm</parent>
            <axis>
                <limit>
                    <lower>-0.4</lower>
                    <upper>0.4</upper>
                </limit>
                <xyz>0 0 1</xyz>
            </axis>
        </joint>
        <joint name="left_finger_tip" type="revolute">
            <pose>0 0.1 0 0 0 0</pose>
            <child>left_finger_tip</child>
            <parent>left_finger</parent>
            <axis>
                <limit>
                    <lower>-0.4</lower>
                    <upper>0.4</upper>
                </limit>
                <xyz>0 0 1</xyz>
            </axis>
        </joint>
        <joint name="palm_right_finger" type="revolute">
            <pose>0 0.15 0 0 0 0</pose>
            <child>right_finger</child>
            <parent>palm</parent>
            <axis>
                <limit>
                    <lower>-0.4</lower>
                    <upper>0.4</upper>
                </limit>
                <xyz>0 0 1</xyz>
            </axis>
        </joint>
        <joint name="right_finger_tip" type="revolute">
            <pose>0 0.1 0 0 0 0</pose>
            <child>right_finger_tip</child>
            <parent>right_finger</parent>
            <axis>
                <limit>
                    <lower>-0.4</lower>
                    <upper>0.4</upper>
                </limit>
                <xyz>0 0 1</xyz>
            </axis>
        </joint>
        <joint name="palm_riser" type="prismatic">
            <child>palm</child>
            <parent>riser</parent>
            <axis>
                <limit>
                    <lower>0</lower>
                    <upper>0.9</upper>
                </limit>
                <xyz>0 0 1</xyz>
            </axis>
        </joint>
    </model>
</sdf>

model.config์™€ simple_gripper.sdf ํŒŒ์ผ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•œ๋‹ค.

๋‹ค์Œ์œผ๋กœ world ํŒŒ์ผ์„ ์‹คํ–‰ํ•œ๋‹ค.

    $ gazebo ~/.gazebo/simple_gripper_tutorial/gripper.world

์„ค๋ช…ํ•œ๋Œ€๋กœ ground_plane, simple_gripper ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ Insert๋˜์–ด ์žˆ๋Š” Gazebo ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋ธ์— ์šฐํด๋ฆญ์„ ํ•˜๊ณ  View->Joints์™€ View->Wireframe์„ ์„ ํƒํ•ด์ฃผ๋ฉด ์กฐ์ธํŠธ๊ฐ€ ์ขŒํ‘œ๊ณ„๋กœ ๋””์Šคํ”Œ๋ ˆ์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ๋ชจ๋ธ์˜ ์กฐ์ธํŠธ์— ํž˜์„ ๊ฐ€ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์˜ค๋ฅธ์ชฝ ๊ฐ€์šด๋ฐ ํ‘œ์‹œ๋œ ํ•ธ๋“ค์„ ์™ผ์ชฝ์œผ๋กœ ๋“œ๋ž˜๊ทธ ํ•˜๋ฉด Joints ํƒญ์ด ์ƒ๊ธด๋‹ค. ๊ทธ ๋‹ค์Œ ๋ชจ๋ธ์„ ํด๋ฆญํ•ด์ฃผ๋ฉด Force, Position, Velocity ํƒญ์—์„œ ๊ฐ ์กฐ์ธํŠธ๋“ค์— ํž˜์ด๋‚˜ ์œ„์น˜, ์†๋„ ๋“ฑ์„ ๊ฐ€ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ