OAK PoE 部署指南

以太网供电 (PoE) 允许使用以太网线缆同时为设备供电并提供连接,支持 1 Gbps 全双工带宽,最远传输距离可达 100 米(328 英尺)。
您需要一个 PoE 交换机或供电模块来为 PoE 设备供电(请参阅给 PoE 设备供电)。给设备供电后,交换机/供电模块上的电源指示灯应亮起,如下方视频所示。
RJ45 PoE 连接器
M12 PoE 连接器
确保拧紧连接器——无论是 RJ45 PoE 摄像头的以太网电缆接头,还是 M12 连接器——以形成良好的密封。这能确保设备达到其 IP 防护等级
DepthAI 库会查找同一 LAN 内的所有可用设备。如果摄像头不在同一 LAN 中,您可以手动指定设备的 IP 地址。如果没有 DHCP 服务器,摄像头会回退到静态 IP 169.254.1.222测试设备的最佳方法是运行 OAK 查看器。这是一个图形界面应用程序,可通过实时可视化输出来轻松评估摄像头。如果它找到了设备并开始流式传输帧,则说明连接正常。

调试

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

Different Subnet

DepthAI 库仅在同一子网内搜索可用的 OAK PoE 相机。您仍然可以 ping 相机,但自动发现功能不会找到设备。如果相机不在同一子网,可以手动指定设备 IP,如下代码所示。

Python

Py
1import depthai as dai
2pipeline = dai.Pipeline()
3# ... Populate pipeline ...
4
5# 定义设备的 IP 地址
6device_info = dai.DeviceInfo("169.254.1.222")
7
8with dai.Device(device_info) as device:
9    # Define queues, get messages...

C++

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

Multiple interfaces

当使用PoE设备且PC同时连接到WiFi和以太网时,需要调整网络路由以避免连接问题。 一个常见问题是系统检测到同一个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面板中指定。有关路由/使路由持久化的更多信息,请参见: Windows, macOS, Ubuntu

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

By default, PoE devices will try to get a dynamic IP address from DHCP server. However, if there's no DHCP server on the network, devices will fall back to their static IP 169.254.1.222. In this case, you can either:
  1. Connect the switch to a router, to get a dynamic IP address from the DHCP server.
  2. Set static IP of your computer (eg. 169.254.1.10, netmask: 255.255.0.0) to be in the same subnet as the PoE device, and then connect to your device.
  3. Manually specify device IP address when connect to it, you can use either IP address or 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 连接使用端口 11490Ubuntu 默认情况下防火墙是禁用的,因此您通常不会遇到问题。不过,您可以通过执行以下命令来检查:
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

我们注意到,对于某些网络设备,默认的15秒连接超时对于PoE设备来说不够,需要增加。您可以通过使用环境变量(单位:毫秒)来增加超时时间。

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摄像头在正常运行几小时或几天后可能会断开连接。针对此问题有2种潜在的解决方案/变通方法:
  1. 降低网络负载,以避免连接断开。可通过降低摄像头的FPS或分辨率来实现。
  2. 自动重连,当摄像头断开连接时自动重新连接。我们有一个演示示例可以实现此功能。缺点是重连可能需要约30秒。首先,看门狗需要触发并重置摄像头(约5秒)。然后,引导加载程序需要在摄像头上重新启动,使其再次可访问(约5秒)。最后,主机计算机需要初始化新连接,并将固件、流水线和所有资产(NNs)传输到摄像头,以便启动流水线(应用程序)。我们有一个自动重连示例

Device crash

设备可能因固件或用户应用程序中的错误而崩溃。如果存在固件错误或(用户定义的)流水线问题,将会生成崩溃报告,您应将其发送给我们(support@luxonis.com)。如果在运行上述脚本时未发现崩溃报告,则说明可能是电源问题、连接断开(或者可能性较小的硬件问题)。另外,从depthai 2.28.0开始,默认启用自动崩溃报告生成。这将把崩溃报告发送到Luxonis服务器,内容包括:
  • 崩溃转储本身
  • 流水线配置
  • depthai版本
  • 主机操作系统版本(MacOS/Linux/Windows)
报告包含任何用户数据、图像或NN模型。但确实包含脚本节点代码。如果您希望禁用自动崩溃报告生成,可以通过将环境变量DEPTHAI_DISABLE_CRASHDUMP_COLLECTION设置为1来实现。

Power issue

如果您的PoE设备无法工作,或者在极少数情况下,它工作一段时间后突然停止工作,可能是PoE交换机/供电器的问题。例如,当每个端口的功率预算看似足够,但由于其他端口上设备的需求,导致交换机的总功率预算被超出。建议检查您的PoE交换机/供电器的规格,特别是其总功率预算。

