ROS2与Gazebo11入门教程-构建机器人
说明:
- 介绍如何构建和修改机器人
模型结构与要求
概述
Gazebo能够以编程方式或通过GUI将模型动态加载到仿真中。 在下载模型或用户自己创建模型之后,模型就会存储在用户的计算机中。本节教程将介绍Gazebo的模型目录结构及模型目录中的必要文件。
Gazebo中的模型可以定义具有动态、运动学和视觉特性的物理实体。此外,模型可能具有一个或多个插件,这些插件会影响模型的行为。模型可以表示从简单形状到复杂机器人的任何事物,甚至地面也是一个模型。
Gazebo依赖于一个数据库来存储和维护仿真中可用的模型。该模型数据库是社区支持的一个资源,因此请上传和维护您创建和使用的模型。
模型数据库存储库
该模型数据库是在此处创建的一个GitHub存储库。
可以用以下命令将该存储库克隆到您的计算机中:
git clone https://github.com/osrf/gazebo_models
模型数据库的结构
模型数据库必须遵守特定的目录和文件结构。模型数据库的根目录包含每个模型的目录和一个具有模型数据库相关信息的database.config文件。
每个模型的目录中也有一个model.config文件,该文件包含有关该模型的元数据。每个模型的目录中还包含该模型的SDF及任何材质、网格和插件子目录。
模型数据库的结构如下所示(在本示例中,模型数据库只有一个名为model_1的模型):
模型数据库
database.config:有关该数据库的元数据。现在,会自动从CMakeLists.txt文件提取有关内容来填充该数据库配置文件。
model_1:模型model_1的目录
model.config:有关模型model_1的元数据
model.sdf:模型的SDF描述
model.sdf.erb:Ruby嵌入式SDF模型描述
meshes:存放所有COLLADA和STL文件的网格目录
material:仅应包含textures和scripts子目录的材质目录
textures:存放图像文件的纹理目录(jpg,png等)。
scripts:用于存放OGRE材质脚本的脚本目录
plugins:用于存放插件源文件和头文件的插件目录
插件目录,插件目录是一个可选目录,目录中包含该模型的所有插件。
网格目录,网格目录也是一个可选目录,目录中包含该模型的所有COLLADA和/或STL文件。
材质目录,材质目录也是一个可选目录,目录中包含该模型的所有纹理、图像和OGRE脚本。纹理图像必须存放在textures子目录中,而OGRE脚本文件必须存放在scripts子目录中。
数据库配置文件,即模型数据库根目录中的database.config文件。该文件包含模型的许可证信息、数据库名称以及所有有效模型的一个列表。只有在线存储库才需要database.config文件。本地计算机上存储了大量模型的目录并不需要database.config文件
数据库配置文件
- 该数据库配置文件database.config的格式如下:
<?xml version='1.0'?>
<database>
<name>name_of_this_database</name>
<license>Creative Commons Attribution 3.0 Unported</license>
<models>
<uri>file://model_directory</uri>
</models>
</database>
- name,数据库名称。GUI和其他工具要使用
元素。 - license,该数据库中模型的许可证。我们强烈建议您使用Creative Commons Attribution 3.0 Unported许可证。
- models,该数据库中所有模型的URI列表。
- uri,某个模型的URI,应该为file:// model_directory_name
模型配置文件
- 每个模型在其根目录中都必须有一个model.config文件,该文件包含有关该模型的元信息。
- 模型配置文件model.config的格式如下:
<?xml version="1.0"?>
<model>
<name>My Model Name</name>
<version>1.0</version>
<sdf version='1.5'>model.sdf</sdf>
<author>
<name>My name</name>
<email>name@email.address</email>
</author>
<description>
A description of the model
</description>
</model>
name, 必须的,模型名称。
version,必须的,模型的版本。这不是模型使用的sdf的版本,该版本信息存放在model.sdf文件中
sdf,必须的,用于描述该模型的SDF或URDF文件名。version属性表明了SDF文件使用的SDF版本,而URDF文件则不需要version属性。 可以使用多个
元素来支持多个SDF版本。 author,必须的
name,必须的,该模型的作者姓名。
email,必须的,作者的电子邮件地址。
description,必须的,模型说明应包括:该模型是什么(例如,机器人、桌子、杯子,等),插件的作用(模型的功能)
depend,可选的,该模型的所有依赖项,通常是其他模型。
model,可选的
uri,必须的模型依赖项的URI。
version,必须的,依赖模型的版本。
模型SDF文件
- 每个模型都必须有一个model.sdf文件,该文件包含模型的仿真器描述格式(Simulator Description Format)。
- 可以在SDF网站上找到更多相关信息。
模型SDF.ERB文件
可以包含嵌入式ruby代码的标准SDF文件。这个选项用于使用嵌入式Ruby代码模板以编程方式生成SDF文件。请注意,ruby转换应该需要手动完成(erb model.sdf.erb > model.sdf),且最终的model.sdf文件必须与model.sdf.erb文件(仅用于引用)一起上传。
在gazebo_models存储库中提供了sdf.erb文件的一些示例(其中一些示例使用不建议使用的.rsdf后缀)。一个简单的ERB文件就是flocking.world.erb,它使用一个简单的循环。
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号