在 X-Plane 10/11 中使用 SITL

../_images/xplane-pt60.jpg

本文介绍如何将 X-Plane 10 用作 ArduPilot 的模拟后端 SITL.

概述

X-Plane 10/11 是一款商业飞行模拟器,具有丰富的网络接口,可与其他软件连接。在本例中,我们将把它连接到 ArduPilot SITL 系统,使 ArduPilot 能够驾驶各种飞机。

使用带有 SITL 的 X-Plane 是获得 ArduPilot 飞行经验和学习如何使用地面控制站的好方法。它还可用于了解 ArduPilot 如何处理不寻常的飞机,以及开发对其他模拟器后端可能无法提供的飞机功能的支持。

在启动 SITL 之前,您唯一需要在 X-Plane 上设置的是网络数据,以便将传感器数据发送到运行 ArduPilot 的计算机的 IP 地址。这可以是运行 X-Plane 的同一台计算机(在这种情况下,您应该使用 127.0.0.1 的 IP 地址),也可以是网络上的另一台计算机。

设置 X-Plane 11

转到 设置 ->; 数据输出 菜单,并激活 常规数据输出 标签。选中 通过 UDP 网络 栏中至少有一个 ArduPilot 将使用的设置(例如 时代 在第二行)。另一个将由 ArduPilot 通过网络命令自行设置,注意可以用它来验证双向连接。

在界面右侧,设置 UDP 速率 为 50.0,并确保下方标有 发送网络数据输出 已设置。设置 IP 地址 字段为运行 SITL 的计算机地址。设置 港口 字段至 49001。

./_images/xplane11-data-output.png

设置 X-Plane 10

进入 X-Plane 的 "设置 -> 网络连接 "菜单,然后进入 "数据 "选项卡。设置正确的 IP 地址,并将目标端口号设置为 49001。确保接收端口为 49000(默认值)。如果使用环回(即 127.0.0.1),还需确保 "发送端口 "不是 49001。在下面的示例中使用的是 49002。

./_images/xplane-network-data.jpg

您还需要从 X-Plane 输出数据。点击 设置那么 数据输入 & 输出.从下面的截图中至少复制一个设置。然后,ArduPilot 将向 X-Plane 发送命令,启用其运行所需的所有输出数据字段。

../_images/mavlinkhil1.jpg

如果您有操纵杆,则可以为 X-Plane 配置操纵杆。当 ArduPilot 控制 X-Plane 时,由 X-Plane 控制的操纵杆将作为遥控输入使用,允许您在 ArduPilot 飞行模式下使用操纵杆驾驶飞机。

操纵杆设置请转至设置 -> 操纵杆和设备。您应设置滚动、前平移/俯仰、偏航和油门控制。请注意,X-Plane 的油门设置与众不同,全油门时控制杆完全向左,零油门时则完全向右。

../_images/xplane-joystick-setup.jpg

目前,除了基本轴控制外,您无法使用操纵杆进行其他操作,因此无法使用它来更改飞行模式。未来我们可能会增加这方面的支持。

启动 SITL

使用 X-Plane 启动 SITL 有三种方法,具体取决于您想要做什么。

  • 在 Windows 的 MissionPlanner 中运行 SITL

  • 自己构建 SITL 并从您最喜欢的 GCS 进行连接

  • 使用 sim_vehicle.py 和 MAVProxy 构建并运行 SITL

如果您只想使用 SITL 测试 ArduPilot,但又不想修改代码,那么第一种方法是不错的选择。MissionPlanner 会下载适用于 Windows 的 ArduPilot SITL 版本,该版本要么是当前的稳定发布版本,要么是正在开发的最新 ArduPilot 代码的夜间版本。

如果您想进行 ArduPilot 开发并尝试代码修改,同时又想使用自己选择的地面站,那么第二种方法是不错的选择。任何支持 MAVLink over TCP 的地面站都可以使用。

如果您希望在 ArduPilot SITL 测试中使用 MAVProxy 的全部功能,第三种方法是不错的选择。MAVProxy 具有丰富的图形和控制能力,是长期 ArduPilot 软件开发的理想选择。

从 MissionPlanner 使用 SITL

要直接从 MissionPlanner 启动 SITL,请转到模拟选项卡:

../_images/xplane-missionplanner2.jpg

在模拟屏幕中,您需要选择 "xplane "模型,然后选择 "Plane"(飞机)。目前,我们只支持在 X-Plane 中使用 SITL 的固定翼飞机和旋翼飞行器。将来我们可能会支持其他类型的飞机。有关旋翼飞行器飞行的更多信息,请参阅下文。

选择 "Plane"(飞机)时,MissionPlanner 会显示下载 ArduPilot 当前稳定版本或夜间版本的选项。

../_images/xplane-missionplanner3.jpg

然后,您需要为飞机加载一套适当的参数(或像设置真实飞机一样设置飞机),然后像往常一样使用 MissionPlanner 享受飞行。

在设置飞行器时,使用操纵杆移动控制面以确保其方向正确是非常有用的。您可以使用 ArduPilot 参数以正常方式更改通道方向。

将 SITL 与自己的 GCS 结合使用

使用 SITL 运行 X-Plane 10/11 的第二种方法是手动构建 ArduPilot SITL,然后通过 cygwin 命令行运行。然后,您就可以使用自己喜欢的 GCS 进行连接了。

