此页面由 AI 自动翻译。查看英文原版

OAK PoE 部署指南

以太网供电 (PoE) 允许使用以太网线缆为设备供电并提供连接性,带宽为 1 Gbps 全双工,最长可达 100 米(328 英尺)。
您需要一个 PoE 交换机或注入器来 PoE 设备供电(请参阅 为 PoE 设备供电)。为设备供电后,交换机/注入器上的电源 LED 应亮起,如下面的视频所示。
RJ45 PoE 连接器
M12 PoE 连接器
请确保正确拧紧连接器——无论是 RJ45 PoE 摄像头的以太网接头,还是 M12 连接器——以形成良好的密封。这可确保设备 符合其 IP 等级
DepthAI 库将在同一个 局域网 中查找所有可用设备。如果摄像头 不在同一个局域网中,您可以手动指定设备的 IP 地址。如果 DHCP 服务器不可用,摄像头将回退到静态 IP 169.254.1.222测试设备的最佳方法是运行 OAK Viewer。它是一个 GUI 应用程序,可让您通过实时可视化输出来轻松评估摄像头。如果它能找到设备并开始传输帧,则表示连接正常工作。

调试

如果您收到类似 RuntimeError: No available devices 的错误,则表示 DepthAI 在同一子网中找不到任何 PoE 设备。请确保摄像头已通电并连接到 与您的计算机相同的网络。请参阅下面的选项卡以获取调试步骤。我们建议在进行任何故障排除之前使用最新版本的 depthai

Different Subnet

DepthAI 库仅在同一子网内搜索可用的 OAK PoE 摄像头。您仍然可以 ping 该摄像头,但自动发现功能将找不到该设备。 如果摄像头不在同一子网中,您可以手动指定设备的 IP 地址,如下面的代码所示。

Python

Py
1import depthai as dai
2pipeline = dai.Pipeline()
3# ... 填充 pipeline ...
4
5# 定义设备的 IP 地址
6device_info = dai.DeviceInfo("169.254.1.222")
7
8with dai.Device(device_info) as device:
9    # 定义队列,获取消息...

C++

C++
1#include "depthai/depthai.hpp"
2
3int main(int argc, char** argv) {
4    dai::Pipeline pipeline;
5    // ... 填充 pipeline ...
6
7    // 定义设备的 IP 地址
8    auto deviceInfo = dai::DeviceInfo("169.254.1.222");
9
10    dai::Device device(deviceInfo);
11
12    // 定义队列,获取消息...
13    return 0;
14}

Multiple interfaces

当使用 PoE 设备连接到同时连接了 WiFi 和以太网的 PC 时,需要调整网络路由以避免连接问题。 一个常见的问题是系统会重复检测到同一个 PoE 设备,导致初始化错误 RuntimeError: Failed to find device after booting, error message: X_LINK_DEVICE_NOT_FOUND)。快速修复:断开 WiFi 连接以防止重复设备发现。您也可以手动配置网络路由,以确保 DepthAI 设备通过 PoE 进行通信,同时通过 WiFi 保持互联网访问:

Windows

  1. 打开命令提示符:按 Win + R,键入 cmd,然后按 Enter 打开命令提示符。
  2. 识别网络适配器:键入 ipconfig 并按 Enter。记下您的网络适配器名称(例如,以太网、Wi-Fi)及其 IP 地址。
  3. 添加路由
    • 使用 route 命令为 DepthAI 设备添加持久路由。通用格式为:route -p ADD [DepthAI-IP] MASK [Subnet-Mask] [Adapter-Gateway-IP]
    • [DepthAI-IP] 替换为您的 DepthAI 设备的 IP 地址,[Subnet-Mask] 替换为适当的子网掩码,[Adapter-Gateway-IP] 替换为您希望用于 DepthAI 通信的适配器的网关 IP。
  4. 验证路由:添加路由后,可以通过键入 route print 并按 Enter 来验证。

