Skip to content

Gazebo Classic 模拟

WARNING

Gazebo Classic 仅在 Ubuntu Linux 20.04 及更早版本的系统中受 PX4 支持。 在 Ubuntu 22.04 及更高版本中,你必须使用 Gazebo(其曾用名 为 “Gazebo Ignition”)。

Gazebo Classic 是一个功能强大的三维仿真环境,专门用于测试避障和计算机视觉等自主机器人技术。 本页描述了在软件在环仿真(SITL)和单一载具上的使用方式。 Gazebo Classic 也可用于 硬件在环仿真(HITL) 以及 多载具仿真

支持的载具类型: 四旋翼(Iris)、六旋翼(Typhoon H480)、通用标准垂直起降飞行器(四旋翼固定翼混合式)、尾坐式垂直起降飞行器、固定翼飞机、无人车、水下无人航行器(UUV)。

Mermaid 图表:Gazebo 插件

INFO

有关仿真器、仿真环境和仿真配置(例如支持的载具)的一般信息,请参阅 仿真

安装

INFO

如果你计划将 PX4 与 ROS 一起使用,你应该遵循 ROS 安装说明 来同时安装 ROS 和 Gazebo Classic(从而避免安装冲突)。

Gazebo Classic 的设置已包含在我们针对 macOS、Ubuntu 18.04 和 20.04 以及基于 WSL2 的 Windows 系统(适用于相同主机)的 标准构建说明 中。

对于 Ubuntu 22.04 LTS 及更高版本,安装脚本(/Tools/setup/ubuntu.sh)会安装 Gazebo 仿真器,而非 Gazebo Classic。

如果你想在 Ubuntu 22.04 上使用 Gazebo Classic,可以使用以下命令先移除 Gazebo(Harmonic 版本),然后重新安装 Gazebo-Classic 11:

sh
sudo apt remove gz-harmonic
sudo apt install aptitude
sudo aptitude install gazebo libgazebo11 libgazebo-dev

请注意,需要使用 aptitude 是因为它能够解决 apt 无法处理的依赖冲突(通过移除某些软件包)。

TIP

你也可以在首次运行安装脚本之前修改它,以便在更高版本的系统上安装 Gazebo Classic。

更多安装说明可在 gazebosim.org 上找到。

运行仿真

通过启动 PX4 软件在环仿真(SITL)和 Gazebo Classic,并加载机架配置来运行仿真(支持多旋翼、固定翼飞机、垂直起降飞行器、光流和多载具仿真)。

最简便的方法是在 PX4 PX4-Autopilot 仓库的根目录中打开一个终端,并针对所需的目标运行 make 命令。 例如,要启动一个四旋翼仿真(默认情况):

sh
cd /path/to/PX4-Autopilot
make px4_sitl gazebo-classic

以下列出了支持的载具类型和相应的 make 命令(点击链接可查看载具图片)。

INFO

要查看完整的构建目标列表,请运行 make px4_sitl list_vmd_make_targets(并筛选出以 gazebo-classic_ 开头的目标)。

载具操作命令
四旋翼飞行器make px4_sitl gazebo-classic
配备光流传感器的四旋翼飞行器make px4_sitl gazebo-classic_iris_opt_flow
配备深度相机的四旋翼飞行器(朝前)make px4_sitl gazebo-classic_iris_depth_camera
配备深度相机的四旋翼飞行器(朝下)make px4_sitl gazebo-classic_iris_downward_depth_camera
3DR Solo(四旋翼飞行器)make px4_sitl gazebo-classic_solo
Typhoon H480(六旋翼飞行器)(支持视频流)make px4_sitl gazebo-classic_typhoon_h480
标准固定翼飞机make px4_sitl gazebo-classic_plane
标准固定翼飞机(带弹射起飞功能)make px4_sitl gazebo-classic_plane_catapult
标准垂直起降飞行器make px4_sitl gazebo-classic_standard_vtol
尾坐式垂直起降飞行器make px4_sitl gazebo-classic_tailsitter
阿克曼转向无人地面车辆(无人车)make px4_sitl gazebo-classic_rover
差速驱动无人地面车辆(无人车)make px4_sitl gazebo-classic_r1_rover
HippoCampus TUHH(水下无人航行器:无人水下航行器)make px4_sitl gazebo-classic_uuv_hippocampus
无人船(无人水面航行器:无人水面船)make px4_sitl gazebo-classic_boat
云船(飞艇)make px4_sitl gazebo-classic_cloudship

INFO

如果出现构建错误,安装文件和代码 指南是一个有用的参考资料。

上述命令会启动一个带有完整用户界面的单一载具仿真。 其他选项包括:

  • 分别启动 PX4 和 Gazebo,这样你可以让 Gazebo Classic 保持运行,仅在需要时重新启动 PX4(比同时重启两者更快)。
  • 无头模式 下运行仿真,即不启动 Gazebo Classic 的用户界面(这种方式使用的资源更少,运行速度也更快)。

让载具起飞

上述 make 命令首先会构建 PX4,然后将其与 Gazebo Classic 仿真器一起运行。

一旦 PX4 启动,它将启动 PX4 shell,如下所示:

sh
______  __   __    ___
| ___ \ \ \ / /   /   |
| |_/ /  \ V /   / /| |
|  __/   /   \  / /_| |
| |     / /^\ \ \___  |
\_|     \/   \/     |_/

px4 starting.

