# 经典模拟仿真场景Gazebo

警告

经典仿真场景Gazebo PX4 支持 Ubuntu Linux 20.04。它已被 仿真场景Gazebo (这是 旧称 (打开新窗口) 作为 "Gazebo Ignition")在 Ubuntu 22.04 及更高版本上使用。

Gazebo Classic 是一个功能强大的自主机器人三轴仿真环境,尤其适用于测试物体回避和计算机视觉。本页介绍其与 SITL 和单个载具的配合使用。Gazebo Classic 还可用于 HITL 并为 多载具模拟.

支持的载具: 四 (光圈, Hex (Typhoon H480)、 通用标准 VTOL(QuadPlane)潜艇、尾随者、飞机、UGV无人车、潜水艇/UUV。

美人鱼图形仿真场景Gazebo插件 (打开新窗口)

备注

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

# 安装

Gazebo Classic 9 或 11 的安装包含在我们的[标准构建说明](.../dev_setup/dev_env.md)中,适用于 Linux、macOS 和 Windows。其他安装说明可在 gazebosim.org (打开新窗口).

备注

如果您计划将 PX4 与 ROS 结合使用,您需要 应遵循 ROS 说明 同时安装 ROS 和 Gazebo Classic(从而避免安装冲突)。

备注

可以使用以下命令删除 仿真场景Gazebo(花园) 并重新安装 Gazebo-Classic 11:

苏都 适切 移除 gz-garden
苏都 适切 安装 性向
苏都 性向 安装 gazebo libgazebo11 libgazebo-dev

请注意 性向 需要,因为它可以解决依赖冲突(通过删除某些软件包),而这些冲突是 适切 无法处理。

# 运行模拟

启动 PX4 SITL 和 Gazebo Classic,加载机身配置(支持多旋翼机、飞机、VTOL、光流和多飞行器模拟),运行模拟。

最简单的方法是在 PX4 根目录下打开终端 PX4-自动驾驶仪 并调用 生产 的目标。例如,启动四旋翼飞行器模拟(默认):

CD /path/to/PX4-Autopilot
生产 px4_sitl gazebo-classic

支持的载具和 生产 命令如下(点击链接查看载具图片)。

备注

有关构建目标的完整列表,请运行 make px4_sitl list_vmd_make_targets (并过滤以 炯炯有神的经典_).

载具 指挥
四旋翼飞行器 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
台风 H480(六旋翼) (支持视频流) make px4_sitl gazebo-classic_typhoon_h480
标准平面 make px4_sitl gazebo-classic_plane
标准飞机(用弹射器发射) make px4_sitl gazebo-classic_plane_catapult
标准 VTOL make px4_sitl gazebo-classic_standard_vtol
尾随者 VTOL make px4_sitl gazebo-classic_tailsitter
阿克曼 UGV(UGV无人车) make px4_sitl gazebo-classic_rover
差分 UGV(UGV无人车) make px4_sitl gazebo-classic_r1_rover
河马校园 TUHH(UUV:无人潜航器) make px4_sitl gazebo-classic_uuv_hippocampus
艇(USV:无人水面航行器) make px4_sitl gazebo-classic_boat
云船(飞艇) make px4_sitl gazebo-classic_cloudship

备注

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

上述命令可启动具有完整用户界面的单个载具。其他选项包括

# 飞向天空

生产 上述命令首先会生成 PX4,然后与 Gazebo Classic 模拟器一起运行。

PX4 启动后,将启动 PX4 外壳,如下图所示。

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.http://gazebosim.org ...INFO [ecl/EKF] 5188000:开始 GPS 融合

当 PX4 加载特定机型的初始化和参数文件,等待(并连接)模拟器时,控制台将打印出状态。一旦出现 INFO 打印,说明 [ecl/EKF] 正在 开始 GPS 融合 载具已准备就绪。

备注

右键单击四旋翼飞行器模型,可以从上下文菜单中启用跟随模式,这对保持其在视图中非常方便。

仿真场景Gazebo经典用户界面

您可以通过打字把它带到空中:

pxh>; 指挥官起飞

# 使用/配置选项

适用于所有模拟器的选项都包含在顶层程序中。 模拟 主题(其中一些可能在下文中重复)。

# 模拟传感器/硬件故障

模拟故障保险 解释了如何触发 GPS 故障和电池耗尽等安全故障。

# 无头模式

经典仿真场景Gazebo可在 破魔 模式,在该模式下不会启动 Gazebo Classic UI。这种模式启动速度更快,占用的系统资源更少(也就是说,这是一种更轻量级的模拟运行方式)。

只需在正常 生产无头=1 如图所示:

无头=1 生产 px4_sitl 凝视经典飞机

# 设置自定义起飞位置

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

需要设置的变量有 PX4_HOME_LAT, PX4_HOME_LONPX4_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

欲了解更多信息,请参阅 模拟 > 运行模拟比实时更快.

# 改变风速

要模拟风速,请将此插件添加到您的世界文件中,并设置 平均风速 米/秒(替换为 设置您的风速 根据所需的速度)。如果需要,可调整 风速最大值 参数,使其大于 平均风速:

  <;插头 名字='wind_plugin' 文件名='libgazebo_wind_plugin.so'>;
      <;frameId>;基本链接</frameId>;
      <;机器人命名空间/>;
      <;平均风速>;设置您的风速</平均风速>;
      <;风速最大值>;20.0</风速最大值>;
      <;风速方差>;0</风速方差>;
      <;平均风向>;0 1 0</平均风向>;
      <;风向方差>;0</风向方差>;
      <;windGustStart>;0</windGustStart>;
      <;阵风持续时间>;0</阵风持续时间>;
      <;阵风平均风速>;0</阵风平均风速>;
      <;最大阵风风速>;20.0</最大阵风风速>;
      <;阵风风速方差>;0</阵风风速方差>;
      <;平均阵风方向>;1 0 0</平均阵风方向>;
      <;阵风方向方差>;0</阵风方向方差>;
      <;windPubTopic>;世界风</windPubTopic>;
    </插头>;

风向以方向向量的形式传递(标准 ENU 约定),将在 gazebo 插件中进行归一化处理。此外,您还可以以 (m/s)² 为单位说明风速方差和基于正态分布的风向方差,以便在模拟中加入一些随机因素。阵风的内部处理方式与风速相同,稍有不同的是,您可以使用以下两个参数说明开始时间和持续时间 windGustStart阵风持续时间.

您可以在 PX4/PX4-SITL_gazebo-classic/worlds/windy.world (打开新窗口).

# 使用操纵杆

通过以下方式支持操纵杆和拇指操纵杆 QGroundControl (在此查看设置说明).

# 提高距离传感器性能

当前的默认世界是 PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds/虹膜世界 (打开新窗口)),它使用高度图作为地面。