Linux

  1. 打开终端:您可以在应用程序菜单中找到终端应用程序,或使用快捷键 Ctrl + Alt + T
  2. 识别网络接口:键入 ip addr 并按 Enter。记下您的网络接口名称(例如,以太网为 eth0,Wi-Fi 为 wlan0)。
  3. 添加路由
    • 使用 ip route 命令为 DepthAI 设备添加路由:sudo ip route add [DepthAI-IP]/24 via [Adapter-Gateway-IP] dev [Network-Interface]
    • [DepthAI-IP] 替换为您的 DepthAI 设备的 IP 地址(确保掩码 24 正确),[Adapter-Gateway-IP] 替换为您希望用于 DepthAI 通信的适配器的网关 IP,[Network-Interface] 替换为网络接口的名称。
  4. 验证路由:可以通过键入 ip route show 并按 Enter 来检查路由。
请确保将括号中的值替换为您系统中的相应值。DepthAI 设备(在未连接 DHCP 服务器时)的默认设置在上面的 无 DHCP 面板中指定。有关路由/使路由持久化的更多信息,请参见:WindowsmacOSUbuntu

macOS

  1. 打开终端:您可以在“实用工具”下的“应用程序”中找到终端,或使用 Spotlight 搜索它。
  2. 识别网络接口:键入 ifconfig 并按 Enter。记下您的网络接口名称(例如,以太网为 en0,Wi-Fi 为 en1)。
  3. 添加路由
    • 网络设置 -> 设置服务顺序 中,将用于 DepthAI 的接口拖到列表底部。
    • 将相关流量定向到 DepthAI 适配器:sudo route add -net 169.254 -interface [dongle-interface]
    • [dongle-interface] 替换为 DepthAI 网络接口。

No DHCP

默认情况下,PoE 设备会尝试从 DHCP 服务器获取动态 IP 地址。但是,如果网络中没有 DHCP 服务器, 设备将回退到其静态 IP 169.254.1.222。在这种情况下,您可以:
  1. 将交换机连接到路由器,以从 DHCP 服务器获取动态 IP 地址。
  2. 设置您的计算机的静态 IP(例如 169.254.1.10,子网掩码:255.255.0.0),使其与 PoE 设备位于同一子网中,然后连接到您的设备。
  3. 连接到设备时手动指定设备 IP 地址,您可以使用 IP 地址或 MxId:

Python

Py
1import depthai as dai
2pipeline = dai.Pipeline()
3# ... Populate pipeline ...
4device_info = dai.DeviceInfo("169.254.1.222")
5# device_info = depthai.DeviceInfo("14442C108144F1D000") # MXID
6# device_info = depthai.DeviceInfo("3.3.3") # USB port name
7
8with dai.Device(device_info) as device:
9    # Define queues, get messages...

C++

C++
1#include "depthai/depthai.hpp"
2int main(int argc, char** argv) {
3    dai::Pipeline pipeline;
4    // ... Populate pipeline ...
5    auto deviceInfo = dai::DeviceInfo("169.254.1.222");
6    // auto deviceInfo = dai::DeviceInfo("14442C108144F1D000");
7    // auto deviceInfo = dai::DeviceInfo("3.3.3");
8    dai::Device device(deviceInfo);
9    // Define queues, get messages...
10    return 0;
11}

Firewall

设备发现的 UDP 流量通过端口 11491 处理,TCP XLink 连接通过端口 11490 处理。在 Ubuntu 上,防火墙默认是禁用的,因此您应该不会遇到任何问题。您可以通过执行以下命令来检查:
Command Line
1> sudo ufw status
2Status: inactive
如果您的防火墙已启用,您可能需要允许这两个端口:
Command Line
1sudo ufw allow 11490/tcp
2sudo ufw allow 11491/udp
我们注意到上述规则并不总是按预期工作,有时需要运行以下命令。对于生产环境,您应该为 OAK PoE 摄像头设置静态 IP,否则 IP 地址可能会更改,您需要重新设置防火墙规则。
Command Line
1ufw allow from [OAK_POE_IP]

