多车模拟与经典仿真场景Gazebo
本主题介绍如何使用以下工具模拟多个无人飞行器 经典仿真场景Gazebo 和 SITL(仅限 Linux)。使用 ROS 和不使用 ROS 的模拟采用了不同的方法。
带仿真场景Gazebo的多车型经典车型
要在 Gazebo Classic 中模拟多个光圈或飞机载具,请在终端(从 固件 树):
Tools/simulation/gazebo-classic/sitl_multiple_run.sh [-m <;模式l>;] [-n <;载具数s>;] [-w <;世界d>;] [-s <;凭证t>;] [-t <;油料t>;] [-l <;实验室l>;]
型号
:""""""""""""等字样。 载具类型/型号 例如马兰花
(默认)、飞机
,standard_vtol
,UGV无人车
,r1_rover
台风_h480
.<number_of_vehicles>;
:要生成的载具数量。默认值为 3,最大值为 254。<世界>;
:""""""""""""等字样。 世界 载具应在其中生成,例如:...........:空的
(默认)<script>;
:生成多辆不同类型的载具(覆盖-m
和-n
).例如吁-s "iris:3,plane:2,standard_vtol:3";
- 支持的载具类型有
马兰花
,飞机
,standard_vtol
,UGV无人车
,r1_rover
台风_h480
. - 冒号后的数字表示要生成的(该类型)载具数量。
- 最多可容纳 254 辆车。
- 支持的载具类型有
<目标>;
:构建目标,例如px4_sitl_default
(默认)、px4_sitl_nolockstep
<标签>;
: 型号的特定标签,例如rplidar
每个载具实例分配一个唯一的 MAVLink 系统 ID(2、3、4 等)。跳过 MAVLink 系统id 1,以保证不同系统之间的一致性。 命名空间.载具实例通过按顺序分配的 PX4 远程 UDP 端口访问: 14541
- 14548
(附加实例均使用相同的远程 UDP 端口访问): 14549
).
信息
之所以有 254 辆车的限制,是因为 mavlink MAV_SYS_ID
在同一网络中只支持 255 辆车(第一辆车被跳过)。载具 MAV_SYS_ID
分配给 SITL rcS: init.d-posix/rcS
视频:多旋翼飞行器(虹膜)
视频多平面
视频多重 VTOL
构建和测试(XRCE-DDS)
Tools/simulation/gazebo-classic/sitl_multiple_run.sh
可用于在 Gazebo Classic 中模拟通过 XRCE-DDS 连接的多辆汽车。
信息
您需要安装 XRCE-DDS 依赖项。更多信息,请参阅 ROS 2 用户指南(PX4-ROS 2 桥接器)用于连接 ROS 2 节点。
要建立一个示例设置,请按照以下步骤操作:
克隆 PX4/固件代码,然后构建 SITL 代码:
吁CD 固件克隆 Git 子模组 更新 --启动 --递归 DONT_RUN=1 生产 px4_sitl 古董
建立
微型 xrce-dds 代理
和接口软件包后的 此处的说明.运行
Tools/simulation/gazebo-classic/sitl_multiple_run.sh
.例如,要生成 4 辆车,运行 :吁./Tools/simulation/gazebo-classic/sitl_multiple_run.sh -m 马兰花 -n 4
信息
每个载具实例分配一个唯一的 MAVLink 系统 ID(2、3、4 等)。跳过 MAVLink 系统 ID 1。
运行
MicroXRCEAgent
.它会自动连接所有四辆车:吁MicroXRCEAgent udp4 -p 8888
信息
模拟器启动脚本会自动分配一个 唯一命名空间 到每辆车。
配备 MAVROS 和经典仿真场景Gazebo的多辆汽车
本示例演示的设置是打开 Gazebo Classic 客户端图形用户界面,显示空旷世界中的两辆 Iris 载具。然后您可以使用 QGroundControl 和 MAVROS 的管理方式类似。
需要
信息
在撰写本文档时,该系统使用的是 Ubuntu 18.04 和 ROS Melodic/Gazebo 9。另请参见 经典模拟仿真场景Gazebo.
构建和测试
要建立一个示例设置,请按照以下步骤操作:
克隆 PX4/PX4-Autopilot 代码,然后构建 SITL 代码
吁CD 固件克隆 Git 子模组 更新 --启动 --递归 DONT_RUN=1 生产 px4_sitl_default 古董
从环境中寻找灵感:
吁消息来源 Tools/simulation/gazebo-classic/setup_gazebo.bash $(pwd) $(pwd) /build/px4_sitl_default 出口 ros_package_path=$ros_package_path:$(pwd):$(pwd)/Tools/simulation/gazebo-classic/sitl_gazebo
运行启动文件:
吁玫瑰发射 px4 multi_uav_mavros_sitl.launch
信息
您可以指定
gui:=false
在上述 玫瑰发射 来启动 Gazebo Classic,而不使用其用户界面。
教程示例打开 Gazebo Classic 客户端图形用户界面,显示空旷世界中的两辆 Iris 载具。
您可以通过 QGroundControl 或 MAVROS 的管理方式与管理单一载具的方式类似:
- QGroundControl 将有一个下拉菜单,用于选择重点关注的载具;
- MAVROS 要求在主题/服务路径前包含适当的命名空间(例如,对于
<group ns="uav1">;
您将使用 /uav1/mavros/mission/push).
发生了什么?
每辆模拟载具都需要以下信息:
仿真场景Gazebo经典款:其定义为
xacro
文件中的PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/rotors_description/urdf/<model>_base.xacro
看看 这里.目前,该模型xacro
文件假定以 base.xacro.该模型应该有一个名为mavlink_udp_port
定义了 Gazebo Classic 与 PX4 节点通信的 UDP 端口。模型的xacro
文件将用于生成一个urdf
该模型包含您选择的 UDP 端口。要定义 UDP 端口,请设置mavlink_udp_port
在每辆车的发射文件中,请参见 这里 为例。信息
如果您使用的是同一车型,则不需要单独的
xacro
每辆车的文件。相同的xacro
文件就足够了。PX4 节点:这是 SITL PX4 应用程序。它通过 Gazebo Classic 载具模型中定义的相同 UDP 端口与模拟器 Gazebo Classic 通信,即
mavlink_udp_port
.要在 PX4 SITL 应用程序端设置 UDP 端口,需要设置SITL_UDP_PRT
参数与启动文件中的mavlink_udp_port
前文已讨论过,见 这里.启动文件中的启动文件路径是根据汽车
和身份证
论点,见 这里.......。MAV_SYS_ID
启动文件中的每辆车,请参见 这里应与身份证
发射文件中该飞行器的 这里.这将有助于确保启动文件和启动文件的配置保持一致。马弗罗斯节点 (可选):可在启动文件中运行一个单独的 MAVROS 节点,参见 这里如果您想通过 ROS 控制载具,您需要在启动文件中的特定端口集上启动 MAVLink 流,以便连接到 PX4 SITL 应用程序。您需要在启动文件中的一组独特端口上启动 MAVLink 流,请参见 这里.这些唯一的端口必须与 MAVROS 节点启动文件中的端口一致,请参见 这里.
启动文件 multi_uav_mavros_sitl.launch
有以下作用、
在 Gazebo Classic 中装载一个世界、
xml<!-- 仿真场景Gazebo模拟 -->; <;包括 文件="$(find gazebo_ros)/launch/empty_world.launch";>; <;雅格 名字="gui"; 价值="$(arg gui)";/>; <;雅格 名字="world_name"; 价值="$(arg world)";/>; <;雅格 名字="debug"; 价值="$(arg debug)";/>; <;雅格 名字="verbose"; 价值="$(arg verbose)";/>; <;雅格 名字=暂停; 价值="$(arg paused)";/>; </包括>;
每辆车、
从 xacro 创建 urdf 模型,加载 gazebo 经典模型并运行 PX4 SITL 应用程序实例
xml<!-- PX4 SITL 和载具产卵 -->; <;包括 文件="$(find px4)/launch/single_vehicle_spawn.launch";>; <;雅格 名字="x"; 价值="0";/>; <;雅格 名字="y"; 价值="0";/>; <;雅格 名字="z"; 价值="0";/>; <;雅格 名字="R"; 价值="0";/>; <;雅格 名字="P"; 价值="0";/>; <;雅格 名字="Y"; 价值="0";/>; <;雅格 名字="载具"; 价值="$(arg vehicle)";/>; <;雅格 名字="rcS"; 价值="$(find px4)/posix-configs/SITL/init/$(arg est)/$(arg vehicle)_$(arg ID)";/>; <;雅格 名字="mavlink_tcp_port"; 价值="4560";/>; <;雅格 名字="ID"; 价值="$(arg ID)";/>; </包括>;
运行一个 mavros 节点
xml<!-- MAVROS -->; <;包括 文件="$(find mavros)/launch/px4.launch";>; <;雅格 名字="fcu_url"; 价值="$(arg fcu_url)";/>; <;雅格 名字="gcs_url"; 价值="";/>; <;雅格 名字="tgt_system"; 价值="$(arg ID)";/>; <;雅格 名字="tgt_component"; 价值=1";/>; </包括>;
信息
每辆车的完整区块都包含在一组
组>;
标记来分隔载具的 ROS 命名空间。
要在模拟中添加第三个虹膜,需要考虑两个主要部分:
增加
UAV3
至 multi_uav_mavros_sitl.launch- 复制现有载具组 (
UAV1
或UAV2
) - 递增
身份证
将3
- 为
mavlink_udp_port
用于与 Gazebo Classic 通信的 arg - 中的两个端口号,为 MAVROS 通信选择端口。
fcu_url
雅格
- 复制现有载具组 (
创建一个启动文件,并对该文件进行如下修改:
复制现有的 iris rcS 启动文件 (
iris_1
或虹膜_2
) 并将其重命名为iris_3
MAV_SYS_ID
值为3
SITL_UDP_PRT
的值相匹配mavlink_udp_port
启动文件其一
启动
端口和mavlink 流
将端口值改为相同的值,用于 QGC 通信其二
启动
端口必须与启动文件中使用的端口一致fcu_url
雅格信息
注意哪个端口是
来源
和数据终端
为不同的终点。
使用 SDF 模型的多辆汽车
本节将介绍开发人员如何使用 Gazebo Classic SDF 文件中定义的载具模型(而不是使用 ROS Xacro 文件中定义的模型,如本主题其余部分所述)来模拟多辆载具。
步骤如下
安装 xmlstarlet 从你的 Linux 终端:
吁苏都 适切 安装 xmlstarlet
使用 玫瑰发射 与 multi_uav_mavros_sitl_sdf.launch 启动文件:
吁玫瑰发射 multi_uav_mavros_sitl_sdf.launch 载具:=<;模型文件名称e>; ``` ::: 信息 备注 载具模型文件名参数为可选参数(`载具:=<model_file_name>;`);如果省略,则默认使用 [plane model](https://github.com/PX4/PX4-SITL_gazebo-classic/tree/master/models/plane)。 :::
该方法与使用 xacro 相似,但 SITL/Gazebo Classic 端口号会被以下程序自动插入 xmstarlet 不需要在 SDF 文件中指定。
要添加新的载具,您需要确保可以找到该模型(以便在 Gazebo Classic 中生成),并且 PX4 需要有相应的启动脚本。
您可以选择
修改 single_vehicle_spawn_sdf.launch 将下面的一行改为指向模型的位置:
吁$(找到 px4)/Tools/simulation/gazebo/sitl_gazebo-classic/models/$(雅格 载具)/$(雅格 载具).sdf
信息
确保您设置了
汽车
参数,即使您对模型的路径进行了硬编码。将模型复制到上述文件夹中(遵循相同的路径约定)。
汽车
参数用于设置PX4_SIM_MODEL
环境变量,默认的 rcS(启动脚本)会使用该变量为模型查找相应的启动设置文件。在 PX4 中,这些启动文件可以在 PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/ 目录。例如,这里是飞机模型的 启动脚本.要实现这一功能,启动文件中的 PX4 节点需要通过参数来指定 rcS 文件 (etc/init.d/rcS)和 rootfs 等目录的位置 ($(find px4)/build_px4_sitl_default/etc
).为简便起见,建议将模型的启动文件与 PX4's 文件一起放置在 PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/.
其他资源
- 参见 模拟 的 UDP 端口配置说明。
- 参见 仿真场景Gazebo中的 URDF 以获取更多关于使用 xacro 生成模型的信息。
- 参见 转子 了解更多 xacro 型号。