OAK相机与树莓派
⚠注意!部分链接属于外网,国内可能打不开。 |
我们的设备也能接在小型单板机上,如树莓派。为了在树莓派上安装depthai,你应该先安装依赖再用pip
安装库,DepthAI库在piwheels上为RPi预装了wheels。
▌使用预设的树莓派系统镜像
我们提供了一个树莓派镜像,预先安装了DepthAI和所有依赖。镜像文件下载地址请查看。
- OAK-D-CM4-POE,使用默认的树莓派操作系统,预安装了DepthAI。所需硬件:至少8GB的uSD卡,与OAK-D-CM3、OAK-D-CM4类似,镜像会烧录在这张卡上。要启用第二张uSD卡,请参见这里的解决方法。我们建议用户将此镜像用于所有OAK相机。
- KS_Rpi_OS_Full,使用树莓派完整操作系统,预装了DepthAI和CEP。所需硬件:至少32GB的uSD卡,带4GB RAM的树莓派。这张镜像被烧录在uSD卡上了,这张卡是在包装内的(会发给Kickstarter支持者)。如果您想用CEP平台,请仅使用此镜像!
可以在这里找到创建这些镜像和变更日志的步骤。
烧录uSD卡
- 从Google Drive下载树莓派镜像(上面的链接)。下载Balena Etcher程序。你也可以使用RPi Imager,但我们发现有时会有问题。
- 打开Balena Etcher。如果你已经下载了.AppImage,你可能需要右键单击它,然后单击run来启动程序。
- 点击 Flash from file并选择你以前下载的.zip镜像。
- 选择目标uSD卡。
- 点击Flash,一直等到它完成。
- flash完成后,安全取出uSD卡,将其插入树莓派,并给树莓派通电。
▌树莓派为OAK供电
树莓派文档声明树莓派2或更高型号可以通过USB提供高达1.2A的电流。即使在最大工作负载下,OAK相机的功耗也低于1A,这意味着你可以通过USB-C线直接从树莓派为OAK相机供电,除非:
- 你有额外的USB设备连接到RPi USB端口,消耗太多电流。总的来说,RPi可以提供1.2A,因此如果所有USB设备消耗超过1.2A,将会断电。
- 你使用Pro系列的OAK相机,红外激光发射器和红外照明LED将额外消耗高达0.25A。
我们仍然推荐给你的OAK相机外部供电,要么通过5V供电口(在OAK-D设备上),或者使用Y型转接头。原因是OAK有电流尖峰(特别是在使用视频编码器和运行AI推理时),这可能导致断电。
▌SSH进入RPi
如果你使用预先配置的RPi OS镜像,SSH服务器已经启用,否则你需要在这个boot内创建文件ssh
,所以SSH服务器将在启动时启用(此处为教程)。
如果你的RPi 连接了WiFi,你可以在boot里通过创建(和编辑)wpa_supplicant.conf
来设置WiFi SSID/密码(此处为教程)。
通过以太网/WiFi将RPi连接到与你的计算机相同的局域网后,你可以使用下面的命令SSH到RPi。如果RPi和计算机不在同一个局域网中,你必须指定RPi的IP,而不是luxonis.local
-这是你的RPi在预先配置的RPi镜像上的默认名称。
ssh pi@luxonis.local -X
-X
参数在Linux上启用X11转发——所以OpenCV的imshow
图像将通过SSH转发到你的计算机。在MacOS上,默认情况下不会安装X11,所以你需要下载它,更多信息查看这里。
当你第一次SSH进入RPi时,它会警告你真实性,就像下面的日志一样。
The authenticity of host 'raspberrypi.local (192.168.1.222)' can't be established.
ECDSA key fingerprint is SHA256:stb5mbRQeX6veOq8Wzg81rz9IHonxJR2++Q8bDYryTo.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入yes
继续。
在这个命令之后,你需要提供密码。默认RPi操作系统密码是 raspberry
,你应该修改它。
SSH成功之后,让我们尝试运行一个示例应用程序python depthai-python/examples/MobileNet/rgb_mobilenet.py
▌已知镜像限制
- 在OAK-D-CM4-PoE,因为镜像V8,第二张uSD卡支持将被禁用。这是因为如果启用了uSD卡支(出于存储目的),WiFi连接将被禁用。要启用第二张uSD卡支持(并禁用WiFi连接),你可以编辑
/boot/config.txt
并取消注释该行dtoverlay=sdhost,poll_once=off
然后重新启动系统。
▌向eMMC闪烁一个图像
OAK-D-CM4和OAK-D-CM4-PoE板载树莓派CM4。大多数OAK-D-CM4批次都有带eMMC内存的CM4,大多数OAK-D-CM4-PoE板都有CM4 Lite,它没有eMMC内存,而是从uSD卡启动。如何将镜像闪存到uSD卡非常简单,这里我们将介绍如何将镜像闪存到CM4上的eMMC上。
这里有一个OAK-D-CM4,它有CM4和红色箭头表示的eMMC闪存。CM4 Lite版本在那个位置不会有这个芯片。
要将镜像闪存到CM4 eMMC(官方RPi指南),首先需要用header引脚启用USB_BOOT。默认情况下,连接器位于指示为的2个接头引脚上DIS
(禁用),所以我们必须将连接器移动到EN
引脚(启用)。
切换连接器后,我们可以用microUSB线连接我们的主机与设备(上面的红色框所示位置)。OAK设备(具体来说是CM4)也必须通过5V电源孔供电。
连接microUSB和电源后,我们需要启用RPi USB boot。我们遵循了此处的教程,构建并运行程序后,你应该会看到类似的内容:
/Documents/usbboot$ sudo ./rpiboot
RPIBOOT: build-date Apr 21 2022 version 20220315~121405 445356e1
Waiting for BCM2835/6/7/2711...
Loading embedded: bootcode4.bin
Sending bootcode.bin
Successful read 4 bytes
Waiting for BCM2835/6/7/2711...
Loading embedded: bootcode4.bin
Second stage boot server
Loading embedded: start4.elf
File read: start4.elf
Second stage boot server done
启动完成后,你应该在RPi Imager或Balena Etcher(如下面截图)中看到eMMC内存,这样你就可以很容易地将所需的镜像闪存到eMMC。闪存完成后,确保禁用USB启动(通过再次切换连接器)并重启设备。它应该从新刷新的镜像启动!
▌树莓派Zero
树莓派Zero就性价比而言是一款很棒的单板电脑(SBC),你可以花大约5美元得到一个。它有512MB内存,1GHz单核CPU,以及可选的板载蓝牙和WiFi连接(RPI Zero W,价格约为10美元),耗电0.5W左右。
RPi Zero对于流媒体元数据(NN结果)、低分辨率的编码视频或轻型计算来说是足够的。如果你打算传输高分辨率视频,执行繁重的计算(例如使用OpenCV)或后期处理,RPi Zero将不是主机的最佳选择。
将OA相机连接到RPi Zero
RPi Zero有一个外设的micro USB口,你可以使用标准的USB-C(转USB-A)线,但你需要OTG连接器/线把一台OAK相机连接到RPi Zero。
以上所有选项都有效。我们与这些公司没有联系/隶属关系。(大家可以在某宝自行搜索购买)
根据我们的测试,RPi Zero能够为OAK-D提供足够的电力,而无需外部电源(电源孔或Y型转接头)。
▌RPi故障排除
RPi锁定/RPi上的OAK崩溃
树莓派的所有USB端口的最大限制为1.2A,OAK相机可以达到1A(在最大功率下,通常接近500mA)。
因此,如果你看到锁定,可能是因为USB设备从树莓派汲取的总功率超过了1.2A的限制。使用有电源的hub(USB扩展坞)可以防止这种情况,或者通过USB从树莓派上给更少的其他东西供电。
这也可能表现为OAK在树莓派上随机崩溃。如果OAK被配置为一次做很多事情,这可能会变得特别频繁。随着我们让DepthAI同时做越来越多的事情–从而增加OAK可以拉动的最大功率,这种情况变得越来越有可能。看起来OAK的峰值功率(电流)可能超过了树莓派能够处理的范围,导致OAK断电并返回错误。
因此,如果你在树莓派上遇到了关于DepthAI稳定性的问题,请尝试通过电源和/或供电的USB扩展坞给OAK相机供电,看看错误是否会消失。
不带X11转发的SSH-ing
如果你进入RPi而没有-x
参数并尝试显示一个框架(例如cv2.imshow()
),你可能会得到如下所示的错误:
(-2:Unspecified error) Can't initialize GTK backend in function 'cvInitSystem'
qt.qpa.xcb: could not connect to display. qt.qpa.plugin: Could not load the Qt platform plugin "xcb".
This application failed to start because no Qt platform plugin could be initialized.
解决方案是在连接到RPi时使用X11转发,请参见SSH进入RPi。