Table of Contents
工作模式
Vzense生产的3D ToF相机提供了主动(Active)、硬触发(Hardware Trigger)、软触发(Software Trigger)三种工作模式。
1、主动模式
在主动模式下,相机处于连续工作状态。您可以通过在ScepterGUITool中打开视频流(Stream On)查看相机拍摄到的实时图像信息。 该工作模式方便您调试相机参数和性能。
2、硬触发模式
在硬触发模式下,外部触发源向ToF相机的硬触发引脚发送触发信号来控制相机开始一帧图像的获取。每一次信号仅触发一次曝光和传输。
3、软触发模式
在软触发模式下,主机通过向ToF相机发送软件命令来控制相机开始一帧图像的获取。每一次信号仅触发一次曝光和传输。
如下图所示,您可以根据需要在ScepterGUITool中选择需要的工作模式。
ToF 相机的工作模式可以通过以下软件 API 配置 :
//设置相机工作模式为硬触发模式
ScStatus scSetWorkMode(ScDeviceHandle device, ScWorkMode mode);
//获取当前相机的工作模式设置
ScStatus scGetWorkMode(ScDeviceHandle device, ScWorkMode* pMode);
/**
* @brief 相机工作模式
*/
typedef enum
{
SC_ACTIVE_MODE = 0x00, //主动模式
SC_HARDWARE_TRIGGER_MODE = 0x01, //硬触发模式
SC_SOFTWARE_TRIGGER_MODE = 0x02, //软触发模式
} ScWorkMode;
硬触发
硬触发是通过外部触发源驱动,当相机收到有效信号后立刻开始图像的曝光。因为信号由硬件驱动,所以时效性极佳,适合同步实时性较高的场景使用。
设置相机为硬触发模式
1、通过ScepterGUITool设置相机为硬触发模式。通过ScepterGUITool连接并打开相机,将相机的Work Mode设置为HardwareTriggerMode(硬触发模式),然后开流(Stream设置为“On”)。如下图所示:
2、通过Scepter SDK设置相机为硬触发模式。使用Scepter SDK实现硬触发功能,可以参考DeviceHWTriggerMode例程。
例程参考:
BaseSDK/Windows/Samples/Base/NYX650/DeviceHWTriggerMode。
例程编译运行后,相机会进入硬触发模式并设置开流后,等待图像的获取。此时通过相机的EXT_Trigger引脚发送有效硬触发信号后,就可以收到图像。如果没有及时发送触发信号,例程会因为等待超时报错。具体细节请阅读例程源码。
硬触发的信号要求和参数设置
1、触发信号驱动能力
Vzense的ToF相机对硬触发信号有以下要求:触发信号需要电压范围在3.3V~20V,驱动电流能力要在5mA以上。建议在EXT_Trigger引脚上增加去耦电路,避免脉冲导致错误触发。
2、触发信号极性
极性(polarity):信号有效性检测极性。0 代表下降沿有效,1 代表上升沿有效,取值范围:[0, 1]。如下图所示:
3、触发信号宽度
该参数为可成功实现触发的最小有效信号宽度T0,小于此宽度设置的信号则无法正常触发,建议实际硬件触发信号宽度为[T0+100us, T0+2000us]。此设置可用于滤除触发信号中的脉冲干扰(通常表现为较窄的脉冲),有效信号往往比干扰要宽。例如,T0为设置的触发信号脉冲宽度,如下图所示:
EXT_Trigger1,T1>T0,触发信号有效,可以实现触发。
EXT_Trigger2,T2<T0,触发信号无效,无法实现触发。
4、触发信号间隔
该参数为连续两个触发信号之间的最小时间间隔(interval),小于间隔设置的信号不予响应。Interval的设置值t0决定了硬触发模式下相机的最大帧率,可以过滤掉信号中不需要的噪声信号。Interval单位为 us,取值范围:[34000,65535]。如下图所示:
Interval1,t1>t0,触发信号EXT_Trigger2有响应。
Interval2,t2<t0,触发信号EXT_Trigger2无响应。
5、通过 ScepterGUITool配置硬件触发信号参数
如下图所示,在弹出的对话框中点击“Settings”设置触发参数。
6、通过Scepter SDK配置硬触发信号参数
AP接口如下:
//设置硬触发信号参数包括触发信号极性、宽度、间隔
ScStatus scSetInputSignalParamsForHWTrigger(ScDeviceHandle device, ScInputSignalParamsForHWTrigger params);
//获取当前硬触发信号参数的设置
ScStatus scGetInputSignalParamsForHWTrigger(ScDeviceHandle device, ScInputSignalParamsForHWTrigger* pParams);
硬触发信号参数的数据结构如下:
/**
* @brief 硬触发信号参数
*/
typedef struct
{
uint16_t width; // 输入信号的宽度,范围[1,65535]
uint16_t interval; // 输入信号的间隔[34000,65535]
uint8_t polarity; // 输入信号的极性0或1,0代表下降沿有效,1代表上升沿有效
} ScInputSignalParamsForHWTrigger;
硬触发的针脚连接
Vzense的相机采用的都是M8 A型多功能接口,找到硬触发Ext_Trigger信号的3号白色引脚,并将外部触发源的信号线和该引脚连接起来,将外部触发源的地线和1号或5号引脚连接起来,即可使用硬触发功能。
软触发
软触发不同于硬触发,不需要外部触发源,通过调用API即可进行一次图像触发。因为使用软件命令通信实现,由于软件命令往往会有几ms的延迟,所以实时性不强,但使用简便,不需要物理连接。
设置相机为软触发模式
1、通过ScepterGUITool设置相机为软触发模式。使用ScepterGUITool启用软触发功能,需要将相机的Work Mode设置为软触发模式(SoftwareTriggerMode),然后选择开流(Stream设置为“ON”)。点击“Trigger”触发一次软触发命令,收到一帧图像。如下图所示:
2、通过Scepter SDK设置相机为软触发模式。使用ScepterSDK实现软触发功能,可以参考DeviceSWTriggerMode例程:
例程参考:
BaseSDK/Windows/Samples/Base/NYX650/DeviceSWTriggerMode。
例程编译运行后,相机进入软件触发模式并设置开放流,程序会发送软件触发命令并等待获取图像。有关详细信息,请阅读示例源代码。
用户可以通过以下软件 API 发送软件触发命令:
//相机软触发模式下每一帧触发一次
ScStatus scSoftwareTriggerOnce(ScDeviceHandle device);
软触发命令的延迟
由于软触发需要主机下发命令到相机,命令传输需要一定的耗时,正常这个耗时约为2~3ms,但也取决于主机的性能和网络的负载。