您应该在 cygwin 中签出最新的 ArduPilot git 树,然后将目录更改为顶部的 "ardupilot "目录。然后运行以下命令:

$ modules/waf/waf-light configure --board sitl $ modules/waf/waf-light plane $ build/sitl/bin/arduplane --model xplane
../_images/xplane-waf.jpg

这将启动 SITL 并等待 GCS 连接。您应该通过 TCP 端口 5760 进行连接,并像往常一样配置 ArduPilot。

将 SITL 与 sim_vehicle.py 结合使用

sim_vehicle.py脚本为您提供了大量选项,用于启动与ArduPilot配合使用的所有不同仿真系统,包括X-Plane。

要使用 sim_vehicle.py,您需要安装 MAVProxy。如果您使用的是 Linux 系统,请确保已安装并运行 pip:

$ pip install --upgrade pymavlink mavproxy

如果您使用的是 Windows 系统,请从以下网址下载并安装 MAVProxy https://firmware.ardupilot.org/Tools/MAVProxy/

然后对 ArduPilot master 进行 git 签出,并将目录更改为 ArduPlane 目录。我喜欢为我在 SITL 中驾驶的每架飞机创建一个子目录,这样就能记住每架飞机的设置。如果你想这样做,那么就在 ArduPlane 目录中创建一个子目录,并在其中运行 sim_vehicle.py。在下面的示例中,我将在 X-Plane 中使用 PT60 飞机,因此创建了 PT60 目录:

$ cd ArduPlane $ mkdir PT60 $ cd PT60 $ sim_vehicle.py -D -f xplane --console --map

使用在 WSL2 内部运行的 SITL

"这款" 目前推荐 在 Windows 子系统 for Linux 中运行 SITL 的设置方法,请参阅《Windows 子系统 for Linux》。 使用 WSL 在 Windows 10 上设置构建环境 适用于 Windows 10 系统或 使用 WSL 在 Windows 11 上设置构建环境 适用于 Windows 11 系统。

要在这种环境下连接 X-Plane 和 SITL,需要在两个操作系统之间创建的虚拟网络中手动将它们分别指向正确的地址。

通过运行 ipconfig.exe 在 PowerShell 或命令提示符中,查找以下设备:

以太网 适配器 虚拟以太网 (WSL):

    连接-特定 DNS 后缀  . :
    IPv4 地址. . . . . . . . . . . : 172.25.64.1
    子网 面罩 . . . . . . . . . . . : 255.255.240.0
    默认值 网关 . . . . . . . . . :

这是需要传递给在 WSL 中运行的 SITL 实例的地址。在本例中,它看起来如下:

$ sim_vehicle.py -D -f xplane --sim-address 172.25.64.1

在 Linux 系统中,可以通过以下方式获取地址 ip 地址 命令,查找与 Windows 相同子网(即具有相同前缀)的地址。例如,在 Ubuntu 20.04 中,相关区块如下所示:

2: eth0: <;广播,多媒体,UP,LOWER_UP>; mtu 1500 qdisc mq  UP  默认 qlen 1000
    链接/ 00:15:5d:43:ee:d1 溴化锂 ff:ff:ff:ff:ff:ff
    局域网 172.25.67.144/20 溴化锂 172.25.79.255 范围 全球 eth0
       valid_lft 永远 首选_lft 永远

将该地址(本例中为 172.25.67.144)设置为 IP 地址 节所示的字段 设置 X-Plane 11 以上

驾驶旋翼飞行器

使用 XPlane-10/11 还可以驾驶旋翼飞行器。设置与飞机类似,但有两个额外要求:

  • 您需要设置 XPlane 操纵杆,将集体摇杆映射到襟翼上

  • 您需要映射一个钥匙或操纵杆按钮来开启和关闭 "发电机/燃料电池1 "电气系统

这些奇怪的要求是因为 X-Plane 10 中对旋翼飞行器远程控制的限制。襟翼输入是 ArduPilot SITL 能够远程读取的,同时不会干扰旋翼飞行器的飞行。发电机/燃料电池 1 开/关 "用于模拟 ArduPilot 旋翼飞行器支持中的联锁开关(通道 8)。

请注意,对于 "发电机/燃料电池开/关",您确实需要映射两个独立的事件,一个用于开,一个用于关。如果使用双位开关,则一个映射到开关打开位置,另一个映射到开关关闭位置。

有关操纵杆的典型设置,请参阅本示例

../_images/xplane-heli-joystick1.jpg

以及将发电机/燃料电池的开/关开关映射到操纵杆开关的这一个

../_images/xplane-heli-joystick2.jpg

此处提供了 X-Plane 10/11 中贝尔喷气游侠旋翼飞行器的全套参数 http://uav.tridgell.net/XPlane/

您还需要在启动 SITL 时将模型设置为 "xplane-heli",而不是 "xplane",以激活旋翼飞行器控制。

旋翼飞行器的启动程序是:

  1. 联锁开启(因此 RC 输入通道 8 为低电平)

  2. 设置零集合(因此 RC 输入通道 3 为低电平)

  3. 上膛旋翼飞行器

  4. 设置联锁关闭(因此 RC 输入通道 8 为高电平)

  5. 等待头部达到全速

  6. 起飞