• 【Gazebo要素01】术语和概念


    一、提要

            要了解gazebo需要多种技术知识,常常无法短期内掌握,这里列出相关得种种技术术语,和其基本含义;以便在开发中形成一个总体概念。注意,本文不着眼于技术细节,仅仅是提纲携领而已。

    二、gaizabo术语

    2.1 gzserver和gzclient

            1)服务器

            是Gazebo的核心。服务器解析命令行上给出的世界描述文件,然后使用某个物理引擎和传感器引擎仿真该世界。可以使用以下命令启动服务器。请注意,服务器不包含任何图形界面;这意味着服务器是无头运行的。

    gzserver <world_filename>

    上面命令中的可以是:

    • 当前目录下的某个世界文件名,
    • 某个绝对路径下的世界文件名,
    • GAZEBO_RESOURCE_PATH中某个路径下的世界文件名,
    • Gazebo世界文件安装默认目录中的某个世界文件名,即worlds/,其中是与Gazebo一起安装的某个世界文件名

    启动安装得某个世界文件,可以:

    gzserver worlds/empty_sky.world

             2)客户端:

            Gazebo图形客户端,会连接到正在运行的gzserver,并显示可视化仿真元素。图形客户端还是一个允许修改正在运行的仿真的工具。

    使用以下命令来运行Gazebo图形客户端:

    gzclient

            3)gazebo:服务器+图形客户端合一

            命令gazebo会将Gazebo服务器和客户端合并到一个可执行文件中。可以不用先运行gzserver worlds/empty.world然后再运行gzclient,而是直接运行以下命令:

    gazebo worlds/empty_sky.world

            等价得语句是:

    1. gzserver worlds/empty_sky.world 运行该命令后不会出现任何界面。
    2. gzclient 打开另一个终端并运行Gazebo图形客户端:

    2.2 世界文件和模型文件

            1)世界文件

    • 仿真世界描述文件包含仿真中的所有元素,包括机器人、灯光、传感器和静态对象。世界文件使用SDF(仿真描述格式)进行格式化,并且通常具有.world扩展名。

    • Gazebo服务器(gzserver)会读取世界文件以生成并填充仿真世界。

    • 安装Gazebo时附带了许多示例仿真世界。这些世界文件安装在/share/gazebo-/worlds中(例如,对于安装在Ubuntu系统上的Gazebo 11,其世界文件安装在/usr/share/gazebo-11/worlds目录中)。

            2)模型文件

    • 模型文件与世界文件使用相同的SDF格式,但应该只包含一个 ... 标签。模型文件的目的在于方便模型重用和简化世界文件。一旦某个模型文件创建后,就可以使用以下SDF语法将其包含在某个世界文件中:
    • 在线模型数据库中提供了许多模型(在早期版本中,Gazebo会附带一些示例模型)。假设运行Gazebo时已连接Internet,则可以从数据库中插入任何模型,并且必要的内容将会在运行时下载。
    1. <include>
    2. <uri> model://model_file_name uri>
    3. include>

    2.3 环境变量

            Gazebo使用许多环境变量来定位文件和建立服务器与客户端之间的通信。适用于大多数情况的默认值会被编译进Gazebo软件中。这意味着您无需设置任何环境变量。

          1)  Gazebo包括以下环境变量

    • GAZEBO_MODEL_PATH:用冒号分隔的目录集合,Gazebo将会在这些目录中搜索模型;

    • GAZEBO_RESOURCE_PATH:用冒号分隔的目录集合,Gazebo将会在这些目录中搜索其他资源,例如世界文件和媒体文件;

    • GAZEBO_MASTER_URI:Gazebo主机的URI,该变量指定了Gazebo服务器启动的IP和端口,并告知客户端要连接到的地址;

    • GAZEBO_PLUGIN_PATH:用冒号分隔的目录集合,Gazebo在运行时将会在这些目录中搜索插件共享库;

    • GAZEBO_MODEL_DATABASE_URI:在线模型数据库的URI,Gazebo将会从该链接地址下载模型。

             2)这些环境变量的默认值也会包含在shell脚本中

    source /share/gazebo/setup.sh

     2.4 关于插件

            插件提供了一种与Gazebo进行交互的简单便捷机制。插件可以在命令行中加载,或者在SDF文件中指定(请参见SDF格式)。

            Gazebo会先加载命令行上指定的插件,然后再加载SDF文件中指定的插件。有些插件由服务器加载,例如影响物理属性的插件,而其他插件则由图形客户端加载以方便自定义GUI的生成。

            通过命令行加载一个系统插件的示例如下:

    gzserver -s <plugin_filename>
    

            标志-s表示它是一个系统插件,而是在GAZEBO_PLUGIN_PATH中发现的某个共享库名称。例如,要加载Gazebo安装随带的RestWebPlugin,请运行以下命令:

    gzserver --verbose -s libRestWebPlugin.so
    

            Gazebo图形客户端使用相同的机制,支持的命令行标志包括:

    • Gazebo 7和更早版本:使用-g标志加载GUI插件

    • Gazebo 8和更高版本:使用--gui-client-plugin标志加载GUI插件

    例如,要在Gazebo 11中加载TimerGUIPlugin,请运行以下命令:

    gzclient --gui-client-plugin libTimerGUIPlugin.so

    三、通信和管理机制

     3.1 gazebo系统设计图

    •         gazebo系统有如下设计:
    •         gzserver管理抽象数据,这些抽象数据得实时计算在server一侧完成;
    •         gzclient是客户端,它得数据来自server,并如实显示。
    •         gzserver和gzclient通过publisher、subcriber完成。
    •         world是背景信息、静止信息。
    •         model是动态信息,是前景物体。

      3.2 用ROS2驱动gazebo系统 

            由于gazebo和ros都为publisher和subscribe系统,因此可以无缝通信:由paremeter-event题目可以传递姿态、位置等信息给server

  • 相关阅读:
    笔训day1
    BootStrap前端框架的时候
    和想象中完全不一样?巡课在线就能进行
    10、简单手写spring创建bean
    8月问题总结~Android 12适配
    Roson的Qt之旅 #121 Qt信号和槽详细介绍
    一文读懂Linux I/O_同步(阻塞、非阻塞、多路复用)、异步
    通用商城项目(下)
    协议-TCP协议-基础概念02-TCP握手被拒绝-内核参数-指数退避原则-TCP窗口-TCP重传
    使用CMakeLists.txt简化项目构建过程
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/126292701