跳至内容

仿真场景Gazebo模拟

警告

Gazebo 的前身是"Gazebo Ignition"(而 经典仿真场景Gazebo 前身为 Gazebo)。参见 官方博文 了解更多信息。

仿真场景Gazebo 是一款开源机器人模拟器。它取代了旧版本的 经典仿真场景Gazebo 模拟器,也是 Ubuntu 22.04 及以后版本唯一支持的 Gazebo 版本。

支持的载具: 四旋翼飞行器、飞机、VTOL

信息

参见 模拟 了解有关模拟器、模拟环境和模拟配置(如支持的载具)的一般信息。

安装(Ubuntu Linux)

Gazebo 默认安装在 Ubuntu 22.04 上,是开发环境设置的一部分: Ubuntu 开发环境设置> 模拟和 NuttX(Pixhawk)目标

如果您想在 Ubuntu 20.04 上使用 Gazebo,可以在按照正常安装流程(安装 gz-garden 将卸载 Gazebo-Classic!):

苏都 wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
回响 "deb [arch=$(dpkg --印刷架构) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(释放 -cs) main"; | 苏都 发球 /etc/apt/sources.list.d/gazebo-stable.list >; /dev/null
苏都 apt-get 更新
苏都 apt-get 安装 gz-garden

运行模拟

Gazebo SITL 仿真可以方便地使用 生产 命令,如下图所示:

CD /path/to/PX4-Autopilot
生产 px4_sitl gz_x500

它同时运行 PX4 SITL 实例和 Gazebo 客户端。

支持的载具和 生产 命令如下。请注意,所有 gazebo make 目标的前缀都是 gz_.

载具指挥px4_sys_autostart
四旋翼飞行器(x500)使 px4_sitl gz_x5004001
带深度摄像头的四旋翼飞行器(x500)使 px4_sitl gz_x500_depth4002
配备视觉测距仪的四旋翼飞行器(x500)make px4_sitl gz_x500_vision4005
VTOLmake px4_sitl gz_standard_vtol4004
防水布使 px4_sitl gz_rc_cessna4003
高级平面make px4_sitl gz_advanced_plane4008

全部 车型 (和 世界)作为子模块从 仿真场景Gazebo模型库 存放处。

警告

运行 "高级平面 "所需的 "高级升降拖拽插件 "还不是 Gazebo 发行版的一部分,因此 "高级平面 "还无法运行: PX4-Autopilot#22337.

作为启用高级平面的一种变通方法,您可以从 Gazebo 源代码进入 build/lib 目录中,复制出高级升降拖动插件 所以 文件(根据具体的 Gazebo 版本,该文件的名称大致为 libgz-sim7-advanced-lift-drag-system.so),并将其粘贴到 ~/.gz/sim/plugins 文件夹。

上述命令可启动具有完整用户界面的单个载具。 QGroundControl 应能自动连接到模拟载具。

独立模式

连接 Gazebo SITL 的另一种方式是 独立模式.在该模式下,PX4 SITL 和 Gazebo 分别在各自的终端启动。默认情况下,这些终端位于同一台主机上,但也可以连接网络上任意两台设备上运行的 SITL 和 Gazebo 实例(如果使用 VPN 连接,甚至可以连接不同的网络)。

在单机模式下启动 PX4 时,可在"...... "前添加 生产px4_gz_standalone=1:

CD /path/to/PX4-Autopilot
px4_gz_standalone=1 生产 px4_sitl gz_x500

然后,PX4 SITL 会等待,直到检测到一个 gz-server然后连接到它。

信息

如果您尚未开始 gz-server 运行 生产 命令时,你会看到如下警告,直到 gazebo 已经启动,并且一个 gz-server 被 PX4 检测到:

警告 [gz 桥] 服务 致电 定时 向外 作为 仿真场景Gazebo 一直 侦测到

启动模拟的最简单方法是使用 Python 脚本 模拟仿真场景Gazebo可在 仿真场景Gazebo模型库 存储库。这可用于启动 gz-server 任何支持的世界和载具的实例。

该脚本无需安装任何其他依赖项即可使用,首次使用时会获取支持的 PX4 型号和世界(默认情况下),并将其保存到 ~/.simulation-gazebo.如果再次调用,脚本将使用该目录获取模型和世界。因此,如果您想使用自己的模型并以独立模式运行,就必须将其源代码放在 ~/.simulation-gazebo.

