ArduPilot 网络接口

从固件 4.5 及更高版本开始,ArduPilot 提供了一个网络接口框架,允许本地和广域网络连接。Pixhawk6X 和 CubePilot CubeRed 等几款新一代(飞行)控制器提供以太网 MAC 接口,允许 ArduPilot 使用传输层 UDP 或 TCP 协议通过 IP 连接到载具外设、数据服务器甚至广域网。

此外,对于未集成以太网 MAC 的基于 H7 处理器的定制构建,可以使用 ArduPilot 定制固件服务器 它包括 PPP(点对点协议),允许使用 PPP 通过(飞行)控制器的串行端口进行网络连接。

备注

对于那些 本地生成固件PPP 可与 -enable-ppp 配置选项一起使用。

目前,通过 ArduPilot 内的普通串行管理器钩子,串行协议不仅可以通过普通 UART 连接连接到(飞行)控制器,还可以通过网络连接连接到(飞行)控制器。这些连接可与 Etnernet 或 PPP 接口一起使用。

此外,LUA 脚本绑定允许(飞行)控制器通过 LUA 脚本运行网络服务器类型的应用程序。网络服务器 LUA 示例以 applet 的形式提供,可加快日志下载速度,并显示载具/系统状态数据。

对于带有网络接口的外围设备,ArduPilot 的 AP_Periph 固件允许使用外围设备的串行接口或 DroneCAN 接口轻松开发网络外围设备,并通过轻松设置的方法将这些设备的数据通过网络传输到(飞行)控制器。

ArduPilot 网络框架概述

ArduPilot 提供了一个 NET 管理器,可提供 IP 协议引擎以及 UDP 和 TCP 传输层引擎。有四个可配置的 IP 端口,每个端口都可以是 UDP 或 TCP、客户端或服务器端口。(飞行)控制器可以使用这些端口的数据流,就像使用 UDP 或 TCP 数据流一样:

  • ArduPilot 支持的串行设备(如测距仪、云台、串行电调等)。

  • 与另一辆车或 GCS 的 MAVLink 连接

此外,在(飞行)控制器上运行的 LUA 脚本也可以访问这些数据端口。

./_images/Net_framework.jpg

配置

  • NET_ENABLE 必须设置为 "1 "并重启(飞行)控制器才能查看网络参数:

以太网 MAC 配置

如果(飞行)控制器具有以太网 MAC,则适用以下参数:

这是全局 6 字节 MAC 地址。默认值由(飞行)控制器 CPU 的唯一 ID 自动生成,但也可根据需要进行更改。

这是(飞行)控制器的 4 字节 IP 地址。默认为 192.168.13.14.如果网络有 DHCP 服务器,可以通过使用 NET_DHCP 参数,或根据需要手动设置。

这是网关在本地子网之外的 IP 地址。 NET_NETMASK 屏蔽。任何在掩码子网范围之外的目标 IP 都将被发送到网关的 MAC 地址和最终目标 IP 地址。

PPP 配置

该功能允许基于 H7 cpu 的(飞行)控制器通过串行端口使用 PPP 连接到网络。

备注

此功能不能用于内置以太网 MAC 的(飞行)控制器。目前每个(飞行)控制器只允许一个网络连接。此外,(飞行)控制器上只能有一个串行端口配置为 PPP。

要启用该功能,首先必须在(飞行)控制器固件中存在该功能。可以使用 定制固件构建服务器 或使用"-enable-ppp "waf 配置选项在本地编译代码(参见 编写代码)

为 PPP 配置串行端口(本例中使用串行 2):

备注

要获得最佳吞吐量,串行端口应具有流量控制(RTS/CTS),并应启用和使用。如果使用不带流量控制的端口,可以将波特率设置为 921000。

ArduPilot 端口配置