Network equipment

我们注意到,在使用某些网络设备时,我们默认的 连接 POE 设备 15 秒超时 时间不足,需要增加。您可以通过设置环境变量来增加超时时间(值为毫秒)。

Windows Powershell

Command Line
1$env:DEPTHAI_WATCHDOG_INITIAL_DELAY=60000
2$env:DEPTHAI_BOOTUP_TIMEOUT=60000
3python3 script.py

Linux/macOS

Command Line
1DEPTHAI_WATCHDOG_INITIAL_DELAY=60000 DEPTHAI_BOOTUP_TIMEOUT=60000 python3 script.py

Windows CMD

Command Line
1set DEPTHAI_WATCHDOG_INITIAL_DELAY=60000
2set DEPTHAI_BOOTUP_TIMEOUT=60000
3python3 script.py

VPN

VPN 连接也可能中断与 PoE 设备的连接(因为您的计算机可能只搜索远程网络中的设备,因此无法在本地网络中发现它),因此我们建议在使用 PoE 设备时关闭 VPN,或者确保您的本地路由设置正确,以便在 VPN 连接处于活动状态时可以使用/发现本地设备。
成功连接到设备并上传管道后,连接应稳定,延迟应很小(低于 1 秒),带宽应为 700 Mbps。

调试

Connection drop

如果连接在一段时间后中断,可能有几个潜在问题导致此现象。

Network issue

由于网络和网络设备的原因,OAK PoE 摄像头在正常运行一段时间(几小时或几天)后可能会中断连接。针对此问题,有 3 种潜在的解决方案/变通方法:
  1. 降低网络负载,以避免连接中断。可以通过降低摄像头的 FPS 或降低摄像头的分辨率来实现。
  2. 自动重新连接,以防摄像头断开连接。我们有一个演示可以实现此功能。缺点是重新连接最多可能需要 30 秒。首先,看门狗必须启动并重置摄像头(约 5 秒)。然后,引导加载程序必须在摄像头上重启,使其再次可访问(约 5 秒)。最后,主机必须初始化新连接,并将固件、管道和所有资产(NN)传输到摄像头,以便它可以启动管道(应用程序)。我们有自动重连示例
  3. 独立模式(最佳解决方案);如果连接中断,主机可以轻松重新连接到运行在摄像头上的 TCP(示例在此)或 HTTP 服务器(示例在此),这只需要 <100 毫秒。如果发生任何崩溃(用户应用程序或固件),设备将在 <5 秒内自动重启。

Device crash

设备可能由于固件或用户应用程序中的错误而崩溃。如果固件错误或(用户定义的)管道出现问题,将生成一个 崩溃报告,您应将其发送给我们(support@luxonis.com)。如果在运行上述链接脚本时未找到崩溃报告,则表示是电源问题、连接中断(或不太可能发生的硬件问题)。或者,使用 depthai 2.28.0,默认启用了自动崩溃报告生成。这将把崩溃报告发送到 Luxonis 服务器,并包含:
  • 崩溃转储本身
  • 管道配置
  • depthai 版本
  • 主机操作系统版本(MacOS/Linux/Windows)
包含任何用户数据、图像或 NN 模型。但它确实包含 Script 节点代码。如果您想禁用自动崩溃报告生成,可以通过将环境变量 DEPTHAI_DISABLE_CRASHDUMP_COLLECTION 设置为 1 来实现。

Power issue

如果您的 PoE 设备无法工作,或者在某些罕见情况下,工作一段时间后突然停止工作,可能是您的 PoE 交换机/注入器存在问题。例如,当每端口的功率预算似乎足够时,但由于其他端口设备的需求,交换机的总功率预算被超出。 检查您的 PoE 交换机/注入器相对于其总功率预算的规格是值得的。