INFO  [px4] Calling startup script: /bin/sh etc/init.d-posix/rcS 0
INFO  [param] selected parameter default file eeprom/parameters_10016
[param] Loaded: eeprom/parameters_10016
INFO  [dataman] Unknown restart, data manager file './dataman' size is 11798680 bytes
INFO  [simulator] Waiting for simulator to connect on TCP port 4560
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
...
INFO  [ecl/EKF] 5188000: commencing GPS fusion

当 PX4 加载特定机架的初始化和参数文件、等待(并连接到)仿真器时,控制台将打印出相关状态信息。 一旦出现 INFO 打印信息显示 [ecl/EKF] 正在 commencing GPS fusion(开始 GPS 融合),则表示载具已准备好解锁并起飞。

INFO

右键单击四旋翼模型,可从上下文菜单中启用跟随模式,这有助于将其保持在视野范围内。

Gazebo Classic 用户界面

你可以通过输入以下命令让载具起飞:

sh
pxh> commander takeoff

使用/配置选项

适用于所有仿真器的选项在顶级 仿真 主题中介绍(其中一些选项可能会在下面重复提及)。

模拟传感器/硬件故障

模拟故障保护 介绍了如何触发诸如 GPS 故障和电池电量耗尽等安全故障保护机制。

无头模式

Gazebo Classic 可以在“无头”模式下运行,在这种模式下不会启动 Gazebo Classic 的用户界面。 这种启动方式更快,并且使用的系统资源更少(即这是一种更“轻量级”的运行仿真的方式)。

只需在常规的 make 命令前加上 HEADLESS=1,如下所示:

sh
HEADLESS=1 make px4_sitl gazebo-classic_plane

设置自定义起飞位置

可以使用环境变量来设置 Gazebo Classic 中的起飞位置。 这将覆盖默认的起飞位置以及 为世界设置的任何值

需要设置的变量为:PX4_HOME_LATPX4_HOME_LONPX4_HOME_ALT

例如:

sh
export PX4_HOME_LAT=28.452386
export PX4_HOME_LON=-13.867138
export PX4_HOME_ALT=28.5
make px4_sitl gazebo-classic

更改仿真速度

可以使用环境变量 PX4_SIM_SPEED_FACTOR 来相对于实时速度增加或降低仿真速度。

sh
export PX4_SIM_SPEED_FACTOR=2
make px4_sitl_default gazebo-classic

有关更多信息,请参阅:仿真 > 以快于实时的速度运行仿真

更改风速

要模拟风速,请将此插件添加到你的世界文件中,并将 windVelocityMean 设置为以米/秒为单位的值(将 SET_YOUR_WIND_SPEED 替换为你想要的速度)。 如果需要,调整 windVelocityMax 参数,使其大于 windVelocityMean

xml
  <plugin name='wind_plugin' filename='libgazebo_wind_plugin.so'>
      <frameId>base_link</frameId>
      <robotNamespace/>
      <windVelocityMean>SET_YOUR_WIND_SPEED</windVelocityMean>
      <windVelocityMax>20.0</windVelocityMax>
      <windVelocityVariance>0</windVelocityVariance>
      <windDirectionMean>0 1 0</windDirectionMean>
      <windDirectionVariance>0</windDirectionVariance>
      <windGustStart>0</windGustStart>
      <windGustDuration>0</windGustDuration>
      <windGustVelocityMean>0</windGustVelocityMean>
      <windGustVelocityMax>20.0</windGustVelocityMax>
      <windGustVelocityVariance>0</windGustVelocityVariance>
      <windGustDirectionMean>1 0 0</windGustDirectionMean>
      <windGustDirectionVariance>0</windGustDirectionVariance>
      <windPubTopic>world_wind</windPubTopic>
    </plugin>

风向以方向向量的形式传递(遵循标准的东-北-上(ENU)坐标系约定),该向量将在 gazebo 插件中进行归一化处理。 此外,你可以基于正态分布指定风速方差(单位为 (m/s)²)和方向方差,以便在仿真中添加一些随机因素。 阵风在内部的处理方式与风类似,略有不同的是你可以使用以下两个参数 windGustStartwindGustDuration 来指定开始时间和持续时间。

你可以在 PX4/PX4-SITL_gazebo-classic/worlds/windy.world 中查看具体的实现方式。

使用操纵杆

通过 QGroundControl 支持操纵杆和拇指操纵杆(此处为设置说明)。

提高距离传感器性能

当前的默认世界是 PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds/iris.world),它使用高度图作为地面。

这在使用距离传感器时可能会导致一些问题。 如果出现意外结果,我们建议你将 iris.model 中的模型从 uneven_ground(不平坦地面)更改为 asphalt_plane(沥青平面)。

模拟 GPS 噪声

Gazebo Classic 可以模拟与实际系统中通常出现的类似的 GPS 噪声(否则,报告的 GPS 值将是无噪声的/完美的)。 这在处理可能受到 GPS 噪声影响的应用程序(例如精确定位)时非常有用。

如果目标载具的 SDF 文件中包含 gpsNoise 元素的值(即包含 <gpsNoise>true</gpsNoise> 这一行),则启用 GPS 噪声模拟。 在许多载具的 SDF 文件中,默认情况下已启用该功能,例如:solo.sdfiris.sdfstandard_vtol.sdfdelta_wing.sdfplane.sdftyphoon_h480tailsitter.sdf

要启用/禁用 GPS 噪声模拟:

  1. 构建任何 gazebo 目标以生成 SDF 文件(