这些参数适用于以太网或 PPP 数据链路与网络的连接。每个网络物理接口的四个逻辑端口的参数(示例仅显示端口 1):

  • NET_P1_TYPE:类型可以是禁用 (0)、UDP 客户端 (1)、UDP 服务器 (2)、TCP 客户端 (3) 或 TCP 服务器(4)。对于两种客户端类型,必须设置有效的目标 IP 地址。对于两种服务器类型,可以使用 0.0.0.0 或(飞行)控制器的本地 IP 地址。如果 IP 设置为 255.255.255.255,则 UDP 客户端类型将使用广播;如果 IP 位于组播地址范围内,则将使用 UDP 组播。设置类型后,需要重新启动才能看到以下参数。

  • NET_P1_IP0, NET_P1_IP1, NET_P1_IP2, NET_P1_IP3从客户端发出数据包的 IP 地址。服务器的 IP 地址可以是 0.0.0.0 或(飞行)控制器的 IP 地址。更改后需要重启。

  • NET_P1_PORT:这是 TCP 或 UDP 端口号。更改后需要重启。

  • net_p1_protocol:这将向 ArduPilot 串行管理器注册该端口,将其视为已连接使用指定协议的设备。这样 ArduPilot 就能像使用 UART 设备或连接一样使用数据。更改后需要重新启动。

下图显示了以太网万向节的典型单设备设置。

./_images/NET_Periph.png

下图显示了一个典型的车载系统,该系统带有多个外围设备和一个可选的与工厂网络的地面连接,用于数据检索和载具设置。

./_images/Net_Vehicle.png

服务器还是客户端?

客户端或服务器的选择取决于所连接设备的功能。如果是 TCP 服务器,那么 ArduPilot 的端口应该是 TCP 客户端。如果是 UDP 客户端,那么 ArduPilot 将是 UDP 服务器。

一般来说,如果一个设备是(飞行)控制器的可控对象,那么它就是一个服务器,始终在监听命令(电调、云台等)。如果是连续数据流(如空速传感器),则可能是客户端,无需询问即可发送数据。

脚本

对 LUA 脚本的网络访问有以下几种方式 套筒式绑带 (搜索 "socket"),允许脚本连接并管理从脚本流向网络的 UDP 或 TCP 数据流。

在(飞行)控制器上实施简单网络服务器应用程序的示例脚本,允许访问 SD 卡(用于快速下载日志)和访问(飞行)控制器状态(本例中为上膛和 GPS/AHRS 定位)。 这里 及其 在此阅读自述文件

在 SITL 下运行网络服务器脚本

  • 运行 SITL

  • 启用脚本 (SCR_ENABLE = 1),重新启动 SITL

  • 设置 SCR_VM_I_COUNT = 1000000,重启 SITL

  • 将本地网络浏览器连接到"http://127.0.0.1:8080"(不是如图所示的类型,以避免使用 https)

结果网页

../_images/LUA_webserver.jpg

通过网络附加(飞行)控制器连接到网络服务器

以便将运行网络服务器的(飞行)控制器连接到本地网络,允许其他 PC 访问服务器:

  • 将(飞行)控制器连接到本地网络(直接或通过以太网交换机)

  • 确保 NET_IPADDR 是本地网络范围内的地址,如果使用以太网接口,则使用网络 DHCP 服务器进行设置。对于 PPP 配置,所连接的 PPP 访问外设应已按要求设置好网络操作,其 PPP 守护进程应运行 arp 代理。

  • 将本地网络浏览器连接到"http://<NET_IPADDR>:8080"(注意:请完全按照所示键入... "https://"将不起作用)

电缆适配器、布线和接线

大多数以太网设备都使用带有 RJ-45 接头的 CAT5(或更高)电缆互连。对于(飞行)控制器或车载以太网交换机来说,这些连接器显然过于笨重。取而代之的是 4 针或 5 针 JST-GH 或 Picoblade 连接器。因此,电缆适配器如 BotBox 适配器 或其他 RJ45 分线板连接到传统的 RJ45 接口时需要使用。

可能需要使用全 CAT5 电缆来互连较长线路的载具组件,但 1-2 米或更短的线路可以使用两对 22-24 AWG 的双绞线。从(飞行)控制器到开关和外围设备的连接都可以使用短双绞线和 JST-GH/Picoblade 连接器。

以太网车联网系统示例