High CPU usage

如果 PoE 设备的 CPU 持续在 100% 左右(在 LeonOS 核心上),那么设备很可能会或早或晚中断连接并抛出类似 ping was missed, closing the device connection 的错误。 您可以在此文档中了解有关设备 CPU 使用率(以及如何调试它)的更多信息。

Low speed / High latency

如果您注意到 FPS 低或消息延迟高,则应检查以下几项:
  1. PoE 连接测试 - 您应该获得 1000 (Mbps) 的速度。如果为 100,则可能意味着您使用的是慢速网络设备(见下文)
  2. OAK 带宽测试 - 应该在 800/200 Mbps 左右
  3. OAK 延迟测试 - 应该低于 10ms,但这取决于您的网络
如果您获得的带宽/延迟低于预期,则应检查下面的调试步骤。我们还有非 PoE 相关的 低延迟文档

慢速网络设备

如果您的 PoE 连接速度低于 1000 Mbps,您的设置中可能存在瓶颈:
  • 以太网线缆:使用 Cat5e 或更高版本。虽然 Cat5e 支持 1 Gbps,但 Cat5 仅限于 100 Mbps。也可能是您的线缆已损坏,只有 2 对在工作(最高 100Mbps)
  • PoE 交换机:确保其支持 1 Gbps 速度。此类交换机通常标有 10/100/1000 Mbps。
  • 路由器:如果适用,请确保其能够处理 1 Gbps。某些路由器可能只有部分端口支持此功能。
  • PoE 注入器:确保其支持 1 Gbps。某些型号仅限于 100 Mbps。
  • 线缆长度:将以太网线缆保持在 100 米(328 英尺)以内。对于更长的距离,请使用 PoE 扩展器。
  • 主机网卡:确保其支持 1 Gbps。旧卡可能最高支持 100 Mbps。如有必要,请升级您的网卡。
请勿使用 WiFi 连接到 PoE 设备。WiFi 不适合高带宽应用,很可能会导致瓶颈。 如果必须使用,请使用支持至少 1 Gbps 的 WiFi 标准,例如 802.11ac (WiFi 5)、802.11ax (WiFi 6) 或 802.11ay (WiFi 6E)。请注意,带宽会随着路由器和主机之间的距离和障碍物而减小。

NIC 设置

Linux 上的一些默认网卡 (NIC) 设置可能不适合与 OAK POE 相机通信,这可能导致 FPS 慢、延迟高和/或 OAK CPU 使用率高。您可以使用 ethtool 配置这些设置。
ethtool 设置为我们提供了更好的性能在一种情况下,配置 sudo ethtool -C NAME rx-usecs 1022(其中 NAME 为 enp59s0f1)将 FPS 从 12 提高到 20。

高级网络设置

对于更高级的用户,我们公开了一些网络设置,允许您微调系统以获得更好的性能。 您可以使用设备配置对象进行配置。有关 RVC2sysctl 配置,请参阅 此处提供的设置 (请注意,某些设置是 只读 的,有些可能会 导致系统崩溃)。 有关 sysctl 设置的更多信息,请参阅 FreeBSD 文档 (12.0)。
Py
1config = dai.Device.Config()
2config.board.network.mtu = 9000 # Jumbo 帧。默认 1500
3config.board.network.xlinkTcpNoDelay = False # 默认 True
4config.board.network.sysctl.append("net.inet.tcp.delayed_ack=1") # 配置 sysctl 设置。默认为 0。
5
6with dai.Device(config) as device:
7    # 您的代码在此处

PoE 扩展器

我们已使用此 PoE 扩展器测试了供电/通信。它是一个 1 Gbps 扩展器,支持 PoE+ (30W) 并 具有 2 个 PoE (15W) 输出端口,因此您可以连接两个 OAK PoE 摄像头。
我们能够同时从两个设备流式传输视频。

