OAK POE系列产品上手指南
今天来给大家介绍一下 OAK PoE 系列产品的使用及注意事项。
PS: 设置静态IP时网段要避免与已有网段重合
▌OAK-PoE 简介
PoE 允许使用单根 Cat5e(或更高)以太网电缆为设备供电并为其提供高达 100 米(328 英尺)1000 Mbps (1Gbps) 全双工连接。
▌使用前的准备工作
- 你需要一台千兆 PoE 交换机来为 PoE 设备供电。最好是支持 DHCP 服务器,这样当你需要动态分配 IP 时,就不需要额外使用一根网线连接路由器了。
在链接交换机时有一点需要注意,看下图。
- 如果你为挑选一款好的 PoE 交换机而感到烦恼。我们推荐使用 PoE POWER Supply,48V 的 PoE 供电模块。
PoE 电源 48VPoE 供电模块,千兆网络,48V 供电,大于 10W 功率,给 OAK 的 PoE 相机供电,同时将 OAK 相机的 PoE 网络接口转换成普通网络接口。
只需要将它的两个网口分别连接主机和我们的 OAK-PoE 设备,然后插到电源上即可。
例如下面这款(需要的话可联系我们淘宝店客服,数量不多卖完即止):
- 如果你需要在户外使用,推荐使用车载直流供电。
- 安装依赖:
运行 OAK-PoE 设备需要 depthai 库大于等于 2.7.0.0 版本。直接安装最新版本即可。
python3 -m pip install -U "depthai>2.7.0.0"
▌设置主机静态 IP
如果你的 PoE 交换机不支持 DHCP 服务器。你需要设置主机的静态 IP,以保证主机和 OAK 设备在同一个局域网内。
所有 PoE 设备出厂默认设置:静态 IP 为 169.254.1.222
,子网掩码为 255.255.0.0
。所以我们需要将主机 IP 设置为与设备同一网段,子网掩码设为相同。
例如:将静态 IP 设置为 169.254.1.10
,子网掩码设置为 255.255.0.0
。
PS: 子网掩码一定要设置正确!!
OAK POE:
ip addr: 169.254.1.222
netmask: 255.255.0.0
PC:
ip addr: 169.254.1.10
netmask: 255.255.0.0
可以使用以下命令设置:
▌Windows
▌Linux
sudo ifconfig eth0 169.254.1.10 netmask 255.255.0.0 up
▌设置防火墙
Linux 系统上有一种情况即使分配好了 IP 地址,主机与 OAK 设备同属于一个网段。还是出现找不到设备的错误。这有可能是防火墙阻止的连接。
我们可以使用 iptabels 工具查看防火墙规则表:
iptables -L -n --line-numbers
如果看到 reject-with icmp-port-unreachable
规则,则很有可能是它阻止了连接。
我们可以删除此条规则:
sudo iptables -D <规则链名> <规则序号>
也可以直接清空所有规则:
sudo iptables -F
PS: 不用担心破坏了防火墙规则,此命令为当时生效重启即恢复原样。
WIndows 系统上没有防火墙问题。
▌设置 OAK-PoE 静态 IP
- 首先我们需要主机能够先找到 PoE 设备。
- 然后通过代码刷写新的 IP。
设置设备 IP 的示例代码可以在此处找到。
查看设备 Bootloader 版本
查看代码地址
如果 Version 低于 0.0.14,则需要更新 Bootloader 版本。
更新 Bootloader 版本
查看代码地址
由于我手中的设备已经是最新版本,所以没有任何更新信息。
设置静态 IP
查看代码地址
可以看到上图中,运行 depthai-demo.py
程序,设备 IP 已经显示为 192.168.1.201
。
PS: 设备和主机依然要保存在同一网段,子网掩码相同。
OAK PoE:
ip addr: 192.168.1.201
netmask: 255.255.255.0
PC:
ip addr: 192.168.1.10
netmask: 255.255.255.0
设备设置静态 IP 需要注意的问题
在设备被设置了静态 IP 后,路由器或支持 DHCP 服务器的 PoE 交换机的自动分配 IP 功能将失效。设备不再接收分配的 IP,会出现找不到设备的情况。
清除配置
可以通过清除刚才的配置,相当于恢复出厂设置。
默认 IP 情况:
OAK PoE:
ip addr: 169.254.1.222
netmask: 255.255.0.0
PC:
ip addr: 169.254.1.10
netmask: 255.255.0.0
自动分配 IP 的情况:
OAK PoE:
DHCP
PC:
DHCP
▌演示
与 USB-C 设备同样的方法使用。当你的程序尝试连接设备时,depthai 库将搜索通过 USB 端口或 LAN 连接的可用设备。
python depthai-demo.py -gt cv
▌OAK-PoE 设备故障排查详解
在进行任何类型的故障排除之前,我们建议尝试使用最新版本 depthai。
No DepthAI devices found! 无可用设备
如果你遇到这个错误,意味着 depthai 在同一个网络上没有找到任何 OAK PoE 相机。请确定相机已打开并与电脑连接在同一个网络上。几个可能:
- 如果你正在使用 DHCP 服务器,可以在 DHCP 服务器仪表盘上查看 logs/connected devices,查看相机是否已连接及其 IP 地址。
- 如果没有 DHCP,相机将退回到静态 IP(参见DHCP 和静态 IP)。
- 当你知道相机的 IP 并能 ping 通它时,参见我可以 ping 通 OAK PoE 相机,但无法连接到它。
我可以 ping 通 OAK PoE 相机,但无法连接到它
DepthAI 库仅在同一局域网内搜索可用的 OAK PoE 相机,如果你的相机和主机不在同一个局域网中,你需要手动指定相机的 IP 地址以便进行连接。你可以使用 DepthAI 库提供的相关函数来手动指定相机的 IP 地址。
需要注意的是,为了确保与相机的兼容性,你需要确保相机的 bootloader 版本不低于
0.0.18
。你可以使用 OAK 设备管理器来检查相机的bootloader 版本,并根据需要升级相机的bootloader 版本。
import cv2
import depthai as dai
pipeline = dai.Pipeline()
camRgb = pipeline.createColorCamera()
xoutRgb = pipeline.createXLinkOut()
xoutRgb.setStreamName("rgb")
camRgb.preview.link(xoutRgb.input)
device_info = dai.DeviceInfo("169.254.1.222") # IP
# device_info = depthai.DeviceInfo("14442C108144F1D000") # MXID
# device_info = depthai.DeviceInfo("3.3.3") # USB port name
with dai.Device(pipeline, device_info) as device:
qRgb = device.getOutputQueue(name="rgb", maxSize=4, blocking=False)
while True:
cv2.imshow("rgb", qRgb.get().getCvFrame())
if cv2.waitKey(1) == ord("q"):
break
DHCP 和静态 IP
默认情况下,PoE 设备会尝试从 DHCP 获取 IP 地址。如果网络上没有可用的 DHCP 服务器,设备将使用静态 IP 地址 169.254.1.222
, (子网掩码:255.255.0.0
)。在这种静态回退情况下,你的计算机需要设置在相同的 IP 地址范围内,否则将无法与设备进行通信。为了解决这个问题,你可以在计算机上设置一个静态 IP 地址(例如静态 IP:169.254.1.10
,子网掩码:255.255.0.0
),以确保计算机和 PoE 设备可以相互通信。如果需要连接多个 PoE 设备,你需要为每个设备设置唯一的静态 IP 地址,以避免冲突。
端口和防火墙
UDP 设备发现在端口上处理 11491
,TCP XLink 连接在端口上处理 11490
。
在 Ubuntu 上,默认情况下防火墙是禁用的,所以你应该不会有任何问题。你可以通过执行以下命令来检查这一点:
> sudo ufw status
Status: inactive
如果你启用了防火墙,你可能需要允许这两个端口:
sudo ufw allow 11490/tcp
sudo ufw allow 11491/udp
我们已经注意到,上述规则并不总是像预期的那样工作,有时有必要运行下面的命令。
在生产环境中,建议将 OAK PoE 设备的 IP 地址设置为静态 IP,以避免在重新连接时 IP 地址发生更改。如果 OAK PoE 设备使用动态 IP 地址,你可能需要重复设置防火墙规则来确保设备的连通性。
ufw allow from [OAK_PoE_IP]
VPN 连接
在使用 PoE 设备时,如果你同时使用 VPN 连接,可能会导致与该设备的连接中断。这是因为你的电脑可能只在远程网络中搜索该设备,无法在本地网络中找到它。因此,我们建议在使用 PoE 设备时关闭 VPN,或者确保你的本地路由设置为在 VPN 连接时本地设备可用。关闭 VPN 可以确保你可以直接访问本地网络中的设备,而在启用 VPN 时设置本地路由可以让你的电脑继续访问本地网络中的设备。
通过 2 个接口(WiFi/以太网)连接到同一个局域网
偶尔会出现这样的情况:程序可能会发现同一个 PoE 设备两次,并打印该设备的 IP 地址两次。
尽管这种情况很少见,但在某些情况下,例如使用多个设备时,可能会导致初始化错误,例如 RuntimeError: Failed to find device after booting, error message: X_LINK_DEVICE_NOT_FOUND
。我们正在尽快修复这个问题。暂时的解决方法是从其中一个接口断开连接,例如断开 WiFi 连接,从而避免设备被重复发现,减少出现初始化错误的可能性。
供电不足
如果你的 PoE 设备出现故障或突然停止工作,很可能是由于使用的 PoE 交换机/注入器存在问题。当每个端口的电力预算似乎足够,但由于其他端口上的设备需求而超出了交换机/注入器的总电力预算时,就会发生这种情况。此时,建议检查你使用的 PoE 交换机/注入器的规格说明,了解其总电力预算,并查看是否需要更换交换机/注入器或重新分配设备的端口,以确保电力预算不会超出范围。这样可以解决 PoE 设备无法正常工作的问题。
“特殊”网络设备
我们注意到,对于某些网络设备,我们默认的 15 秒连接超时时间不足,需要增加超时时间。你可以通过设置环境变量来增加超时时间(以毫秒为单位)。这可以帮助确保在连接到 PoE 设备时,有足够的时间来建立连接,从而避免连接超时导致的问题。要设置环境变量,请查看你使用的操作系统的相关文档,了解如何设置环境变量,并将变量设置为所需的超时时间(以毫秒为单位)。例如,如果你需要将超时时间设置为 30 秒,则需要将环境变量设置为 30000 毫秒。注意,增加超时时间可能会对连接的响应时间产生影响,因此你应该根据实际情况选择合适的超时时间。
- Linux/MacOS
export DEPTHAI_WATCHDOG_INITIAL_DELAY=60000
export DEPTHAI_BOOTUP_TIMEOUT=60000
python3 script.py
- Windows PowerShell
$env:DEPTHAI_WATCHDOG_INITIAL_DELAY=60000
$env:DEPTHAI_BOOTUP_TIMEOUT=60000
python3 script.py
- Windows CMD
set DEPTHAI_WATCHDOG_INITIAL_DELAY=60000
set DEPTHAI_BOOTUP_TIMEOUT=60000
python3 script.py
网络接口控制器设置
在 Linux 上,一些默认的网卡设置可能不适合与 OAK PoE 相机通信,这可能会导致低帧率、高延迟和/或高 OAK CPU 使用率。你可以使用 ethtool 工具来配置这些设置。
ethtool 是一个命令行工具,用于显示和配置以太网适配器的各种参数,例如速度、双工模式和接收器/发送器环路。使用 ethtool,你可以优化网络接口卡的设置,以便优化与 OAK PoE 相机的通信,从而提高帧率、降低延迟和减少 OAK CPU 使用率。
具体来说,你可以使用 ethtool 来调整网络接口卡的缓冲区大小、传输速率和其他参数。要使用 ethtool,请首先安装它,并在终端中运行相应的命令。建议在执行任何修改之前备份你的系统设置,以避免不必要的问题。
有一个案例显示,通过配置
sudo ethtool -C NAME rx-usecs 1022
(其中NAME
是enp59s0f1
)可以将帧率从 12 帧/秒提高到 20 帧/秒。这说明通过使用 ethtool 工具来调整网卡设置,可以显着提高与 OAK PoE 相机的通信质量。在这个案例中,通过将接收缓冲区的rx-usecs
参数设置为 1022,可以优化网络接口卡的性能,并提高帧率。需要注意的是,不同的系统和硬件可能需要不同的参数设置,因此建议在进行任何更改之前,仔细研究你正在使用的硬件和操作系统,并查找最佳的参数设置。