# 仿真场景Gazebo模拟

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

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

警告

仿真场景Gazebo通常与 ROSPX4 是一个用于自动控制载具的工具包/板载应用程序接口。如果您计划将 PX4 与 ROS 结合使用,您需要 应遵循 ROS 说明 同时安装 ROS 和 Gazebo(从而避免安装冲突)。

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

备注

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

# 安装

仿真场景Gazebo 9 的设置包含在我们的标准建造说明中:

其他安装说明可在 gazebosim.org (打开新窗口).

# 运行模拟

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

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

CD /path/to/PX4-Autopilot
生产 px4_sitl 仿真场景Gazebo

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

备注

有关构建目标的完整列表,请运行 make px4_sitl list_vmd_make_targets (并过滤以 仿真场景Gazebo_).

载具 指挥
四旋翼飞行器 制作 PX4_SITL 仿真场景Gazebo
带有光流的四旋翼飞行器 make px4_sitl gazebo_iris_opt_flow
3DR Solo(四旋翼飞行器) 制作 px4_sitl 仿真场景Gazebo_solo
台风 H480(六旋翼) (支持视频流) make px4_sitl gazebo_typhoon_h480
标准平面 使 px4_sitl 成为 gazebo_plane
标准飞机(用弹射器发射) make px4_sitl gazebo_plane_catapult
标准 VTOL make px4_sitl gazebo_standard_vtol
尾随者 VTOL 制作 px4_sitl 仿真场景Gazebo_尾随者
阿克曼飞行器(UGV/UGV无人车) 制作 px4_sitl 仿真场景Gazebo车
河马校园 TUHH(UUV:无人潜航器) make px4_sitl gazebo_uuv_hippocampus
艇(USV:无人水面航行器) 制作 px4_sitl 仿真场景Gazebo船
云船(飞艇) make px4_sitl gazebo_cloudship

备注

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

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

# 飞向天空

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

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 UI。这种模式启动速度更快,占用的系统资源更少(也就是说,这是一种更轻量级的模拟运行方式)。

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

无头=1 生产 px4_sitl 仿真场景Gazebo_飞机

# 设置自定义起飞位置

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

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

# 改变模拟速度

模拟速度可以通过环境变量 px4_sim_speed_factor.

export PX4_SIM_SPEED_FACTOR=2 make px4_sitl_default gazebo

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

# 改变风速

要模拟风速,请将此插件添加到您的世界文件中,并替换为 设置您的风速 以所需的速度运行:

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

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

# 使用操纵杆

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

# 提高距离传感器性能

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

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

# 模拟 GPS 噪音

Gazebo 可以模拟与真实系统中的 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_iris
    

    TIP

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

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

  3. 搜索 gps 噪音 元素:

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

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

# 加载特定世界

PX4 支持多种 仿真场景Gazebo世界存储在 PX4/sitl_gazebo/worlds (打开新窗口)默认情况下,Gazebo 会显示一个无特征的平面,如 空.世界 (打开新窗口).

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

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

make px4_sitl_default gazebo_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_rover__sonoma_raceway

下面的视频显示,环境的位置与仿真场景Gazebo世界一致:

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

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

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

分别启动 Gazebo 和 PX4:

  • 通过终端运行 gazebo(或任何其他模拟)服务器和客户端查看器,指定一个 _ide 变体:
    生产 px4_sitl gazebo___ide
    
    生产 px4_sitl gazebo_iris_ide
    
  • 在集成开发环境中选择 px4_<mode>; 要调试的目标(例如 px4_iris)
  • 直接从集成开发环境启动调试会话

这种方法大大缩短了调试周期,因为模拟器(如 Gazebo)始终在后台运行,您只需重新运行 px4 进程即可,非常轻便。

# 模拟勘测相机

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

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

用该相机模拟飞机:

make px4_sitl_default gazebo_plane_cam

# 模拟降落伞/飞行终止

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

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

make px4_sitl gazebo_if750a

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

欲了解更多信息,请参阅

# 视频流

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

以下机架支持/启用 Gazebo 摄像头传感器:

# 先决条件

Gstreamer 1.0 是视频流所必需的。所需的依赖项应该已经 在设置仿真场景Gazebo时安装 (它们包含在 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_typhoon_h480

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

视频开/关按钮

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

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

QGC 仿真场景Gazebo视频流设置

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

QGC 视频流仿真场景Gazebo示例

备注

台风的世界并不有趣。

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

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

# 冗长日志

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

export VERBOSE_SIM=1 make px4_sitl gazebo

VERBOSE_SIM=1 make px4_sitl gazebo

# 扩展和定制

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

备注

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

# 更多信息