Gazebo 仿真

Gazebo 是用于自主机器人的强大3D模拟环境,其特别适用于测试物体避障和计算机视觉。 本文描述了如何使用它来进行单机的软件在环仿真。 Gazebo 也可以适用于 硬件在环仿真多机仿真

支持机型:四旋翼 (IrisSolo),六旋翼 (Typhoon h480),通用四旋翼 delta VTOL 无人机,尾翼,飞机,探测车,潜艇(即将推出!)

Gazebo 通常与 ROS 一起使用,板外自动飞行控制的 API 工具包。 如果您计划将 PX4 与 ROS 一起使用,则应该先安装 Gazebo 在这看说明教程

GazeboPluginMAVLinkSITL

有关仿真器,仿真环境和仿真变量配置(例如支持的机型)的一般信息,请参见 仿真

安装

Gazebo 9 的安装在标准的环境编译已有说明。

其他安装说明可在 gazebosim.org 上找到。

运行仿真

您可以通过启动 PX4 SITL和 Gazebo 来运行模拟,并加载机身配置(支持多旋翼飞机,飞机,VTOL,光流和多机仿真)。

最简单的方法是在 PX4 Firmware 存储库的根目录中打开一个终端,并为目标调用make,如以下部分所示。

你可以使用 instructions below 来保持 Gazebo 在后台运行然后只重启 PX4。 这样比同时重启两者要快一些。

使用命令 make px4_sitl list_vmd_make_targets 获取所有支持的平台(你还可以过滤掉以 gazebo_ 开头的平台)。

四旋翼

cd ~/src/Firmware
make px4_sitl gazebo

带光流的四旋翼

make px4_sitl gazebo_iris_opt_flow

3DR Solo

make px4_sitl gazebo_solo

3DR Solo in Gazebo

标准构型的固定翼飞机

make px4_sitl gazebo_plane

飞行器

标准垂起

make px4_sitl gazebo_standard_vtol

标准构型的 VTOL

尾座式垂起

make px4_sitl gazebo_tailsitter

尾座式 VTOL

Ackerman 车 (UGV/Rover)

make px4_sitl gazebo_rover

探测车

海马体 TUHH (UUV: 无人水下航行器)

make px4_sitl gazebo_hippocampus

潜艇 /UUV

改变仿真环境中的世界

当前的默认世界是位于目录 worlds 中的 iris.worldiris.world 中默认使用高度图生成地面景物。 这样生成的地面可能会导致使用距离传感器时较为困难, 如果使用高程图会导致任何出乎意料的结果,我们建议你将 iris.model 中的模型默认设定从 uneven_ground 改为 asphalt_plane.

简单上天

如遇到任何错误请参考: 工具链安装

该命令最终将得到如下 PX4 控制台显示界面:

[init] shell id: 140735313310464
[init] task name: px4

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

px4 starting.


pxh>

在 gazebo 中右击四旋翼模型允许从上下文菜单启用跟随模式,这样可以方便地将其保持在视图中。

Gazebo UI

完成初始化后系统将输出 home 点的位置 (telem> home: 55.7533950, 37.6254270, -0.00)。 现在你可以输入如下命令让飞机起飞了:

pxh> commander takeoff

可选配置

无航向模式

Gazebo 可以在 headless 模式下运行,其中 Gazebo UI 界面未启动的。 这样可以更快地启动并使用更少的系统资源(即,它是运行模拟的更“轻量级”方式)。

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

HEADLESS=1 make px4_sitl gazebo_plane

设置自定义起飞位置

可以使用环境变量重写 SITL Gazebo 中的默认起飞位置。

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

更多相关信息请参考:仿真 > 仿真速度快于实际速度

使用游戏手柄

通过 QGroundControl 可引入游戏手柄或者拇指操纵杆(如何进行设置看这里)。

模拟 GPS 噪声

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

果目标设备的 SDF 文件包含gpsNoise元素的值(即,它具有行:<gpsNoise>true</gpsNoise>),则启用GPS噪声。 默认情况下, 它在许多设备 SDF 文件中启用:solo.sdfiris.sdfstandard_vtol.sdfdelta_wing.sdfplane.sdftyphoon_h480 tailsitter.sdf