High CPU usage

如果PoE设备的CPU(在LeonOS核心上)持续接近100%,那么设备很可能迟早会断开连接,并抛出类似“ping丢失,正在关闭设备连接”的错误。您可以在此文档中阅读更多关于设备CPU使用率(以及如何调试)的信息。

Low speed / High latency

If you noticed low FPS or high message latency you should check the following:
  1. PoE Link test - You should get speed 1000 (Mbps). If it's 100, it likely means you are using Slow networking equipment (see below)
  2. OAK bandwidth test - Should be around 800/200 Mbps
  3. OAK Latency test - Should be below 10ms, but it depends on your network
If you get lower bandwidth/latency as expected, you should check debugging steps below. We also have non-PoE-related Low Latency documentation.

Slow networking equipment

If your PoE link speed is below 1000 Mbps, there may be a bottleneck in your setup:
  • Ethernet Cable: Use Cat5e or higher. While Cat5e supports 1 Gbps, Cat5 is limited to 100 Mbps. It might also be that your cable is damaged, and only 2 pairs are working (up to 100Mbps)
  • PoE Switch: Ensure it supports 1 Gbps speeds. Such switches are usually labeled 10/100/1000 Mbps.
  • Router: If applicable, ensure it can handle 1 Gbps. Some routers might have limited ports with this capability.
  • PoE Injector: Ensure it supports 1 Gbps. Some models are limited to 100 Mbps.
  • Cable Length: Keep your Ethernet cable under 100 meters (328 feet). For longer distances, use a PoE extender.
  • Host Network Card: Ensure it supports 1 Gbps. Older cards might be capped at 100 Mbps. If necessary, upgrade your network card.
Do not use WiFi to connect to the PoE device. WiFi is not designed for high bandwidth applications, and will likely result in a bottleneck. If you must use it, use WiFi standards supporting at least 1 Gbps such as 802.11ac (WiFi 5), 802.11ax (WiFi 6), or 802.11ay (WiFi 6E). Note that bandwidth diminishes with distance and obstructions between the router and host.

NIC settings

Some default Network Interface Card (NIC) settings on Linux might not be ideal for communication with OAK POE cameras, which can result in slow FPS, high latency, and/or high OAK CPU usage. You can use ethtool to configure these settings.
ethtool settings that provided better performance for usIn one case configuring sudo ethtool -C NAME rx-usecs 1022 (where NAME was enp59s0f1) improved FPS from 12 to 20.

Advance network settings

For more advance users we have exposed some network settings that allows you to fine-tune the system for better performance. You can configure them with the device config object.For RVC2 sysctl configuration, see available settings here (note that some settings are read-only, and some might crash the system). Please refer to FreeBSD's documentation (12.0) for more information on sysctl settings.
Py
1config = dai.Device.Config()
2config.board.network.mtu = 9000 # Jumbo frames. Default 1500
3config.board.network.xlinkTcpNoDelay = False # Default True
4config.board.sysctl.append("net.inet.tcp.delayed_ack=1") # configure sysctl settings. 0 by default.
5
6with dai.Device(config) as device:
7    # Your code here

PoE 延长器

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

WiFi 桥接器

将 PoE 设备连接到网络的一种方式是使用 WiFi 桥接器。当您没有 PoE 交换机或供电模块,但有可用 WiFi 网络时,这会很有用。桥接器将连接到 WiFi 网络,并为您的 OAK PoE 设备提供以太网端口(连接)。我们测试了 Vonets WiFi 桥接器,效果符合预期。您首先需要连接到 WiFi 桥接器(例如通过手机)并将其配置为连接您的 WiFi 网络。然后,您可以通过 PoE 供电模块将 OAK PoE 设备连接到桥接器。
该 WiFi 桥接器支持 5V 供电,您可以使用 USB-A 接口(我们将其连接到了移动电源)或标准桶形接口进行供电。

使用 OAK 进行视频流传输

由于 OAK PoE 摄像头已连接到网络,它可以直接将视频流传输到计算机。以下是使用 OAK PoE 摄像头上的 Script 节点进行视频流传输的演示:以下演示是通过 XLink 将视频流从 OAK 摄像头传输到主机计算机,然后从主机计算机传输到另一台计算机/服务器,同样适用于任何其他 OAK 摄像头(甚至 USB OAK 设备):

恢复出厂设置

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

Series 1 PoE devices

以下步骤适用于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 devices (M8 connector)

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