这在使用距离传感器时可能会造成困难。如果出现意外结果,我们建议您在 虹膜模型凹凸不平的地面沥青平面.

# 模拟 GPS 噪音

Gazebo Classic 可以模拟与真实系统中的 GPS 噪音相似的 GPS 噪音(否则报告的 GPS 值将是无噪音/完美的)。这在处理可能受 GPS 噪音影响的应用(如精确定位)时非常有用。

如果目标载具的 SDF 文件中包含一个 gps 噪音 元素(即有一行"......"): <gpsNoise>true</gpsNoise>;).许多载具 SDF 文件都默认启用了该功能: 独奏.sdf, iris.sdf, standard_vtol.sdf, delta_wing.sdf, plane.sdf, 台风_h480, tailsitter.sdf.

启用/禁用 GPS 噪音:

  1. 构建任何仿真场景Gazebo目标,以便生成 SDF 文件(适用于所有载具)。例如

    make px4_sitl gazebo-classic_iris
    

    TIP

    SDF 文件不会在后续构建中被覆盖。

  2. 打开目标飞行器的 SDF 文件(例如 ./Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/iris/iris.sdf).

  3. 搜索 gps 噪音 元素:

    <;插头 名字='gps_plugin' 文件名='libgazebo_gps_plugin.so'>;
      <;机器人命名空间/>;
      <;gps 噪音>;</gps 噪音>;
    </插头>;
    
    • 如果存在,则表示 GPS 已启用。您可以通过删除该行来禁用它: <gpsNoise>true</gpsNoise>;
    • 如果不存在,则表示 GPS 已禁用。您可以通过添加 gps 噪音 元素到 gps_plugin 部分(如上图所示)。