您可以使用任何您喜欢的方法在本地获取脚本,例如 wget:

wget https://raw.githubusercontent.com/PX4/PX4-gazebo-models/main/simulation-gazebo

脚本可以用

CD /path/to/script/
python3 模拟仿真场景Gazebo

更多信息和论据,请参见 仿真场景Gazebo模型.

信息

如果 使 px4_sitl gz_x500 出现错误 ninja: error: unknown target 'gz_x500'; 然后运行 清洁 从零开始,尝试运行 使 px4_sitl gz_x500 又来了

无头模式

您可能想在无头模式(不含 Gazebo 图形用户界面)下运行 Gazebo,因为它使用的资源较少,而且不依赖于您系统中支持 OpenGL 渲染的显卡。这使得加载和运行速度更快,对于许多简单的使用情况来说,这可能就是你所需要的全部。

在命令前加上 无头=1 环境变量:

无头=1 生产 px4_sitl gz_x500

指定世界

通过将所需的世界与所需载具的名称连接,可以在特定世界中运行模拟。例如,要运行风世界的 x500 您可以指定载具:

生产 px4_sitl gz_x500_windy

您还可以使用 PX4_GZ_WORLD 环境变量:

PX4_GZ_WORLD=有风 生产 px4_sitl gz_x500

支持的世界如下。

世界指挥说明
默认使 px4_sitl *空洞的世界(灰色的平面)
有风使 px4_sitl *_windy有风的空旷世界
海湾使 px4_sitl *_baylands四面环水的湾区世界

警告

请注意,如果没有指定 "世界",PX4 将使用 默认 世界。但是,您不能 明确地 具体说明 _默认 因为这会阻止 PX4 启动。换句话说,使用 使 px4_sitl gz_x500 而不是 make px4_sitl gz_x500_default 为默认值。

信息

Baylands 会抛出以下错误,可以忽略:

[Err] [SDFFeatures.cc:843] 无法创建碰撞 [collision] 的几何元素

出现这种情况是因为 Baylands 有很多网格。不过,这并不会破坏 Gazebo,而且在 Gazebo Harmonic 中,错误已降级为警告: gz-physics/pull/531.您还可以通过以下方法用警告代替错误 从源代码安装 gz-garden.

使用/配置选项

启动管道允许高度灵活的配置。特别是可以

  • 使用任意世界启动新的模拟,或附加到已运行的模拟中。
  • 在模拟中添加新的载具,或将新的 PX4 实例链接到现有实例。

这些情况可通过设置适当的环境变量来管理。

语法

启动语法为

ARGS ./build/px4_sitl_default/bin/px4

其中 ARGS 是一个环境变量列表,包括

  • px4_sys_autostart (强制性):设置 机身自动启动 ID 的 PX4 机身启动。

  • px4_gz_model_name:设置 现存的 模型的名称。如果提供了该名称,启动脚本就会尝试将一个新的 PX4 实例绑定到与该名称完全匹配的 Gazebo 资源上。

    • 该设置与 PX4_SIM_MODEL.
  • PX4_SIM_MODEL:设置要在模拟器中生成的新 Gazebo 模型的名称。如果提供了该变量,启动脚本会在 Gazebo 资源路径中查找与给定变量匹配的模型,生成该模型并绑定新的 PX4 实例。

    • 该设置与 px4_gz_model_name.

    信息

    环境变量 PX4_GZ_MODEL 已被弃用,其功能已并入 PX4_SIM_MODEL.

  • px4_gz_model_pose:时,设置模型的生成位置和方向。 PX4_SIM_MODEL 会被采用。如果提供了启动脚本,则启动脚本会按照以下语法在一个姿态下生成模型 "x,y,z,roll,pitch,yaw";其中位置以米为单位,角度以弧度为单位。

    • 如果省略,零姿态 [0,0,0,0,0,0] 使用。
    • 如果提供的数值少于 6 个,则缺失的数值将固定为零。
    • 这只能与 PX4_SIM_MODEL (不是 px4_gz_model_name).
  • PX4_GZ_WORLD:设置新模拟的 Gazebo 世界文件。如果没有给出,则 默认 使用。

    • 如果已有模拟正在运行,该变量将被忽略。
    • 该值应为 为所选机身指定 但可以使用该参数重写。
  • px4_simulator=gz:设置模拟器,Gazebo 的模拟器必须是 gz.

  • px4_gz_standalone:让 PX4 知道不应启动 Gazebo 实例。Gazebo 需要单独启动,详情请参考 独立模式.

  • px4_gz_sim_render_engine:设置 gazebo 使用的渲染引擎。

    默认的渲染引擎(OGRE 2)在某些平台/环境下不受良好支持。指定 PX4_GZ_SIM_RENDER_ENGINE=ogre 如果在虚拟机上运行 PX4 时遇到渲染问题,请将渲染引擎设置为 OGRE 1。

