gpt4 book ai didi

c++ - 使用 libdc1394 在 Pointgrey Firefly MV 上输出频闪信号

转载 作者:太空狗 更新时间:2023-10-29 21:51:03 24 4
gpt4 key购买 nike

我正在使用 Pointgrey Firefly MV(准确地说是 FFMV-03M2M/C),并希望在每次启动快门时触发一些外部设备。根据the datasheet ,相机支持 IIDC 1.31,还提供四个 GPIO 可用作触发器和/或频闪信号输出。如 IIDC standard 的第 4.11.3 节所述应该可以使用 IIDC 配置这些选通信号输出。

我的应用程序是用 C++ 实现的并使用 libdc1394访问和控制摄像机。到目前为止,一切都很好,但我无法配置选通信号输出。据我了解 libdc 和 IIDC,应该可以启用第一个输出,如下所示(camera 是指向有效 dc1394camera_t 的指针):

dc1394error_t err;
uint64_t strobe_offset = 0x200;
uint32_t strobe_settings = 0;

err = dc1394_get_strobe_register(camera, strobe_offset, &strobe_settings);
if (err == DC1394_SUCCESS) {
/* Set bits 6 (strobe on) and 7 (active-high level)
IIDC uses msb 0, so we need to shift by 25/24 instead of 6/7 */
strobe_settings = strobe_settings | (1 << 25) | (1 << 24);

err = dc1394_set_strobe_register(camera, strobe_offset, strobe_settings);

}

if (err != DC1394_SUCCESS) {
log(LOG_ERROR, "Failed to set strobe.");
}

这不会产生任何错误,但它也不会打开选通信号输出(即使相机正在捕获帧)。我还通过使用不同的偏移量(0x204、0x208 和 0x20C)尝试了所有其他输出,但无济于事。然后我检查了 Strobe_CTRL_InqStrobe_[0123]_Inq 的所有可用性查询字段,但它们都报告存在选通信号输出。但有趣的是,Strobe_[0123]_Inq 中的 On/Off_Inq 字段告诉我,当 Polarity_Inq 告诉我可以更改极性设置(实际上我不能,因为您只能在选通信号输出打开时更改设置)。我尝试使用 Pointgrey 提供的基于 Windows 的驱动程序实用程序配置输出,并且它可以正常工作。

知道我可能做错了什么吗?还是这款相机在这方面不兼容 IIDC?

更新:好的,我尝试了三种方法来启用选通输出:使用我的原始代码,使用答案中建议的绝对偏移量 0x1300 以及使用 PointGrey 寄存器引用手册中所写的偏移量 0x1110/0x1114。我还尝试设置延迟、持续时间和/或方向(尽管不要将 PIO 与频闪输出混淆)。到目前为止,寄存器和标志的组合都不起作用。也许这是 libdc1394 中的一个错误,或者 PointGrey 在他们的专有驱动程序中做了一些其他的魔法。现在我放弃了,将尝试寻找一种不同的解决方案来触发外部设备。

最佳答案

浏览(可访问,无法访问技术引用)相机文档,您似乎需要为 GPIO 设置一个方向,即它们是输入还是输出。该文档描述了 0x11F8 处的 PIO_DIRECTION 寄存器,其中低位有效位控制 IO 是输入 (0) 还是输出 (1)。或许你的问题是方向没定好?

http://ptgrey.com/support/downloads/documents/TAN2005002_Output_strobe_signal_pulse.pdf

将相机寄存器映射与标准进行比较,相机似乎应该支持这一点。我在 libdc1394 中找不到 get/set_strobe_register API 的任何文档。也许 get 或 set_register 使用相机记录的寄存器偏移量会更好。您是如何计算 0x200 作为偏移量的?

http://www.cs.unc.edu/Research/stc/FAQs/Cameras_Lenses/PtGrey/DcamRegisterRefManual.pdf在 0x1300 记录你试图访问的寄存器,所以也许有一些固定的已知偏移量适用于访问“选通”寄存器?同样,也许使用 set_register 将允许直接访问所有相机寄存器,因此您可以使用记录的旧集。

还有一点就是需要给频闪设置延时和计数。

关于c++ - 使用 libdc1394 在 Pointgrey Firefly MV 上输出频闪信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4505342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com