下次建立/重新启动 Gazebo Classic 时,它将使用新的 GPS 噪音设置。

# 加载特定世界

PX4 支持多种 世界存储在 PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds (打开新窗口).默认情况下,Gazebo Classic 会显示一个无特征的平面,其定义如下 空.世界 (打开新窗口).

您可以在 PX4 配置目标的最后一个选项中指定加载任何一个世界。

例如,要加载 仓库 世界,您可以如图所示添加它:

make px4_sitl_default gazebo-classic_plane_cam__warehouse

备注

两个下划线 后的模型 (平面摄像机) 表示使用默认调试器(无)。参见 构建代码 > PX4 制作构建目标.

您还可以使用 PX4_SITL_WORLD 环境变量。如果要测试 PX4 中尚未包含的新世界,这将非常有用。

TIP

如果加载的世界与地图不一致,您可能需要 设置世界位置.

# 设置世界位置

载具在非常靠近世界模型原点的某个模拟 GPS 位置生成。

备注

载具的生成位置并不完全位于 Gazebo 的原点(0,0,0),而是略有偏移,这可能会引发一些常见的编码问题。

如果使用的世界再现了一个真实的地点(例如某个机场),这可能会导致模拟世界中显示的内容与地面站地图上显示的内容之间出现非常明显的不匹配。为了解决这个问题,您可以将世界原点的位置设置为现实生活中的 GPS 坐标。

备注

您还可以设置 自定义起飞位置 可以做同样的事情。不过,在地图上添加位置更简单(如果需要,还可以通过设置自定义位置来覆盖)。

世界的位置在 .世界 通过使用 球坐标 标记。纬度、经度和海拔高度必须全部指定(这样才有效)。

示例见 sonoma_raceway.world (打开新窗口):

    <spherical_coordinates> <surface_model>EARTH_WGS84</surface_model> <latitude_deg>38.161479</latitude_degg> <longitude_degg>-122.454630</longitude_degg> <elevation>488.0</elevation> </spherical_coordinates>;

您可以在 索诺玛赛道世界 使用以下 生产 命令(请注意,由于需要从模型数据库下载模型,第一次产卵需要较长的时间):

make px4_sitl gazebo-classic_rover__sonoma_raceway

下面的视频显示,环境的位置与世界一致:

# 单独启动仿真场景Gazebo和 PX4

在长时间开发过程中,分别启动 Gazebo Classic 和 PX4 可能会更方便,甚至可以在集成开发环境中启动。

除了运行现有 cmake 目标的 sitl_run.sh 参数,以便 px4 加载正确的模型。 px4_<mode>; 是对原始 sitl px4 应用程序的精简封装。这个薄包装器只需嵌入应用程序参数,如当前工作目录和模型文件路径。

分别启动 Gazebo Classic 和 PX4:

  • 通过终端运行 gazebo classic(或任何其他模拟)服务器和客户端查看器,指定一个 _ide 变体:

    生产 px4_sitl gazebo-classic___ide
    

    生产 px4_sitl gazebo-classic_iris_ide
    
  • 在集成开发环境中选择 px4_<mode>; 要调试的目标(例如 px4_iris)

  • 直接从集成开发环境启动调试会话

这种方法大大缩短了调试周期,因为模拟器始终在后台运行,你只需重新运行 px4 进程,而这一进程非常轻便。

# 模拟勘测相机

经典仿真场景Gazebo 测量摄像机模拟 MAVLink 摄像机 (打开新窗口) 该相机可捕捉带有地理标记的 JPEG 图像,并将相机捕捉信息发送到连接的地面站。该相机还支持视频流。它可用于测试相机捕捉,特别是在勘测任务中。

摄像头发出 拍摄的图像 (打开新窗口) 信息。捕获的图像会保存到 PX4-Autopilot/build/px4_sitle_default/tmp/frames/DSC_n_.jpg (其中 n 以 00000 开始,每次捕获时迭代一次)。

