Gazebo機器人仿真學習探索筆記(四)模型編輯

模型編輯主要是自定義編輯物體模型構建環境,也可以將多種模型組合爲新模型等,支持外部模型導入,

需要注意的導入模型格式有相應要求,否在無法導入成功,

COLLADA (dae), STereoLithography (stl), Scalable Vector Graphics (svg)。

模型導入界面如下:


Scalable Vector Graphics (svg)爲例,直接使用下面命令安裝使用:

~$ sudo apt-get install inkscape




也可以編輯組合模型:


這部分內容都是可視化操作,簡潔易學,可直接參考附錄中的官方文檔。

編輯好的模型可以重命名,然後另存,twotable,會自動生成如下文件。


效果如下:


自動生成的代碼如下所示:

model.config

<?xml version="1.0" ?>
<model>
    <name>twotable</name>
    <version>1.0</version>
    <sdf version="1.6">model.sdf</sdf>
    <author>
        <name></name>
        <email></email>
    </author>
    <description></description>
</model>


model.sdf

<?xml version='1.0'?>
<sdf version='1.6'>
  <model name='twotable'>
    <model name='table'>
      <static>0</static>
      <link name='link'>
        <collision name='surface'>
          <pose frame=''>0 0 1 0 -0 0</pose>
          <geometry>
            <box>
              <size>1.5 0.8 0.03</size>
            </box>
          </geometry>
          <surface>
            <friction>
              <ode>
                <mu>0.6</mu>
                <mu2>0.6</mu2>
              </ode>
            </friction>
          </surface>
        </collision>
        <visual name='visual1'>
          <pose frame=''>0 0 1 0 -0 0</pose>
          <geometry>
            <box>
              <size>1.4 0.8 0.04</size>
            </box>
          </geometry>
          <material>
            <script>
              <uri>file://media/materials/scripts/gazebo.material</uri>
              <name>Gazebo/Wood</name>
            </script>
          </material>
        </visual>
        <collision name='front_left_leg'>
          <pose frame=''>0.68 0.38 0.5 0 -0 0</pose>
          <geometry>
            <cylinder>
              <radius>0.02</radius>
              <length>1</length>
            </cylinder>
          </geometry>
        </collision>
        <visual name='front_left_leg'>
          <pose frame=''>0.68 0.38 0.5 0 -0 0</pose>
          <geometry>
            <cylinder>
              <radius>0.02</radius>
              <length>1</length>
            </cylinder>
          </geometry>
          <material>
            <script>
              <uri>file://media/materials/scripts/gazebo.material</uri>
              <name>Gazebo/Grey</name>
            </script>
          </material>
        </visual>
        <collision name='front_right_leg'>
          <pose frame=''>0.68 -0.38 0.5 0 -0 0</pose>
          <geometry>
            <cylinder>
              <radius>0.02</radius>
              <length>1</length>
            </cylinder>
          </geometry>
        </collision>
        <visual name='front_right_leg'>
          <pose frame=''>0.68 -0.38 0.5 0 -0 0</pose>
          <geometry>
            <cylinder>
              <radius>0.02</radius>
              <length>1</length>
            </cylinder>
          </geometry>
          <material>
            <script>
              <uri>file://media/materials/scripts/gazebo.material</uri>
              <name>Gazebo/Grey</name>
            </script>
          </material>
        </visual>
        <collision name='back_right_leg'>
          <pose frame=''>-0.68 -0.38 0.5 0 -0 0</pose>
          <geometry>
            <cylinder>
              <radius>0.02</radius>
              <length>1</length>
            </cylinder>
          </geometry>
        </collision>
        <visual name='back_right_leg'>
          <pose frame=''>-0.68 -0.38 0.5 0 -0 0</pose>
          <geometry>
            <cylinder>
              <radius>0.02</radius>
              <length>1</length>
            </cylinder>
          </geometry>
          <material>
            <script>
              <uri>file://media/materials/scripts/gazebo.material</uri>
              <name>Gazebo/Grey</name>
            </script>
          </material>
        </visual>
        <collision name='back_left_leg'>
          <pose frame=''>-0.68 0.38 0.5 0 -0 0</pose>
          <geometry>
            <cylinder>
              <radius>0.02</radius>
              <length>1</length>
            </cylinder>
          </geometry>
        </collision>
        <visual name='back_left_leg'>
          <pose frame=''>-0.68 0.38 0.5 0 -0 0</pose>
          <geometry>
            <cylinder>
              <radius>0.02</radius>
              <length>1</length>
            </cylinder>
          </geometry>
          <material>
            <script>
              <uri>file://media/materials/scripts/gazebo.material</uri>
              <name>Gazebo/Grey</name>
            </script>
          </material>
        </visual>
      </link>
      <pose frame=''>0 1.23981 -0.324 0 -0 0</pose>
    </model>
    <model name='table_marble'>
      <static>1</static>
      <pose frame=''>0 -1.23981 0.324 0 -0 0</pose>
      <link name='link'>
        <collision name='collision'>
          <geometry>
            <mesh>
              <uri>model:///table_marble/meshes/table_lightmap.dae</uri>
              <scale>0.25 0.25 0.25</scale>
            </mesh>
          </geometry>
        </collision>
        <visual name='visual'>
          <geometry>
            <mesh>
              <uri>model://table_marble/meshes/table_lightmap.dae</uri>
              <scale>0.25 0.25 0.25</scale>
            </mesh>
          </geometry>
          <material>
            <script>
              <uri>model://table_marble/materials/scripts</uri>
              <uri>model://table_marble/materials/textures</uri>
              <name>Table/Marble_Lightmap</name>
            </script>
            <lighting>0</lighting>
          </material>
        </visual>
      </link>
    </model>
    <static>0</static>
    <allow_auto_disable>1</allow_auto_disable>
  </model>
