Bootstrap

图漾相机搭配VisionPro使用简易教程

1.下载并安装VisionPro软件

请自行下载VisonPro软件。

VisionPro 9.0/9.5/9.6版本经测试,可正常打开图漾相机,建议使用图漾测试过的版本。

2.下载PercipioCameraForVisionPro软件包

使用浏览器下载:https://gitee.com/percipioxyz/camport3_visionpro

使用 git 指令获取本地副本:打开终端,切换到需存放 SDK 的工作目录下,输入 git clone 命令克隆远程仓库。

git clone https://gitee.com/percipioxyz/camport3_visionpro.git

3.软件部署

1.将 PercipioCamera.dll、PercipioCameraExtern.dll、tycam.dll 、opencv_world460.dll拷贝到 VisionPro 的 bin 目录,如果是默认安装,路径位于 C:\ProgramFiles\Cognex\VisionPro\bin
2.将 PercipioCameraToolBlock.vtt 拷贝到 VisonPro 工具模板目录。如果是默认安装,路径位于 C:\ProgramFiles\Cognex\VisionPro\bin\Templates\Tools
3.进入VisionPro后,依次点击下图中的位置,调PercipioCameraToolBlock工具。
在这里插入图片描述
4.点击PercipioCameraToolBlock界面的“输入/输出”
在这里插入图片描述

PercipioCameraToolBlock的输入参数说明:
1.CameraId:需要打开的相机序列号。
2.Z:相机与投影平面在 Z 方向的距离,单位 mm,将深度图向此投影平面做正交投影。结合该距离下的相机视野和深度图分辨率,可以求出单个像素大小 (mm) ,用于后续计算。
3.ScaleUnit:配置相机的ScaleUnit,以输出不同精度的深度值。
4.RegistrationMode:RGBD对齐开关。0:不对齐;1:rgb2depth;2:depth2rgb。

4.测试流程

4.1 遍历VisionPro SDK支持的参数

以PS800-E1相机测试为主,测试项及其测试方法和结果如下表所示
在这里插入图片描述

4.2 设置示例

4.2.1_cameraSingle.SetTriggerMode

设置触发模式

int triggermode = (int) En_TRIGGER_MODE.TY_TRIGGER_MODE_SLAVE;
int set_trigger_mode = _cameraSingle.SetTriggerMode(ref triggermode);
if (set_trigger_mode != 0) 
{
	_cameraSingle.close();
	NativeMethods.deinitLib();
	_cameraSingle = null;
	throw new Exception("set trigger mode  failed, error code: " 
	 +set_trigger_mode);
}

如果设置成软触发工作模式,还需再start capture之后添加以下代码,发送软触发信号:

if(triggermode == (int) En_TRIGGER_MODE.TY_TRIGGER_MODE_SLAVE)
{
int sendsofttrigger = _cameraSingle.sendSoftTrigger();
if(sendsofttrigger != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("send soft trigger  failed, error code: " +sendsofttrigger);
	}
}

4.2.2 _cameraSingle.SetRegistration

设置对齐模式

_cameraSingle.SetRegistration(0);

也可以直接在PercipioCameraToolBlock页面设置输入参数RegistrationMode,无需写代码。

4.2.3_cameraSingle.SetInt

int set_exp = _cameraSingle.SetInt((int)EnDeviceComponent.TY_COMPONENT_RGB_CAM,(int)En_FEATURE_ID.TY_INT_EXPOSURE_TIME,1088);
if(set_exp != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
	throw new Exception("set exp failed, error code: " + set_exp);
}

4.2.4 _cameraSingle.GetInt

int exp = 0;
int get_exp = _cameraSingle.GetInt((int) EnDeviceComponent.TY_COMPONENT_RGB_CAM, (int) En_FEATURE_ID.TY_INT_EXPOSURE_TIME, ref exp);
if(get_exp != 0)
{
	_cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("get exp failed, error code: " + get_exp);
}
else
{
      //待补充
}

4.2.5 _cameraSingle.SetBool

int set_aec = _cameraSingle.SetBool((int)EnDeviceComponent.TY_COMPONENT_RGB_CAM,(int)En_FEATURE_ID.TY_BOOL_AUTO_EXPOSURE,false );
if(set_aec != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
     _cameraSingle = null;
    throw new Exception("set aec failed, error code: " +set_aec);
}

4.2.6 _cameraSingle.GetBool

bool aec_status = true;
int get_aec = _cameraSingle.GetBool((int) EnDeviceComponent.TY_COMPONENT_RGB_CAM, (int) En_FEATURE_ID.TY_BOOL_AUTO_EXPOSURE, ref aec_status);
if(get_aec != 0)
{
	_cameraSingle.close();
	NativeMethods.deinitLib();
	_cameraSingle = null;
	throw new Exception("get_aec failed, error code: " + get_aec);
}

4.2.7 _cameraSingle.SetEnum

int resolution = CameraSingle.ImageMode(TY_PIXEL_FORMAT_LIST.TY_PIXEL_FORMAT_DEPTH16, TY_RESOLUTION_MODE_LIST.TY_RESOLUTION_MODE_1280x960);
int set_depth_resolution = _cameraSingle.SetEnum((int) EnDeviceComponent.TY_COMPONENT_DEPTH_CAM, (int) En_FEATURE_ID.TY_ENUM_IMAGE_MODE, resolution);
if(set_depth_resolution != 0)
{
	_cameraSingle.close();
	NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("set depth resolution failed, error code: " +  set_depth_resolution); 
}

4.2.8 _cameraSingle.GetEnum

int resolution_value = 0;
int get_depth_resolution = _cameraSingle.GetEnum((int) EnDeviceComponent.TY_COMPONENT_DEPTH_CAM, (int) En_FEATURE_ID.TY_ENUM_IMAGE_MODE, ref resolution_value);
if(get_depth_resolution != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("get depth resolution failed, error code: " + get_depth_resolution); 
}

4.2.9 _cameraSingle.SetFloat

int set_unit = _cameraSingle.SetFloat((int) EnDeviceComponent.TY_COMPONENT_DEPTH_CAM, (int) En_FEATURE_ID.TY_FLOAT_SCALE_UNIT, 5f);

4.2.10 _cameraSingle.GetFloat

float scale_unit= 0;
int get_unit = _cameraSingle.GetFloat((int) EnDeviceComponent.TY_COMPONENT_DEPTH_CAM, (int) En_FEATURE_ID.TY_FLOAT_SCALE_UNIT, ref scale_unit);

4.2.11 _cameraSingle.SetScaleUnit

float scaleUnit = 0.25f;
int ret = _cameraSingle.SetScaleUnit(scaleUnit);    
if(ret != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("Set ScaleUnit Failure!");
}

可以直接在界面上输入,无需写代码。

4.2.12 _cameraSingle.GetScaleUnit

float get_scale = _cameraSingle.GetScaleUnit();

5.常见FAQ

1.每次运行只能采一张图,再次点击运行时会报错-1016。
2.使用图漾PercipioViewer软件保存的Png图片,是16位灰度图,可以使用Cog3DImageConvertTool这个Vtt文件,将16位灰度图转换成CogImage16Range,之后供VisionPro的3D工具应用。
3.图漾官网上下载的VisionPro的SDK,是旧的版本,建议使用链接上的V1.0.4版本的SDK。
4.切记使用图漾TOF相机,使用改插件,会有一些问题,有问题,请及时联系图漾技术。

;