用该相机模拟飞机:

make px4_sitl_default gazebo-classic_plane_cam

# 模拟深度摄像头

经典仿真场景Gazebo 深度摄像头型号 (打开新窗口) 模拟英特尔® RealSense™ D455 立体深度摄像头,使用 Openni Kinect 插件 (打开新窗口).

这将在 /camera/depth/image_raw/camera/depth/camera_info 分别是 ROS 专题。

请注意本页顶部的警告,即在安装 ROS 和 Gazebo 时如何避免安装冲突。

您可以使用前向深度摄像头模拟四旋翼飞行器:

生产 px4_sitl gazebo-classic_iris_depth_camera

或带有向下深度摄像头的四旋翼飞行器:

生产 px4_sitl gazebo-classic_iris_downward_depth_camera

# 模拟降落伞/飞行终止

经典仿真场景Gazebo 可用于模拟部署 跳伞 期间 航班终止 (飞行终止由 PWM 命令触发,该命令在 经典仿真场景Gazebo).

if750a 目标飞行器上有一个降落伞。要模拟飞行器,请运行以下命令:

make px4_sitl gazebo-classic_if750a

要使飞行器进入飞行终止状态,可以强制它失败一个 安全检查 飞行终止设置为故障安全操作。例如,您可以通过强制一个 违反地理围栏规定.

欲了解更多信息,请参阅

# 视频流

PX4 SITL for Gazebo Classic 支持 UDP 视频流,视频流来自模拟载具模型上的摄像头传感器。启用视频流后,您可以从以下位置连接到该视频流 QGroundControl (UDP 端口 5600),从模拟载具上观看 Gazebo Classic 环境的视频,就像从真实摄像机上观看一样。视频流使用 gstreamer 管道,并可通过 Gazebo Classic UI 中的按钮启用/禁用。

以下帧支持/启用模拟摄像头传感器:

# 先决条件

Gstreamer 1.0 是视频流所必需的。所需的依赖项应该已经 在设置 Gazebo Classic 时安装 (它们包含在 MacOS 和 Ubuntu Linux 的标准 PX4 安装脚本/说明中)。

备注

仅供参考,依赖项包括 gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly, libgstreamer-plugins-base1.0-dev.

# 启动/停止视频流

当目标载具支持时,视频流会自动启动。例如,在台风 H480 上启动视频流:

make px4_sitl gazebo-classic_typhoon_h480

可使用 Gazebo 用户界面暂停/重启流媒体播放 视频开/关 按钮

视频开/关按钮

# 如何观看仿真场景Gazebo视频

查看 SITL/Gazebo Classic 摄像机视频流的最简单方法是在 QGroundControl.只需打开 应用程序设置> 常规 并设置 视频来源UDP h.264 视频流UDP 端口5600:

QGC 仿真场景Gazebo视频流设置

然后,来自 Gazebo Classic 的视频应显示在 QGroundControl 就像从真正的相机拍摄一样。

QGC 视频流仿真场景Gazebo示例

备注

台风的世界并不有趣。

还可以使用 Gstreamer 管道.只需输入以下终端命令即可:

gst-launch-1.0 -v udpsrc =5600 盖帽=应用程序/x-rtp,媒体=(字符串)视频,时钟速率=(int)90000,编码名称=(字符串)H264 \
! rtph264depay ! avdec_h264 ! 视频转换 ! autovideosink fps-update-interval=1000 同步=错误

# 冗长日志

当模型出现问题时,SITL 会无声地失败。您可以使用 VERBOSE_SIM如图所示:

export VERBOSE_SIM=1 make px4_sitl gazebo-classic

VERBOSE_SIM=1 make px4_sitl gazebo-classic

# 扩展和定制

要扩展或自定义模拟界面,请编辑 工具/模拟/gazebo/sitl_gazebo 文件夹。代码可在 sitl_gazebo 存储库 (打开新窗口) 在 Github 上。

备注

构建系统会执行正确的 GIT 子模块,包括模拟器。它不会覆盖目录中文件的更改。

# 更多信息