< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-制作简单的抓手模型

ROS2与Gazebo11入门教程-制作简单的抓手模型

说明:

  • 介绍如何制作简单的抓手模型

设置模型目录

制作抓手模型

  • 为仿真世界文件新建一个目录并进入该目录,命令为:
mkdir ~/simple_gripper_tutorial; cd ~/simple_gripper_tutorial
  • 创建一个世界文件:
gedit ~/simple_gripper_tutorial/gripper.world
  • 将以下SDF代码行复制到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>
  • 在~/.gazebo目录中新建一个模型目录。
     - 我们会将模型文件放在该目录中:
mkdir -p ~/.gazebo/models/my_gripper
cd ~/.gazebo/models/my_gripper
  • 现在来布局抓手的基本结构。完成此项任务的最简单方法是创建一个静态(static)模型并每次添加一个链接。静态模型意味着当仿真器启动时,该链接不会移动。这样允许您在启动仿真器的情况下,可以在添加关节之前从视觉上检查该链接的位置是否合适。

  • 新建一个模型配置文件model.config,命令为:

gedit 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>me@my.email</email>

</author>



<description>

My awesome robot.

</description>

</model>
  • 用类似的方法,新建一个simple_gripper.sdf文件:
gedit simple_gripper.sdf
  • 将以下代码复制到该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>true</static>

</model>

</sdf>
  • 运行该世界文件以可视化地查看到目前为止我们创建的内容,命令为:
gazebo ~/simple_gripper_tutorial/gripper.world
  • 这样您应该可以看到如下图所示的抓手:

请输入图片描述

  • 对该链接的布局满意后,就可以通过将以下代码复制到simple_gripper.sdf文件中行之前来添加关节。
gedit ~/.gazebo/models/my_gripper/simple_gripper.sdf
  • 内容如下
<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>
  • 并通过设置元素属性值为false以将该模型设置为非静态:
..

<static>false</static>

...
  • 再次启动Gazebo,命令如下:
gazebo ~/simple_gripper_tutorial/gripper.world
  • 右键单击该模型并选择“View->Joints”菜单和“View->Wireframe”菜单。这样新创建的关节就会显示出来:

请输入图片描述

  • 您还可以使用“关节控制(Joint Control)”小工具控制施加于每个关节上的力。单击抓手模型,然后通过单击GUI右侧的垂直手柄并将其拖动到左侧来展开右面板工具。在右面板中每个关节都可以看见一个滑块列表。选择“Force”选项卡,然后使用滑块将力施加到每个关节,这样您就应该可以看到抓手在移动。例如,将palm_riser上的力设置为10(牛顿),您就应该会看到如下图所示的效果:

请输入图片描述

  • 可选:

    • 向该仿真世界中添加一个小盒子或圆柱体,并将其放置在抓手中。
    • 尝试使用关节控件GUI界面来抓取该小盒子或圆柱体对象。
  • 可能需要调整对象的惯性使其合理。

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与gazebo11入门教程