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)。
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:
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
命令。 例如,要启动一个四旋翼仿真(默认情况):
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,如下所示:
______ __ __ ___
| ___ \ \ \ / / / |
| |_/ / \ 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
右键单击四旋翼模型,可从上下文菜单中启用跟随模式,这有助于将其保持在视野范围内。
你可以通过输入以下命令让载具起飞:
pxh> commander takeoff
使用/配置选项
适用于所有仿真器的选项在顶级 仿真 主题中介绍(其中一些选项可能会在下面重复提及)。
模拟传感器/硬件故障
模拟故障保护 介绍了如何触发诸如 GPS 故障和电池电量耗尽等安全故障保护机制。
无头模式
Gazebo Classic 可以在“无头”模式下运行,在这种模式下不会启动 Gazebo Classic 的用户界面。 这种启动方式更快,并且使用的系统资源更少(即这是一种更“轻量级”的运行仿真的方式)。
只需在常规的 make
命令前加上 HEADLESS=1
,如下所示:
HEADLESS=1 make px4_sitl gazebo-classic_plane
设置自定义起飞位置
可以使用环境变量来设置 Gazebo Classic 中的起飞位置。 这将覆盖默认的起飞位置以及 为世界设置的任何值。
需要设置的变量为:PX4_HOME_LAT
、PX4_HOME_LON
和 PX4_HOME_ALT
。
例如:
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
来相对于实时速度增加或降低仿真速度。
export PX4_SIM_SPEED_FACTOR=2
make px4_sitl_default gazebo-classic
有关更多信息,请参阅:仿真 > 以快于实时的速度运行仿真。
更改风速
要模拟风速,请将此插件添加到你的世界文件中,并将 windVelocityMean
设置为以米/秒为单位的值(将 SET_YOUR_WIND_SPEED
替换为你想要的速度)。 如果需要,调整 windVelocityMax
参数,使其大于 windVelocityMean
:
<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)²)和方向方差,以便在仿真中添加一些随机因素。 阵风在内部的处理方式与风类似,略有不同的是你可以使用以下两个参数 windGustStart
和 windGustDuration
来指定开始时间和持续时间。
你可以在 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.sdf、iris.sdf、standard_vtol.sdf、delta_wing.sdf、plane.sdf、typhoon_h480、tailsitter.sdf。
要启用/禁用 GPS 噪声模拟:
- 构建任何 gazebo 目标以生成 SDF 文件(