PX4 仿真场景Gazebo世界和模型数据库 可在此处的 Github 上找到.

信息

gz_env.sh.in$PX4_DIR/build/px4_sitl_default/rootfs/gz_env.sh

实例

以下是上述不同场景的一些示例。

  1. 启动模拟器 + 默认世界 + 以默认姿势生成载具

    px4_sys_autostart=4001 PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4
  2. 启动模拟器 + 默认世界 + 以自定义姿势(y=2m)生成载具

    px4_sys_autostart=4001 px4_gz_model_pose="0,2"; PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4
  3. 启动模拟器 + 默认世界 + 连接现有载具

    px4_sys_autostart=4001 px4_gz_model_name=x500 ./build/px4_sitl_default/bin/px4
  4. 以独立模式启动模拟器 + 连接到运行默认世界的 Gazebo 实例

    px4_gz_standalone=1 px4_sys_autostart=4001 PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4

    在单独的终端运行:

    蟒蛇 /path/to/simulation-gazebo

添加新世界和模型

SDF 文件、网格文件、纹理以及其他任何与 Gazebo 中世界和模型的功能和外观有关的文件都可以放在相应的 /worlds/模型 目录中的 PX4-仿真场景Gazebo模型.

在 PX4 中按照以下步骤添加模型和世界。

添加模型

添加新模型

  1. 定义 机身配置文件.

  2. 在机身配置文件中定义 Gazebo 的默认参数(本例来自 x500 四旋翼飞行器):

    ini
    PX4_SIMULATOR=${PX4_SIMULATOR:=gz}
    PX4_GZ_WORLD=${PX4_GZ_WORLD:=default}
    PX4_SIM_MODEL=${PX4_SIM_MODEL:=<your model name>}
    • PX4_SIMULATOR=${PX4_SIMULATOR:=gz} 为特定机型设置默认模拟器 (Gz)。

    • PX4_GZ_WORLD=${PX4_GZ_WORLD:=default} 设置 默认世界 针对该特定机身。

    • 设置 PX4_SIM_MODEL 让您只用

      px4_sys_autostart=<;您的 机身 id>; ./build/px4_sitl_default/bin/px4
  3. 机身.

    • 如果计划使用常规模式,请将模型 SDF 添加到 工具/模拟/gz/模型/.
    • 如果您计划使用 独立 模式,将模型 SDF 添加到 ~/.simulation-gazebo/models/

    当然,您也可以同时使用这两种方法。

添加世界

增加一个新世界:

  1. 把你的世界添加到在 CMakeLists.txt 这里.这样做的目的是 CMake 生成正确的目标。

    • 如果您计划使用普通模式,请将您的世界 sdf 添加到 工具/模拟/gz/worlds/.
    • 如果您计划使用 独立 模式,将您的世界 SDF 添加到 ~/.simulation-gazebo/worlds/

信息

只要世界文件和模型文件都在 Gazebo 搜索路径 (gz_sim_resource_path),就没有必要将它们添加到 PX4 的世界和模型目录中。但是 make px4_sitl gz_<model>_<world>; 不会与他们合作。

PX4-Gazebo 时间同步

与 Gazebo Classic 和 jMAVSim 模拟器不同,PX4 和 Gazebo 没有实施锁步机制。

在 Gazebo 模拟期间,PX4 会订阅 Gazebo \时钟 并将其用作时钟源。这样,即使 Gazebo 运行时的实时因子与 1 不同,PX4 也能保证在时间向前推进之前始终等待 Gazebo。

但请注意,由于锁步功能缺失,Gazebo 将永远不会等待 PX4 完成计算。在最坏的情况下,PX4 会完全离线,而 Gazebo 会继续运行,模拟的无人机会明显崩溃。

多车模拟

Linux 主机支持多载具模拟。

欲了解更多信息,请参阅 带仿真场景Gazebo的多车模拟

更多信息