GrabBag/SDK/VzNLSDK/Inc/VZNL_MulDetectLaser.h

231 lines
9.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __VIZUM_MUL_DETECTED_LASER_HEADER__
#define __VIZUM_MUL_DETECTED_LASER_HEADER__
#include "VZNL_Export.h"
#include "VZNL_Types.h"
#include "VZNL_Common.h"
#include "VZNL_DetectLaser.h"
/// @brief
/// 开始多设备检测
/// <param name = "phDevice">[in]多个相机Handle</param>
/// <param name = "nDeviceCount">[in]相机个数</param>
/// <param name = "pnErrorCode">[out]错误码</param>
/// @return 返回多设备检测工具Handle
VZNLAPI VZNLDETECTHANDLE VzNL_BeginMultiDeviceDetectLaser(VZNLHANDLE* phDevice, int nDeviceCount, int* pnErrorCode);
/// @brief
/// 是否为主相机
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "hDevice">[in]相机handle</param>
/// @return 返回true则表示是主相机
VZNLAPI VzBool VzNL_IsMasterDev(VZNLDETECTHANDLE hDetectHandle, VZNLHANDLE hDevice);
/**
* @brief 设备状态提醒
* @param [in] hDevice 融合设备Handle
* @param [in] pNotifyCB 返回函数
* @param [in] pCBParam 回调函数返回参数
* @return 关闭成功返回0否则为错误码
*/
VZNLAPI int VzNL_SetMulDevStatusNotify(VZNLHANDLE hDetechTool, VzNL_OnMulDevNotifyStatusCB pNotifyCB, void* pCBParam);
/// @brief
/// 设置激光标定。
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "dStandardObjectHeight">[in]设置标定高度</param>
/// <param name = "pTopROI">[in]顶部ROI数组指针</param>
/// <param name = "nTopROICount">[in]顶部ROI的数组个数</param>
/// <param name = "pBottomROI">[in]底部ROI数组指针</param>
/// <param name = "nBottomROICount">[in]底部ROI数组个数</param>
/// @return 返回0为正确失败返回错误码
VZNLAPI int VzNL_SetMulDevLaserStandard( VZNLDETECTHANDLE hDetechTool, double dStandardObjectHeight,
const SVzNLROIRect* pTopROI, const int nTopROICount,
const SVzNLROIRect* pBottomROI, const int nBottomROICount);
/// @brief
/// 清除标定信息
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_ClearMulDevLaserStandard(VZNLDETECTHANDLE hDetechTool);
/// @brief
/// 设置激光门限值
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "nLaserThres">[in]激光门限值[Range:0~255]</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_SetMulDevLaserThres(VZNLDETECTHANDLE hDetechTool, int nLaserThres);
/// @brief
/// 设置过滤高度
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "dFilterHeight">[in]过滤高度(此高度以下的数据不输出)</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_ConfigMulDevLaserLineFilterHeight(VZNLDETECTHANDLE hDetechTool, double dFilterHeight);
/// @brief
/// 设置杂点过滤阈值
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "dMaxDeviation">[in]过滤值</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_ConfigMulDevLaserLineMaxDeviation(VZNLDETECTHANDLE hDetechTool, double dMaxDeviation);
/// @brief
/// 设置偏移量
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "dOffsetValue">[in]偏移量</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_ConfigMulDevLaserBeginOffsetValue(VZNLDETECTHANDLE hDetechTool, double dOffsetValue);
/**
* @brief 设置点云处理模式
* @param [in] hDevice 设备句柄
* @param [in] ePointCloudProcMode kePointCloudProcMode_Speed 速度计算模式, kePointCloudProcMode_Encoder 编码器模式 kePointCloudProcMode_FixedStep 固定步长模式
* @return 成功返回0否则为其他错误码
* Old Interface int VzNL_EnableLaserRollerMode(VZNLHANDLE hDevice, VzBool bEnable);
*/
VZNLAPI int VzNL_SetMulDevPointCloudProcMode(VZNLDETECTHANDLE hDetechTool, EVzPointCloudProcMode ePointCloudProcMode);
/**
* @brief 设置固定步长
* 设置前请先设置为kePointCloudProcMode_FixedStep模式
*/
VZNLAPI int VzNL_SetMulDevFixedStep(VZNLDETECTHANDLE hDetechTool, double dStep);
/// @brief
/// 设置传送带速度值 当设置点云处理模式为 kePointCloudProcMode_Speed可用
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "eDirect">[in]运行方向</param>
/// <param name = "dSpeed">[in]速度</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_ConfigMulDevLaserObjRunSpeedValue(VZNLDETECTHANDLE hDetechTool, EVzObjRunDirect eDirect, double dSpeed);
/**
* @brief 配置转动轴半径 kePointCloudProcMode_Encoder可用
* @param [in] hDevice 设备句柄
* @param [in] dRadius 转动轴半径
* @return 成功返回0否则为其他错误码
*/
VZNLAPI int VzNL_ConfigMulDevLaserRollerRadius(VZNLDETECTHANDLE hDetechTool, double dRadius);
VZNLAPI int VzNL_GetMulDevLaserRollerRadius(VZNLDETECTHANDLE hDetechTool, double* pdRadius);
/**
* @brief 设置编码器脉冲精度 kePointCloudProcMode_Encoder可用
* @param [in] hDevice 设备句柄
* @param [in] nPulsePerRound 脉冲个数
* @return 成功返回0否则为其他错误码
*/
VZNLAPI int VzNL_SetMulDevLaserEncoderResolution(VZNLDETECTHANDLE hDetechTool, unsigned int nPulsePerRound);
VZNLAPI int VzNL_GetMulDevLaserEncoderResolution(VZNLDETECTHANDLE hDetechTool, unsigned int* pnPulsePerRound);
///@brief 获取参数设置范围
///<param name = "hDetectHandle">[in]多相机检测工具</param>
///@param name="eType"[in]参数类型</param>
///@param name="pnMinVal"[in]最小值</param>
///@param name="pnMaxVal"[in]最大值</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_QueryMulDevParamRange(VZNLDETECTHANDLE hDetechTool, EVzDeviceParamType eType, unsigned int* pnMinVal, unsigned int* pnMaxVal);
/// @brief
/// 检测一帧数据
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_MulDevDetectLaser(VZNLDETECTHANDLE hDetechTool);
/// @brief
/// 设置外部设备为外部触发模式
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "bExternTrigger">[in]外部触发模式</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_SwitchMulDevExternTrigger(VZNLDETECTHANDLE hDetechTool, EVzMultiDevWorkMode eWorkMode);
/// @brief
/// 启用多相机全数据模式
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "bEnable">[in]启用/禁用</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_EnableMulDevUseAllPoint(VZNLDETECTHANDLE hDetechTool, VzBool bEnable);
/// @brief
/// 刷新多相机参数
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "bEnable">[in]启用/禁用</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_UpdateMulDevCalibration(VZNLDETECTHANDLE hDetechTool);
/// @brief
/// 启用软件计算模式
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "bEnable">[in]启用/禁用</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_EnableMulDevCalcMatrix(VZNLDETECTHANDLE hDetechTool, VzBool bEnable);
/// @brief
/// 获取激光线2D结果
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "p2DPoint">[out]2D点内存空间由用户分配</param>
/// <param name = "pnCount">[in/out]传入:用户分配的SVzNL2DPoint的结构个数;传出:用户需要分配多少个SVzNL2DPoint</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_GetMulDevLaser2DResult(VZNLDETECTHANDLE hDetechTool, SVzNL2DPosition* p2DPoint, int* pnCount);
/// @brief
/// 获取激光线3D结果
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "p3DPoint">[out]3D点内存空间由用户分配</param>
/// <param name = "pnCount">[in/out]传入:用户分配的SVzNL3DPosition的结构个数;传出:用户需要分配多少个SVzNL3DPosition</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_GetMulDevLaser3DResult(VZNLDETECTHANDLE hDetechTool, SVzNL3DPosition* p3DPoint, int* pnCount);
/// @brief
/// 启动多设备自动检测,并返回激光线
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "pCB">[in]回调函数</param>
/// <param name = "pCBParam">[in]回调参数</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_StartMulDeviceAutoDetect(VZNLDETECTHANDLE hDetechTool, VzNL_GetAutoDetectResultCB pCB, void* pCBParam);
/// @brief
/// 启动多设备自动检测,并返回激光线
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "pCB">[in]回调函数</param>
/// <param name = "pCBParam">[in]回调参数</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_StartMulDeviceAutoDetectEx(VZNLDETECTHANDLE hDetechTool, EVzResultDataType eResultType, VzNL_AutoOutputLaserLineExCB pCBEx, void* pCBParam);
/// @brief
/// 设置融合的相机类型。
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "eMultiDevType">[in]融合的相机类型</param>
/// @return 返回0为正确失败返回错误码
VZNLAPI int VzNL_SetMulDevType(VZNLDETECTHANDLE hDetechTool, EVzMultiDevType eMultiDevType);
VZNLAPI int VzNL_GetMulDevType(VZNLDETECTHANDLE hDetechTool, EVzMultiDevType* peMultiDevType);
/// @brief
/// 设置静态相机融合扫描模式。
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// <param name = "eMultiDevScanMode">[in]静态相机融合扫描模式</param>
/// @return 返回0为正确失败返回错误码
VZNLAPI int VzNL_SetMulStaticDevScanMode(VZNLDETECTHANDLE hDetechTool, EVzMultiStaticDevScanMode eMultiDevScanMode);
VZNLAPI int VzNL_GetMulStaticDevScanMode(VZNLDETECTHANDLE hDetechTool, EVzMultiStaticDevScanMode* peMultiDevScanMode);
/// @brief
/// 停止多设备检测
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_StopMulDeviceAutoDetect(VZNLDETECTHANDLE hDetectTool);
/// @brief
/// 结束多设备检测
/// <param name = "hDetectHandle">[in]多相机检测工具</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_EndMultiDeviceDetectLaser(VZNLDETECTHANDLE* pDetectTool);
/**
* @brief 是否支持高帧率下降沿模式
* @param hDevice 当前设备句柄
* @param pnErrorCode 错误信息如果不需要可填NULL
* @return VzTrue 表示支持 VzFalse 表示不支持
*/
VZNLAPI VzBool VzNL_IsMulDevSupportHighFrequenceFallingEdge(VZNLDETECTHANDLE hDetechTool, int* pnErrorCode);
#endif