</sdf>


可知,sdf爲1.6版本了。

附錄:官方文檔

Model Editor

Overview

This tutorial describes the process of creating a model using the Model Editor.

Open the Model Editor

  1. Make sure Gazebo is installed.

  2. Start up gazebo.

    $ gazebo
    
  3. On the Edit menu, go to Model Editor, or hit Ctrl+M to open the editor.

Graphical user interface

The editor is composed of the following 2 areas:

  • The Palette on the left has two tabs. The Insert tab lets you insertparts (links and other models) into the scene to build the model. The Modeltab displays a list of all the parts that make up the model you are building.

  • The 3D View on the right where you can see a preview of your model andinteract with it to edit its properties and create joints between links.

The GUI tools on the top toolbar can be used to manipulate joints and links inthe 3D View.

Add Links

Add simple shapes

The model editor has three simple primitive geometries that the user can insertinto the 3D view to make a link of the model.

  1. On the Palette, click on the box, sphere, or cylinder icon underSimple Shapes.

  2. Move your mouse cursor over the 3D view to see the visual appear, andclick/release anywhere to add it to the model.

    Tip: You can press Esc to cancel adding the currentlink attached to the mouse cursor.

Add meshes

To add a custom mesh,

  1. Click on the Add button under Custom Shapes, which pops up a dialogthat lets you find the mesh you want to add.

  2. Click on Browse button and use the file browser to find the mesh fileon your local machine. If you know the path of the mesh file, you can enter itdirectly in the text field box next to the Browse button. Note Gazebocurrently only supports importing COLLADA (dae), STereoLithography (stl),and Scalable Vector Graphics (svg) files.

  3. Click Import to load the mesh file. Then, add it to the 3D view.

Create Joints

The model editor supports creating several types of joints between links in themodel being edited. To create a joint:

  1. Click on the joint icon on the tool bar. This brings up the Joint CreationDialog which allows you to specify different properties of the joint youwant to create. As you can see in the dialog, the default joint type isa Revolute joint.

  2. Begin by moving your mouse over the link you wish to create a joint for tosee it being highlighted and click on it. This link will be the parent link ofthe joint.

  3. Next, move your mouse to the link which you would like to be the child linkof the joint. Click on it to see a colored line connecting the two links anda joint visual attached to the child link.

    The line representing the joint is color-coded. Play around with differentjoint types to see the colors.

    The joint visual consists of RGB axes which help to give an idea of thecoordinate frame of the joint. The yellow arrow indicates the primary axis ofthe joint. For example, in the case of a revolute joint, this is the axis ofrotation.

  4. Once you have specified all the desired properties of the joint in theJoint Creation Dialog, click on the Create button at the bottom to finalizejoint creation.

    Tip: You can press Esc any time to cancel the joint creation process.

Edit your model

