Gazebo教程(九)——创建一个简单的钳子

1、简介

这个教程描述了如何创建一个简单的两个爪子的钳子。

2、创建model

2.1 创建world的文件夹。

  1. mkdir ~/simple_gripper_tutorial; cd ~/simple_gripper_tutorial
    

    2.2 创建world文件。

    gedit ~/simple_gripper_tutorial/gripper.world
    

    2.3 复制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>

    2.4 创建model文件夹。

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

    2.5 首先放置基本的钳子结构,最简单的方式是创建一个static的model。static的model意味着仿真启动后不会移动,这让你可以启动仿真器,并让你可以在添加joints之前检查link的放置。

    2.6 创建model.config文件。

  1. gedit model.config
    

    2.7 复制下面的文件。

  1. <?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>me@my.email</email>
      </author>
    
      <description>
        My awesome robot.
      </description>
    </model>
    

    2.8 同样的,创建一个simple_gripper.sdf文件。

  1. gedit simple_gripper.sdf
    

2.9 复制下面的代码。

<?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>true</static>
    </model>
</sdf>

2.10 运行world文件。

gazebo ~/simple_gripper_tutorial/gripper.world

2.11 当links的效果满意后,我们可以添加joints。添加下面的joints代码。

 <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>

将static设置成false。

2.12 运行gazebo。

  1. gazebo ~/simple_gripper_tutorial/gripper.world
    

    2.13 右键model并且选择view->joints和view->wireframe,新创建的joints就可以显示了。

    2.14 也可以通过界面控制每个关节的驱动能力,然后就可以看到钳子的移动,将force设置成10。

发布者

harifun

小学的时候,说自己要当一名科学家!那时候,看到新闻联播在宣传“四化”,立志要为现代化作出贡献!高中立志要做机器人,本科和硕士学的自动化!毕业进入华为,因为是测试岗位而离开,然后进入创业公司做工业扫地机器人和服务式机器人!A轮完成数千万级融资后因家庭原因离开上海,回武汉进入一家上市公司从事激光雷达设计工作!机器人是我一直以来的追求,希望有一天我能实现我的理想!

发表评论

电子邮件地址不会被公开。 必填项已用*标注