WiFi 桥接器

将 PoE 设备连接到网络的选项之一是使用 WiFi 桥接器。当您没有 PoE 交换机或注入器但有 WiFi 网络可用时,这很有用。 桥接器将连接到 WiFi 网络,并为您的 OAK PoE 设备提供以太网端口(连接性)。我们已测试Vonets WiFi Bridge,其工作正常。您首先需要连接到 WiFi 桥接器(例如,通过手机)并将其配置为连接到您的 WiFi 网络。然后,您可以将 OAK PoE 设备(通过 PoE 注入器)连接到桥接器。
此 WiFi 桥接器支持 5V 供电,您可以使用 USB-A 连接器(我们将其连接到移动电源)或标准圆筒连接器。

使用 OAK 进行视频流传输

由于 OAK PoE 摄像头已连接到网络,因此它可以直接将视频流传输到计算机。以下是一些使用 Script 节点(仅支持 OAK PoE 摄像头)的视频流演示,可以在独立模式下运行:以下是一些通过 XLink 将视频流从 OAK 摄像头传输到主机计算机,然后从主机计算机流式传输到另一台计算机/服务器的演示,这些演示也适用于任何其他 OAK 摄像头(包括 USB OAK 设备):

出厂重置

如果设备可以 ping 通但无法以任何方式连接(例如搜索设备、指定 IP),则应执行恢复出厂设置,因为设备可能已软砖化。这通常发生在较旧的引导加载程序版本上。请注意,只有 OAK-D-PoE 和 OAK-1-PoE 具有 USB-C 连接器,而 OAK-D Pro PoE 通过 M8 连接器提供 USB 连接。

Series 1 PoE 设备

以下步骤适用于 OAK-D PoEOAK-1 PoE 设备。
  1. 打开 OAK PoE 相机的外壳。
  2. 找到 USB-C 连接器和引导 DIP 开关。
  3. 将 DIP 开关更改为 0x16(开关 2、4、5 向上,其他向下,如下图所示)以进行 USB 通信。
  4. 通过 USB-C 线缆将 OAK PoE 相机连接到计算机。
  5. 运行(第一个)恢复出厂设置脚本
  6. 将 DIP 开关改回 0x3(开关 5、6 向上,其他向下)以进行 PoE 通信。
  7. 重新装上外壳,确保密封圈放置正确(用于防水)。

Series 2 PoE 设备 (M8 连接器)

由于 S2 OAK PoE 设备外壳上没有物理按钮(这是其 IP 等级的结果),因此需要使用编程板来重新刷新 PoE 设备的固件。 当设备的静态 IP 设置为不同子网且无法访问时,这一点尤其有用。您需要 OAK 编程板 来重新刷新固件并 将设备恢复到其默认设置。
步骤:
  1. 将编程板连接到 OAK POE 设备的 M8 连接器。请确保 方向正确(如下图所示),以避免损坏 M8 连接器。 编程板连接器不会拧紧或锁定在 POE 连接器上,因此在刷新过程中必须小心, 确保连接器不会从插座中脱落。
  2. 在将编程板连接到主机端口(您将从中刷新固件的设备)的同时,按住编程板上的恢复按钮。连接正确时,编程板上的 LED 应该会亮起。当编程板与 主机计算机连接时,您可以松开恢复按钮。
  3. 连接后,您应该能够在主机 计算机上发现您的 PoE 设备。
  4. 您现在可以像处理其他 OAK 设备一样,使用 设备管理器 工具来重新刷新固件, 该工具为多种操作系统提供了图形用户界面。该工具包含一个“恢复出厂设置”选项,允许您 将 Series 2 OAK PoE 设备恢复到其默认设置。
成功部署设备后,您可以使用以下资源进一步了解软件生态系统:
  1. 软件文档
  2. DepthAI 代码示例