Note: Be careful when editing your model; the editor currently has no option to undo your actions.

Tip: All measurements are in meters.

Edit links

The model editor supports editing properties of a link which you wouldalso find in its SDF.

Note: Gazebo 6+ supports editinglinks, visuals, and collisions. The ability to edit sensors andplugins are to be implemented in later versions.

To edit a link's properties: Double-click on the link or right click and selectOpen Link Inspector. A dialog window will appear which containsLink, Visual, and Collision property tabs.

As an example, try changing the link pose and visual colors. Once you are done, click onOK to close the inspector.

Edit joints

As mentioned earlier, joint properties can also be edited. These are propertiesthat you would find in the joint SDF.

To edit a joint: Double-click on the line connecting the links or right clickon it and select Open Joint Inspector. The joint inspector will appear.

As an example, try changing the joint pose and joint type. Once you are done, click onOK to close the inspector.

Saving your model

Saving will create a directory, SDF and config files for your model.

As an exercise, let's build a simple car and save it. The car will have abox chassis and four cylinder wheels. Each wheel will be connected to thechassis with a revolute joint:

Once you're happy with the model you created, go to the Model tab in the leftpanel and give it a name.

To save the model, choose File, then Save As (or hit Ctrl+S) in the topmenu. A dialog will come up where you can choose the location for your model.

Exit

When you're done creating the model and you've saved it, go to File and thenExit Model Editor.

Your model will show up in the main window.

Edit existing models

Rather than creating a model from the ground up;you can also edit existing models that are already in the simulation.

To edit an existing model:

  • Make sure you have saved the model you created, and you have exited the model editor. Alternatively, start from a fresh Gazebo instance.

  • Insert a model from the Insert tab on the left. For example, let'sinsert a Simple Arm.

  • Right click on the model you just inserted and select Edit Model.

Now you are in the model editor and you are free to add new links to themodel or edit existing ones.


Extrude SVG files

Overview

This tutorial describes the process of extruding SVG files, which are 2Dimages, to create 3D meshes for your models in Gazebo. It is sometimeseasier to design part of a model in a program like Inkscape or Illustrator.

Before starting, make sure you're familiar with theModel Editor.

This tutorial will show you how to make a custom wheel as an .svg in Inkscape,and import it into Gazebo so that it can be attached to a robot.

Using the Inkscape SVG editor

There are many SVG editors. For this tutorial, we will use the open sourceInkscape program (seeinstallation instructions ).

This is the wheelSVG file used in this tutorial.

Document preparation

Start Inkscape. This will create a blank document. First, lets change thedocument size to better accommodate our wheel: under the File->Documentproperties menu, select the Page tab and change the document size to acustom size of 100.0 x 100.0 mm.

Then, in the same dialog, select the Gridstab, press the New button to create a custom grid. Then, check the Enabled,Visible, and Snap to visible grid lines only options. ChangeSpacing X and Spacing Y to be 10.

You should end up with a document looking like this:

Draw

You can use the different tools (pen, text, stars and shapes, etc.) to createyour geometry. In this example, the wheel is made from circles (pressing theShift Key you can start your circle from the center, and using the CTRL keyallows you to keep the roundness of the shape). It is possible to combineshapes together, making sure that paths are closed and that the part hasa proper thickness.

Note: a stick figure or two circles that touch each other would notresult in valid Gazebo models. The SVG paths must create an closed contour withholes, where the holes cannot touch the contour or other holes. Holes insideholes are treated as solid parts (and they can have holes, too).

Gazebo only imports paths, but it's easy with Inkscape to transform any shapeto a path. Select Select All from the Edit menu. Then select thePath -> Object to Path menu item. This will transform every object intoseparate paths and sub paths. This transformation is irreversible, so if youtransform text into paths, you will not be able to alter the text.

Gazebo does not support grouping. Use the Ungroup from the Object menu toseparate groups of paths.

Save your drawing

Save your drawing to an SVG file you can use later in Gazebo. Use the Saveoption from the File menu.

Create a Gazebo Model

SDFormat does not support SVG directly; it supports 2Dpoly lines. The Gazebo Model Editor has an import mechanism that extracts thepoly lines from SVG files, and saves them as an SDF model file.

Launch Gazebo and Select Model Editor from the Edit menu to enter theGazebo Model Editor mode (as opposed to the simulation mode).

