跳至内容

多车模拟与经典仿真场景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 节点。

要建立一个示例设置,请按照以下步骤操作:

  1. 克隆 PX4/固件代码,然后构建 SITL 代码:

    CD 固件克隆
    Git 子模组 更新 --启动 --递归
    DONT_RUN=1 生产 px4_sitl 古董
  2. 建立 微型 xrce-dds 代理 和接口软件包后的 此处的说明.

  3. 运行 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。

  4. 运行 MicroXRCEAgent.它会自动连接所有四辆车:

    MicroXRCEAgent udp4 -p 8888

    信息

    模拟器启动脚本会自动分配一个 唯一命名空间 到每辆车。

配备 MAVROS 和经典仿真场景Gazebo的多辆汽车

本示例演示的设置是打开 Gazebo Classic 客户端图形用户界面,显示空旷世界中的两辆 Iris 载具。然后您可以使用 QGroundControl 和 MAVROS 的管理方式类似。

需要

构建和测试

要建立一个示例设置,请按照以下步骤操作:

  1. 克隆 PX4/PX4-Autopilot 代码,然后构建 SITL 代码

    CD 固件克隆
    Git 子模组 更新 --启动 --递归
    DONT_RUN=1 生产 px4_sitl_default 古董
  2. 从环境中寻找灵感:

    消息来源 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
  3. 运行启动文件:

    玫瑰发射 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 命名空间。

要在模拟中添加第三个虹膜,需要考虑两个主要部分:

  • 增加 UAV3multi_uav_mavros_sitl.launch

    • 复制现有载具组 (UAV1UAV2)
    • 递增 身份证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 文件中定义的模型,如本主题其余部分所述)来模拟多辆载具。

步骤如下

  1. 安装 xmlstarlet 从你的 Linux 终端:

    苏都 适切 安装 xmlstarlet
  2. 使用 玫瑰发射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 需要有相应的启动脚本。

  1. 您可以选择

    • 修改 single_vehicle_spawn_sdf.launch 将下面的一行改为指向模型的位置:

      $(找到 px4)/Tools/simulation/gazebo/sitl_gazebo-classic/models/$(雅格 载具)/$(雅格 载具).sdf

      信息

      确保您设置了 汽车 参数,即使您对模型的路径进行了硬编码。

    • 将模型复制到上述文件夹中(遵循相同的路径约定)。

  2. 汽车 参数用于设置 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/.

其他资源