OAK PoE 部署指南
OAK PoE 部署指南
您需要一个 PoE 交换机或注入器来为 PoE 设备供电(请参阅 为 PoE 设备供电)。为设备供电后,交换机/注入器上的电源 LED 应亮起,如下面的视频所示。
RJ45 PoE 连接器
M12 PoE 连接器


请确保正确拧紧连接器 ——无论是 RJ45 PoE 摄像头的以太网接头,还是 M12 连接器——以形成良好的密封。这可确保设备 符合其 IP 等级。
线缆直径
RJ45 PoE 摄像头的以太网线缆直径应在 5 毫米至 7 毫米之间,以适合接头。直径过大将无法安装,直径过小则无法正确密封。
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
- 打开命令提示符:按
Win + R,键入cmd,然后按 Enter 打开命令提示符。 - 识别网络适配器:键入
ipconfig并按 Enter。记下您的网络适配器名称(例如,以太网、Wi-Fi)及其 IP 地址。 - 添加路由:
- 使用
route命令为 DepthAI 设备添加持久路由。通用格式为:route -p ADD [DepthAI-IP] MASK [Subnet-Mask] [Adapter-Gateway-IP]。 - 将
[DepthAI-IP]替换为您的 DepthAI 设备的 IP 地址,[Subnet-Mask]替换为适当的子网掩码,[Adapter-Gateway-IP]替换为您希望用于 DepthAI 通信的适配器的网关 IP。
- 使用
- 验证路由:添加路由后,可以通过键入
route print并按 Enter 来验证。
Linux
- 打开终端:您可以在应用程序菜单中找到终端应用程序,或使用快捷键
Ctrl + Alt + T。 - 识别网络接口:键入
ip addr并按 Enter。记下您的网络接口名称(例如,以太网为eth0,Wi-Fi 为wlan0)。 - 添加路由:
- 使用
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]替换为网络接口的名称。
- 使用
- 验证路由:可以通过键入
ip route show并按 Enter 来检查路由。
macOS
- 打开终端:您可以在“实用工具”下的“应用程序”中找到终端,或使用 Spotlight 搜索它。
- 识别网络接口:键入
ifconfig并按 Enter。记下您的网络接口名称(例如,以太网为en0,Wi-Fi 为en1)。 - 添加路由:
- 在 网络设置 -> 设置服务顺序 中,将用于 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。在这种情况下,您可以:- 将交换机连接到路由器,以从 DHCP 服务器获取动态 IP 地址。
- 设置您的计算机的静态 IP(例如
169.254.1.10,子网掩码:255.255.0.0),使其与 PoE 设备位于同一子网中,然后连接到您的设备。 - 连接到设备时手动指定设备 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}多个设备
如果您使用多个 PoE 设备,选项 2 和 3 将不起作用,因为所有设备都将尝试使用相同的 IP 地址。在这种情况下,您需要为 PoE 设备分配静态 IP 地址,请参阅 设置静态 IP。
Firewall
设备发现的 UDP 流量通过端口 如果您的防火墙已启用,您可能需要允许这两个端口:我们注意到上述规则并不总是按预期工作,有时需要运行以下命令。对于生产环境,您应该为 OAK PoE 摄像头设置静态 IP,否则 IP 地址可能会更改,您需要重新设置防火墙规则。
11491 处理,TCP XLink 连接通过端口 11490 处理。在 Ubuntu 上,防火墙默认是禁用的,因此您应该不会遇到任何问题。您可以通过执行以下命令来检查:Command Line
1> sudo ufw status
2Status: inactiveCommand Line
1sudo ufw allow 11490/tcp
2sudo ufw allow 11491/udpCommand 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.pyLinux/macOS
Command Line
1DEPTHAI_WATCHDOG_INITIAL_DELAY=60000 DEPTHAI_BOOTUP_TIMEOUT=60000 python3 script.pyWindows CMD
Command Line
1set DEPTHAI_WATCHDOG_INITIAL_DELAY=60000
2set DEPTHAI_BOOTUP_TIMEOUT=60000
3python3 script.pyVPN
VPN 连接也可能中断与 PoE 设备的连接(因为您的计算机可能只搜索远程网络中的设备,因此无法在本地网络中发现它),因此我们建议在使用 PoE 设备时关闭 VPN,或者确保您的本地路由设置正确,以便在 VPN 连接处于活动状态时可以使用/发现本地设备。
成功连接到设备并上传管道后,连接应稳定,延迟应很小(低于 1 秒),带宽应为 700 Mbps。
调试
Connection drop
如果连接在一段时间后中断,可能有几个潜在问题导致此现象。
Network issue
由于网络和网络设备的原因,OAK PoE 摄像头在正常运行一段时间(几小时或几天)后可能会中断连接。针对此问题,有 3 种潜在的解决方案/变通方法:
- 降低网络负载,以避免连接中断。可以通过降低摄像头的 FPS 或降低摄像头的分辨率来实现。
- 自动重新连接,以防摄像头断开连接。我们有一个演示可以实现此功能。缺点是重新连接最多可能需要 30 秒。首先,看门狗必须启动并重置摄像头(约 5 秒)。然后,引导加载程序必须在摄像头上重启,使其再次可访问(约 5 秒)。最后,主机必须初始化新连接,并将固件、管道和所有资产(NN)传输到摄像头,以便它可以启动管道(应用程序)。我们有自动重连示例。
- 独立模式(最佳解决方案);如果连接中断,主机可以轻松重新连接到运行在摄像头上的 TCP (示例在此)或 HTTP 服务器(示例在此),这只需要 <100 毫秒。如果发生任何崩溃(用户应用程序或固件),设备将在 <5 秒内自动重启。
Device crash
设备可能由于固件或用户应用程序中的错误而崩溃。如果固件错误或(用户定义的)管道出现问题,将生成一个 崩溃报告,您应将其发送给我们(support@luxonis.com)。如果在运行上述链接脚本时未找到崩溃报告,则表示是电源问题、连接中断(或不太可能发生的硬件问题)。或者,使用 depthai 2.28.0,默认启用了自动崩溃报告生成。这将把崩溃报告发送到 Luxonis 服务器,并包含:
使用最新的引导加载程序/DepthAI!
请确保您使用的是最新的 DepthAI 版本,并且设备上已刷入最新的 引导加载程序,因为最新版本可能已修复了一些错误。
- 崩溃转储本身
- 管道配置
- depthai 版本
- 主机操作系统版本(MacOS/Linux/Windows)
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 使用率(以及如何调试它)的更多信息。