Then press the Add button in the Custom Shapes section of the Insert tab.

This will open the Import Link dialog from where you can select the SVG fileby pressing the Browse button.

Once the file has been selected, press the Import button to open theExtrude Link dialog.

The dialog allows you to set parameters of the extrusions:

  • Thickness: How thick the link will be. This corresponds to the extrusionheight in the z axis. For the SVG path shown on the right, the axis ofextrusion is outwards from the screen.

  • Resolution: How many pixels in your SVG correspond to a meter. Thedefault value (3543.3 px/m) corresponds to 90 dpi (dots per inch), which isthe default resolution for several editors, including Inkscape. If your modelshows up the size you'd like in Inkscape when you display the units as meters,you shouldn't change the resolution value.

  • Samples per segment: This indicates into how many segments to divide each ofthe curved paths in the SVG. The more segments, the more complex your linkwill be. It doesn't change anything for straight paths.

On the right, you can see the path extracted from your SVG. The red points arethe summit of the triangulation of the extruded 3D model.

Set the thickness of the wheel to 0.025 m, and press OK. Your new link shouldappear in the 3D view.

A new link is created, and it comes with a default collision shape that isa copy of the generated 3D mesh.

Next, select Exit Model Editor from the File menu. Gazebo will prompt youto save the new model to disk. Press the Save and Exit button on the Exitdialog, and the Save Model dialog will appear.

Set the name of the new model to "HollowWheel", and fill in the information underthe Advanced Options section. Press the Save button.

Your new Gazebo model is now ready to roll ;-)



要使用Python控制Gazebo,你可以使用ROS(机器人操作系统)和相应的ROS包。在ROS中,你可以使用rospy库来编写Python脚本来控制Gazebo仿真。 首先,你需要确保你已经安装了ROS和Gazebo,并且设置好了ROS环境。然后,你可以创建一个Python脚本来控制Gazebo。 在脚本中,你可以使用rospy库来初始化ROS节点,并创建一个Publisher来发布控制指令。你可以使用Twist消息类型来控制机器人的线速度和角速度。你可以通过发布Twist消息到'cmd_vel'话题来控制机器人的运动。 你还可以创建一个Subscriber来订阅键盘输入消息,并根据输入的键来控制机器人的运动。你可以使用键值映射来将键盘输入映射到Twist消息的线速度和角速度。 下面是一个示例代码,展示了如何使用Python控制Gazebo: ```python #!/usr/bin/env python import rospy from std_msgs.msg import String from geometry_msgs.msg import Twist # 使用字典类型存储字母和速度命令的键值映射关系 key_mapping = { 'w': \[0, 1\], 'x': \[0, -1\], 'a': \[-1, 0\], 'd': \[1, 0\], 's': \[0, 0\] } def keys_cb(msg, twist_pub): # 判断输入是否是有效指令 if len(msg.data) == 0 or not key_mapping.has_key(msg.data\[0\]): return # 根据键名取出键值 vels = key_mapping\[msg.data\[0\]\] # 赋值Twist消息中的线速度和角速度 t = Twist() t.angular.z = vels\[0\] t.linear.x = vels\[1\] # 发出Twist消息 twist_pub.publish(t) if __name__ == '__main__': # 节点初始化 rospy.init_node('keys_to_twist') # 声明'cmd_vel'话题,消息类型为Twist,缓冲为1 twist_pub = rospy.Publisher('cmd_vel', Twist, queue_size=1) # 订阅'keys'键盘输入消息,消息类型为String rospy.Subscriber('keys', String, keys_cb, twist_pub) rospy.spin() ``` 这个示例代码创建了一个ROS节点,订阅了'keys'话题来接收键盘输入消息,并根据输入的键来发布Twist消息到'cmd_vel'话题来控制机器人的运动。 你可以根据你的具体需求修改代码,并根据你的机器人模型和控制方式来调整控制指令。 #### 引用[.reference_title] - *1* [UR5双臂Gazebo仿真(Python)](https://blog.csdn.net/qq_42823342/article/details/117855969)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [利用python程序控制gazebo里的关节](https://blog.csdn.net/weixin_39566143/article/details/117817138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ROS笔记九(基于Python、Kinetic):gazebo中通过键盘输入控制turtlebot机器人移动和转向](https://blog.csdn.net/java0fu/article/details/106217080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值