启用/禁用GPS噪音:

  1. 构建任何 gazebo 目标以生成 SDF 文件(适用于所有机型)。 例如: make px4_sitl gazebo_iris >Tip在后续版本中不会覆盖 SDF 文件。
  2. 打开目标车辆的 SDF 文件(例如./Tools/sitl_gazebo/models/iris/iris.sdf )。
  3. 搜索 gpsNoise 元素:

     xml
     <plugin name='gps_plugin' filename='libgazebo_gps_plugin.so'>
      <robotNamespace/>
      <gpsNoise>true</gpsNoise>
     </plugin>
    
    • 如果存在,则启用 GPS。 您可以通过删除以下行来禁用它:<gpsNoise> true </gpsNoise>
    • 如果未预设,则禁用 GPS 。 您可以通过将gpsNoise元素添加到gps_plugin部分来启用它(如上所示)。

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

单独启动 Gazebo 和 PX4

对于扩展开发会话,单独启动 Gazebo 和 PX4 可能更方便,甚至可以在 IDE 中启动。

除了运行sitl_run.sh的现有 cmake 目标以及 px4 的参数加载正确的模型之外,它还会创建一个名为px4_ &lt;mode&gt;的启动器目标,这是一个包装器,围绕原始 sitl px4 应用程序。 这个包装器只是嵌入应用程序参数,如当前工作目录和模型文件的路径。

单独启动 Gazebo 和 PX4:

  • 通过终端运行 gazebo(或任何其他 sim)服务器和客户端查看器: make px4_sitl gazebo_none_ide
  • 在 IDE 中选择要调试的px4_ <mode>目标(例如px4_iris
  • 直接从 IDE 启动调试会话

这种方法显着缩短了调试周期时间,因为模拟器(例如 gazebo)总是在后台运行,而你只重新运行 px4 进程是非常轻松的。

视频流

用于 Gazebo 的 PX4 SITL 支持来自连接到设备型号的 Gazebo 相机传感器的 UDP 视频流。 您可以从 QGroundControl (在 UDP 端口 5600 上)连接到此流,并从模拟设备查看 Gazebo 环境的视频 - 就像您从真实摄像机那样。 使用 gstreamer 流水线流式传输视频。

默认情况下,来自 Gazebo 和 Gazebo 小部件中的视频流以打开/关闭流式传输是未启用的。 本文介绍了如何启用它们。 在不久的将来,我们希望默认情况下启用这些功能。

系统必备组件

安装 Gstreamer 1.0 及其依赖项:

sudo apt-get install $(apt-cache --names-only search ^gstreamer1.0-* | awk '{ print $1 }' | grep -v gstreamer1.0-hybris) -y

如何查看 Gazebo 视频流

最简单的方式就是在 QGroundControl 中查看 Gazebo 软件在环仿真 视频流。 只需打开 QGroundControl 中 软件配置> 通用设置 找到 视频源 选择 UDP 视频流 然后 UDP 端口号 默认设置为 5600

QGC 视频流在 Gazebo 中的设置

来自 Gazebo 的视频应该像从真实相机那样显示在 QGroundControl 中。

也可以使用 Gstreamer Pipeline 观看视频。 只需输入如下的命令:

gst-launch-1.0  -v udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink fps-update-interval=1000 sync=false

在 Gazebo 界面中打开/停止视频流。

该特点只支持 Gazebo 7 版本。

可以使用 Gazebo 界面中的 打开/关闭 按钮来 启用/禁用 视频流。

视频 打开/关闭 按钮

如何启用该按钮:

  1. 打开要修改的“ world ”文件(例如<Firmware>/Tools/sitl_gazebo/worlds/typhoon_h480.world )。
  2. 在默认的world name =“default”部分中,为libgazebo_video_stream_widge添加gui部分(如下所示):

     <?xml version="1.0" ?>
     <sdf version="1.5">
      <world name="default">
    
        <gui>
          <plugin name="video_widget" filename="libgazebo_video_stream_widget.so"/>
        </gui>
    
     <!-- A global light source -->
     <include>
     ...
    

    此部分出现在 typhoon_h480.world 中 - 您只需要取消注释该部分。

  3. 软件在环重新编译:

     make clean
     make px4_sitl gazebo_typhoon_h480
    

扩展和定制

若要扩展或者是自定义仿真接口,编辑 Tools/sitl_gazebo 文件夹。 源码也可以在 sitl_gazebo 库 上获取。

编译系统会强制使用正确的 GIT 子模块,包括仿真器。 他不会覆盖目录中修改的部分。

与 ROS 对接交互

The simulation can be interfaced to ROS the same way as onboard a real vehicle.

更多信息:

results matching ""

    No results matching ""