仿真场景Gazebo模拟
警告
Gazebo 的前身是"Gazebo Ignition"(而 经典仿真场景Gazebo 前身为 Gazebo)。参见 官方博文 了解更多信息。
仿真场景Gazebo 是一款开源机器人模拟器。它取代了旧版本的 经典仿真场景Gazebo 模拟器,也是 Ubuntu 22.04 及以后版本唯一支持的 Gazebo 版本。
支持的载具: 四旋翼飞行器、飞机、VTOL
信息
参见 模拟 了解有关模拟器、模拟环境和模拟配置(如支持的载具)的一般信息。
安装(Ubuntu Linux)
Gazebo 默认安装在 Ubuntu 22.04 上,是开发环境设置的一部分: Ubuntu 开发环境设置> 模拟和 NuttX(Pixhawk)目标
如果您想在 Ubuntu 20.04 上使用 Gazebo,可以在按照正常安装流程(安装 gz-garden
将卸载 Gazebo-Classic!):
苏都 wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
回响 "deb [arch=$(dpkg --印刷架构) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(释放 -cs) main"; | 苏都 发球 /etc/apt/sources.list.d/gazebo-stable.list >; /dev/null
苏都 apt-get 更新
苏都 apt-get 安装 gz-garden
运行模拟
Gazebo SITL 仿真可以方便地使用 生产
命令,如下图所示:
CD /path/to/PX4-Autopilot
生产 px4_sitl gz_x500
它同时运行 PX4 SITL 实例和 Gazebo 客户端。
支持的载具和 生产
命令如下。请注意,所有 gazebo make 目标的前缀都是 gz_
.
载具 | 指挥 | px4_sys_autostart |
---|---|---|
四旋翼飞行器(x500) | 使 px4_sitl gz_x500 | 4001 |
带深度摄像头的四旋翼飞行器(x500) | 使 px4_sitl gz_x500_depth | 4002 |
配备视觉测距仪的四旋翼飞行器(x500) | make px4_sitl gz_x500_vision | 4005 |
VTOL | make px4_sitl gz_standard_vtol | 4004 |
防水布 | 使 px4_sitl gz_rc_cessna | 4003 |
高级平面 | make px4_sitl gz_advanced_plane | 4008 |
全部 车型 (和 世界)作为子模块从 仿真场景Gazebo模型库 存放处。
警告
运行 "高级平面 "所需的 "高级升降拖拽插件 "还不是 Gazebo 发行版的一部分,因此 "高级平面 "还无法运行: PX4-Autopilot#22337.
作为启用高级平面的一种变通方法,您可以从 Gazebo 源代码进入 build/lib
目录中,复制出高级升降拖动插件 所以
文件(根据具体的 Gazebo 版本,该文件的名称大致为 libgz-sim7-advanced-lift-drag-system.so
),并将其粘贴到 ~/.gz/sim/plugins
文件夹。
上述命令可启动具有完整用户界面的单个载具。 QGroundControl 应能自动连接到模拟载具。
独立模式
连接 Gazebo SITL 的另一种方式是 独立模式.在该模式下,PX4 SITL 和 Gazebo 分别在各自的终端启动。默认情况下,这些终端位于同一台主机上,但也可以连接网络上任意两台设备上运行的 SITL 和 Gazebo 实例(如果使用 VPN 连接,甚至可以连接不同的网络)。
在单机模式下启动 PX4 时,可在"...... "前添加 生产
用 px4_gz_standalone=1
:
CD /path/to/PX4-Autopilot
px4_gz_standalone=1 生产 px4_sitl gz_x500
然后,PX4 SITL 会等待,直到检测到一个 gz-server然后连接到它。
信息
如果您尚未开始 gz-server 运行 生产
命令时,你会看到如下警告,直到 gazebo 已经启动,并且一个 gz-server 被 PX4 检测到:
警告 [gz 桥] 服务 致电 定时 向外 作为 仿真场景Gazebo 有 不 一直 侦测到
启动模拟的最简单方法是使用 Python 脚本 模拟仿真场景Gazebo可在 仿真场景Gazebo模型库 存储库。这可用于启动 gz-server 任何支持的世界和载具的实例。
该脚本无需安装任何其他依赖项即可使用,首次使用时会获取支持的 PX4 型号和世界(默认情况下),并将其保存到 ~/.simulation-gazebo
.如果再次调用,脚本将使用该目录获取模型和世界。因此,如果您想使用自己的模型并以独立模式运行,就必须将其源代码放在 ~/.simulation-gazebo
.
您可以使用任何您喜欢的方法在本地获取脚本,例如 wget
:
wget https://raw.githubusercontent.com/PX4/PX4-gazebo-models/main/simulation-gazebo
脚本可以用
CD /path/to/script/
python3 模拟仿真场景Gazebo
更多信息和论据,请参见 仿真场景Gazebo模型.
信息
如果 使 px4_sitl gz_x500
出现错误 ninja: error: unknown target 'gz_x500';
然后运行 清洁
从零开始,尝试运行 使 px4_sitl gz_x500
又来了
无头模式
您可能想在无头模式(不含 Gazebo 图形用户界面)下运行 Gazebo,因为它使用的资源较少,而且不依赖于您系统中支持 OpenGL 渲染的显卡。这使得加载和运行速度更快,对于许多简单的使用情况来说,这可能就是你所需要的全部。
在命令前加上 无头=1
环境变量:
无头=1 生产 px4_sitl gz_x500
指定世界
通过将所需的世界与所需载具的名称连接,可以在特定世界中运行模拟。例如,要运行风世界的 x500
您可以指定载具:
生产 px4_sitl gz_x500_windy
您还可以使用 PX4_GZ_WORLD
环境变量:
PX4_GZ_WORLD=有风 生产 px4_sitl gz_x500
支持的世界如下。
世界 | 指挥 | 说明 |
---|---|---|
默认 | 使 px4_sitl * | 空洞的世界(灰色的平面) |
有风 | 使 px4_sitl *_windy | 有风的空旷世界 |
海湾 | 使 px4_sitl *_baylands | 四面环水的湾区世界 |
警告
请注意,如果没有指定 "世界",PX4 将使用 默认
世界。但是,您不能 明确地 具体说明 _默认
因为这会阻止 PX4 启动。换句话说,使用 使 px4_sitl gz_x500
而不是 make px4_sitl gz_x500_default
为默认值。
信息
Baylands 会抛出以下错误,可以忽略:
[Err] [SDFFeatures.cc:843] 无法创建碰撞 [collision] 的几何元素
出现这种情况是因为 Baylands 有很多网格。不过,这并不会破坏 Gazebo,而且在 Gazebo Harmonic 中,错误已降级为警告: gz-physics/pull/531.您还可以通过以下方法用警告代替错误 从源代码安装 gz-garden.
使用/配置选项
启动管道允许高度灵活的配置。特别是可以
- 使用任意世界启动新的模拟,或附加到已运行的模拟中。
- 在模拟中添加新的载具,或将新的 PX4 实例链接到现有实例。
这些情况可通过设置适当的环境变量来管理。
语法
启动语法为
ARGS ./build/px4_sitl_default/bin/px4
其中 ARGS
是一个环境变量列表,包括
px4_sys_autostart
(强制性):设置 机身自动启动 ID 的 PX4 机身启动。px4_gz_model_name
:设置 现存的 模型的名称。如果提供了该名称,启动脚本就会尝试将一个新的 PX4 实例绑定到与该名称完全匹配的 Gazebo 资源上。- 该设置与
PX4_SIM_MODEL
.
- 该设置与
PX4_SIM_MODEL
:设置要在模拟器中生成的新 Gazebo 模型的名称。如果提供了该变量,启动脚本会在 Gazebo 资源路径中查找与给定变量匹配的模型,生成该模型并绑定新的 PX4 实例。- 该设置与
px4_gz_model_name
.
信息
环境变量
PX4_GZ_MODEL
已被弃用,其功能已并入PX4_SIM_MODEL
.- 该设置与
px4_gz_model_pose
:时,设置模型的生成位置和方向。PX4_SIM_MODEL
会被采用。如果提供了启动脚本,则启动脚本会按照以下语法在一个姿态下生成模型"x,y,z,roll,pitch,yaw";
其中位置以米为单位,角度以弧度为单位。- 如果省略,零姿态
[0,0,0,0,0,0]
使用。 - 如果提供的数值少于 6 个,则缺失的数值将固定为零。
- 这只能与
PX4_SIM_MODEL
(不是px4_gz_model_name
).
- 如果省略,零姿态
PX4_GZ_WORLD
:设置新模拟的 Gazebo 世界文件。如果没有给出,则 默认 使用。- 如果已有模拟正在运行,该变量将被忽略。
- 该值应为 为所选机身指定 但可以使用该参数重写。
px4_simulator=gz
:设置模拟器,Gazebo 的模拟器必须是gz
.- 该值应为 为所选机身设置在这种情况下,无需将其设置为参数。
px4_gz_standalone
:让 PX4 知道不应启动 Gazebo 实例。Gazebo 需要单独启动,详情请参考 独立模式.px4_gz_sim_render_engine
:设置 gazebo 使用的渲染引擎。默认的渲染引擎(OGRE 2)在某些平台/环境下不受良好支持。指定
PX4_GZ_SIM_RENDER_ENGINE=ogre
如果在虚拟机上运行 PX4 时遇到渲染问题,请将渲染引擎设置为 OGRE 1。
PX4 仿真场景Gazebo世界和模型数据库 可在此处的 Github 上找到.
信息
gz_env.sh.in
在 $PX4_DIR/build/px4_sitl_default/rootfs/gz_env.sh
实例
以下是上述不同场景的一些示例。
启动模拟器 + 默认世界 + 以默认姿势生成载具
吁px4_sys_autostart=4001 PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4
启动模拟器 + 默认世界 + 以自定义姿势(y=2m)生成载具
吁px4_sys_autostart=4001 px4_gz_model_pose="0,2"; PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4
启动模拟器 + 默认世界 + 连接现有载具
吁px4_sys_autostart=4001 px4_gz_model_name=x500 ./build/px4_sitl_default/bin/px4
以独立模式启动模拟器 + 连接到运行默认世界的 Gazebo 实例
吁px4_gz_standalone=1 px4_sys_autostart=4001 PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4
在单独的终端运行:
吁蟒蛇 /path/to/simulation-gazebo
添加新世界和模型
SDF 文件、网格文件、纹理以及其他任何与 Gazebo 中世界和模型的功能和外观有关的文件都可以放在相应的 /worlds
和 /模型
目录中的 PX4-仿真场景Gazebo模型.
在 PX4 中按照以下步骤添加模型和世界。
添加模型
添加新模型
定义 机身配置文件.
在机身配置文件中定义 Gazebo 的默认参数(本例来自 x500 四旋翼飞行器):
iniPX4_SIMULATOR=${PX4_SIMULATOR:=gz} PX4_GZ_WORLD=${PX4_GZ_WORLD:=default} PX4_SIM_MODEL=${PX4_SIM_MODEL:=<your model name>}
PX4_SIMULATOR=${PX4_SIMULATOR:=gz}
为特定机型设置默认模拟器 (Gz)。PX4_GZ_WORLD=${PX4_GZ_WORLD:=default}
设置 默认世界 针对该特定机身。设置
PX4_SIM_MODEL
让您只用吁px4_sys_autostart=<;您的 新 机身 id>; ./build/px4_sitl_default/bin/px4
为 机身.
- 如果计划使用常规模式,请将模型 SDF 添加到
工具/模拟/gz/模型/
. - 如果您计划使用 独立 模式,将模型 SDF 添加到
~/.simulation-gazebo/models/
当然,您也可以同时使用这两种方法。
- 如果计划使用常规模式,请将模型 SDF 添加到
添加世界
增加一个新世界:
把你的世界添加到在
CMakeLists.txt
这里.这样做的目的是CMake
生成正确的目标。- 如果您计划使用普通模式,请将您的世界 sdf 添加到
工具/模拟/gz/worlds/
. - 如果您计划使用 独立 模式,将您的世界 SDF 添加到
~/.simulation-gazebo/worlds/
- 如果您计划使用普通模式,请将您的世界 sdf 添加到
信息
只要世界文件和模型文件都在 Gazebo 搜索路径 (gz_sim_resource_path
),就没有必要将它们添加到 PX4 的世界和模型目录中。但是 make px4_sitl gz_<model>_<world>;
不会与他们合作。
PX4-Gazebo 时间同步
与 Gazebo Classic 和 jMAVSim 模拟器不同,PX4 和 Gazebo 没有实施锁步机制。
在 Gazebo 模拟期间,PX4 会订阅 Gazebo \时钟
并将其用作时钟源。这样,即使 Gazebo 运行时的实时因子与 1 不同,PX4 也能保证在时间向前推进之前始终等待 Gazebo。
但请注意,由于锁步功能缺失,Gazebo 将永远不会等待 PX4 完成计算。在最坏的情况下,PX4 会完全离线,而 Gazebo 会继续运行,模拟的无人机会明显崩溃。
多车模拟
Linux 主机支持多载具模拟。
欲了解更多信息,请参阅 带仿真场景Gazebo的多车模拟