在 ARM 和嵌入式系统上使用 Spinnaker
使用准备
使用摄像头前,建议您先了解下载页面提供的以下资源:
- 摄像头入门指南 - 提供有关安装运行摄像头所需的组件和软件的信息。
- 摄像头技术参考 — 提供有关摄像头的规格、功能和操作以及成像和采集控件的信息。
- 固件更新 - 确保您使用全新版本的摄像头固件,以利用相关功能改进和漏洞修复。
- Tech Insights - 订阅月度电子邮件更新,其中包含有关新知识库文章、新固件和软件发布,以及产品变更通知 (PCN) 的信息。
支持的系统配置
必须具备以下先决条件,才能安装 Spinnaker:
- Jetson Orin, Xavier, Nano, Raspberry Pi 4, TX2, 或其他具有 ARMv7 Cortex 处理器(包括 Cortex-A7、-A8、-A9、-A15… 等)的 OMAP4 设备。
- FLIR USB3 摄像头:Blackfly® S、Blackfly®、Chameleon®3、Flea®3 或 Grasshopper®3
- 虽然我们已经测试了 GigE 摄像头能够在精选 ARM 板上进行流式传输,但其他 FLIR 机器视觉摄像头(FireWire、USB2 或 CameraLink)不受支持。
- 外部电源,例如充电的 USB 集线器或 GPIO 电源电缆。
- Linux。 推荐版本是 Ubuntu 18.04
配置操作系统并安装所需的库
若要使 Spinnaker 能够在 Linux Ubuntu 系统上运行,必须安装以下依赖项:
- Ubuntu 18.04
user$: sudo apt-get install libraw1394-11 libusb-1.0-0
注意:使用 libraw1394-8 软件包安装的 raw1394 模块在重启后可能不会加载,这将导致 Spinnaker 总线事件错误,并且无法启动应用。 若要解决此问题,请将 raw1394 添加至 /etc/modules 文件。 如果问题仍然存在,还应添加 video1394。
安装 Spinnaker SDK
若要安装 Spinnaker SDK,请执行以下操作:
- 从我们的下载页面下载适用于 ARM 的 Spinnaker SDK。
- 在网络或 U 盘上复制 spinnaker-_arm.tar.gz 软件包,然后将其复制到 ARM 板上的某个位置。
- Untar 安装包:
tar xvfz spinnaker-_arm.tar.gz
- 运行安装脚本:
cd spinnaker-_arm/
sudo sh install_spinnaker_arm.sh
- 按照脚本的说明操作。 这将安装所有 Spinanaker 库、示例代码、示例应用和文档。 此外,该脚本将提示您配置 udev,以便设备可由特定用户使用。 如果选择配置设备,该脚本将更改节点权限,具体做法是覆盖默认 Ubuntu 权限,并向用户提供对设备节点的完整读取和写入权限。
- 重新启动板,让用户权限生效。
编译示例
Spinnaker SDK 包含大量帮助您开始编写常用 API 任务程序的示例应用。 示例文件安装在 /usr/src/ 下。
我们建议您将解压缩后的文件夹和子文件夹复制到具有写入权限的位置。
若要编译示例,请安装版本基础软件包中随附的 GNU C++ (g++) 编译器:
user$ sudo apt-get install build-essential
若要编译特定示例,请运行示例目录中的生成文件。 二进制文件和库将分别复制到 bin 和 lib 目录中。 例如:
user$ cd /Spinnaker/src/Acquisition
user$ make
您还可以使用交叉编译器为目标体系结构生成示例。 交叉编译器 CodeSourcery 效果良好。
或者,您可以使用 QEmu 设置 ARM 模拟器、在该模拟器上安装 Ubuntu,并在虚拟机上生成软件。
使用 ARM 的限制
Linux 用户无法访问 Microsoft Windows 的专属技术,例如:
- DirectShow
- Cognex AIK
- Twain
- 托管的 .NET API
- ActiveX
ARM 设备上的 Spinnaker 不支持:
- OpenGL
- FLIR FireWire 机器视觉摄像头
- FLIR GigE 机器视觉摄像头
注意:我们已经测试了 GigE 摄像头能够在精选 ARM 板上进行流式传输。 请参阅“嵌入式系统上流式传输 FLIR 机器视觉摄像头”。 - FLIR CameraLink 机器视觉摄像头
- UpdatorGUI 工具
- 录制视频
注意:ARM 设备上的 Spinnaker 具有有限的颜色处理选项。
其他 ARM 设备限制:
- 处理器速度将影响最大可用帧率。 使用 Windows 配置可能无法实现最大帧速率。
查看图像和视频
我们建议使用以下工具查看图像和视频。 这些工具未得到 FLIR 官方认可。
用于查看图像的工具:
用于观看视频的工具:
- VLC 媒体播放器
用于处理 Glade 文件的工具:
移除 Spinnaker
手动移除 Spinnaker 文件即可卸载,如下例所示:
user$: sudo sh
remove_spinnaker-arm.sh
删除系统上的任何解压缩文件或新编译的文件。
在嵌入式系统上流式传输
注意:GS3-U3 已通过 GPIO 从外部供电。 BFS-U3 已通过 USB3 接口供电。
ODROID-XU4 系统配置
ODROID-XU4 板规格 | |
---|---|
CPU |
Exynos5422 Cortex-A15 - 2 GHz 四核和 Cortex-A7 1.4 GHz 四核 |
GPU |
ARM Mali-T628 MP6 |
RAM |
2 GB LPDDR3 |
主适配器驱动程序 |
exynos-xhci |
操作系统 |
Ubuntu 16.04.2 LTS,带有 3.10.105-141 Linux 内核 |
软件 |
Spinnaker 1.5.0.27 SDK 硬浮点 |
摄像头和固件 |
GS3-U3-23S6M(2.25.3.0 固件) |
ODROID XU4 入门
- 按照 Hardkernel 的入门 Wiki 将 Ubuntu 16.04 图像安装到 eMMC/microSD 卡上。
- 下载 Spinnaker ARM 硬浮点软件包(spinnaker-1.5.0.27-armhf-pkg.tar.gz 或更新版本)。
- 提取 Spinnaker ARM 硬浮点软件包。
- 使用以下命令检索依赖关系:
sudo apt-get install libraw1394-11 libusb-1.0-0
- 使用以下命令安装从 Spinnaker ARM 目录提取的 deb 文件:
sudo sh install install_spinnaker_arm.sh
Ubuntu 默认支持最大 2 MB 的图像。 若要支持更大的图像,请将 USBFS 增加到 1000 MB。
- 使用 sudo apt-get install git 安装 git 包(可能要先使用 sudo apt-get 更新安装包列表)
- 下载内核源代码:
$ git clone --depth 1 https://github.com/hardkernel/linux -b odroidxu3-3.10.y
$ cd linux
- 修改 ../linux/drivers/usb/core/devio.c 从:
static unsigned usbfs_memory_mb = 16
到:static unsigned usbfs_memory_mb = 1000
- 编译和安装新内核:
$ make odroidxu3_defconfi
$ make -j9
$ sudo make modules_install
$ sudo cp -f arch/arm/boot/zImage /media/boot
$ sudo cp -f arch/arm/boot/dts/exynos5422-odroidxu3.dtb /media/boot
ODROID XU4 的基准测试
这些结果来自使用 GS3-U3-23S6M 和 BFS-U3-51S5C-C 持续捕获图像的控制台应用。 使用控制台应用的基准测试如下所示。
请求的 帧 率 |
处理的 帧 率 |
CPU 使用率 |
带宽 | |
---|---|---|---|---|
1280 x 960 Raw8 |
202 FPS |
202 FPS |
16% |
234 MB/s |
1920 x 1200 Raw8 |
163 FPS |
163 FPS |
13% |
328 MB/s |
请求的 帧 率 |
处理的 帧 率 |
CPU 使用率 |
带宽 | |
---|---|---|---|---|
2448 x 2048 BayerRG8 |
7.5 FPS |
7.5 FPS |
11% |
358 MB/s |
NVIDIA Jetson TX1
系统配置 | NVIDIA Jetson TX1 规格 |
---|---|
CPU |
Cortex A57 |
GPU |
Maxwell GPU,带有 256 个 CUDA 核心 |
RAM |
4 GB |
主适配器驱动程序 |
xhci-hcd |
操作系统 |
Ubuntu 16.04 Linux tegra-ubuntu 3.10.96-tegra |
软件 |
Spinnaker 1.5.0.37 Linux ARM64 |
摄像头和固件 |
GS3-U3-23S6M(2.25.3.0 固件) |
NVIDIA Jetson TX1 入门
- 按照 NVIDIA 的快速入门指南文件安装全新的 64 位 LT4 发布包。 L4T release package ->Tegra X1->Jetson TX1 R24.2.1 - 2016 年 9 月已用于此应用说明。
注意:此步骤会重写现有文件系统。 - 通过下载全新的 Spinnaker 64 位 ARM 安装 64 位 Spinnaker ARM,按照自述文件中的安装说明操作。 Spinnaker 1.5.0.27 SDK - ARM64 - Ubuntu 16.04(64 位)- 2017 年 8 月 22 日已用于此应用说明。
- 安装 g++ 编译器,以便安装 Spinnaker SDK 的 C++ 示例:
sudo apt-get update
sudo apt-get install build-essential
上述步骤使您的 USB3 摄像头可以流传输最大 2 MB 的图像。 若要获取以分辨率显示的大小大于 2 MB 的图像,添加以下代码到 APPEND 行:
usbcore.usbfs_memory_mb=1000
到该文件:
/boot/extlinux/extlinux.conf
NVIDIA Jetson TX1 的基准测试
这些结果来自使用 GS3-U3-23S6M 和 BFS-U3-51S5C-C 持续捕获图像的控制台应用。 使用控制台应用的基准测试结果如下所示。
请求的 帧 率 |
处理的 帧 率 |
CPU 使用率 |
带宽 | |
---|---|---|---|---|
1280 x 960 Raw8 |
202 FPS |
202 FPS |
~32% |
236 MB/s |
1920 x 1200 Raw8 |
163 FPS |
155 FPS |
~30% |
340MB/s |
请求的 帧 率 |
处理的 帧 率 |
CPU 使用率 |
带宽 | |
---|---|---|---|---|
2448 x 2048 BayerRG8 |
7.5 FPS |
7.5 FPS |
~37% |
358 MB/s |
NVIDIA Jetson TX2
系统配置 | NVIDIA Jetson TX2 规格 |
---|---|
CPU |
Cortex A57 |
GPU |
Maxwell GPU,带有 256 个 CUDA 核心 |
RAM |
8 GB |
主适配器驱动程序 |
xhci-hcd |
操作系统 |
Ubuntu 16.04 Linux tegra-ubuntu 4.4.38-tegra |
软件 |
Spinnaker 1.5.0.27 Linux ARM64 |
摄像头和固件 |
GS3-U3-23S6M(2.25.3.0 固件) |
NVIDIA Jetson TX2 入门
- 按照 NVIDIA 的快速入门指南文件安装全新的 64 位 Linux 4 Tegra 发布包。适用于 Tegra R28.1 的 64 位 Linux 已用于此应用说明。
注意:此步骤会重写现有文件系统。 - 通过下载全新的 Spinnaker 64 位 ARM 安装 64 位 Spinnaker ARM,按照自述文件中的安装说明操作。 Spinnaker 1.5.0.27 SDK - ARM64 - Ubuntu 16.04(64 位)- 2017 年 8 月 22 日已用于此应用说明。
通过上述步骤,您可以采用 2 MB 的最大图像大小流式传输 USB3 摄像头。 若要获取以分辨率显示的大小大于 2 MB 的图像,添加以下代码到 APPEND 行:
usbcore.usbfs_memory_mb=1000
到该文件:
/boot/extlinux/extlinux.conf
NVIDIA Jetson TX2 的基准测试
这些结果来自使用 GS3-U3-23S6M 和 BFS-U3-51S5C-C 持续捕获图像的控制台应用。 使用控制台应用的基准测试结果如下所示。
请求的 帧 率 |
处理的 帧 率 |
CPU 使用率 |
带宽 | |
---|---|---|---|---|
1920 x 1200 Raw8 |
163 FPS |
163 FPS |
~45% |
358 MB/s |
请求的 帧 率 |
处理的 帧 率 |
CPU 使用率 |
带宽 | |
---|---|---|---|---|
2448 x 2048 BayerRG8 |
7.5 FPS |
7.5 FPS |
~50% |
358 MB/s |
故障排除
如果图像大小大于 2 MB,则无法启动图像传输
原因:USBFS 缓存器大小太小(默认情况下为 16 MB)。 使用以下命令检查 usbfs_memory_mb size.
cat /sys/module/usbcore/parameters/usbfs_memory_mb
解决方案:通过向 APPEND 行添加以下代码来增加内存:
usbcore.usbfs_memory_mb=1000
到该文件:
/boot/extlinux/extlinux.conf
如果此方法无法设置内存限值,请运行以下命令:
sudo sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
已检测到摄像头,但无法进行流式传输
原因:由 ARM 板供电的 USB3 总线不足以为摄像头供电。
解决方案:使用 GPIO 线缆从外部为 USB3 摄像头供电。