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

1.下载并安装VisionPro软件

请自行下载VisonPro软件。

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

2.下载PercipioCameraForVisionPro软件包

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

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

cpp 复制代码
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

设置触发模式

csharp 复制代码
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之后添加以下代码,发送软触发信号:

csharp 复制代码
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

设置对齐模式

csharp 复制代码
_cameraSingle.SetRegistration(0);

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

4.2.3_cameraSingle.SetInt

csharp 复制代码
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

csharp 复制代码
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

csharp 复制代码
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

csharp 复制代码
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

csharp 复制代码
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

csharp 复制代码
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

csharp 复制代码
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

csharp 复制代码
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

csharp 复制代码
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

csharp 复制代码
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相机,使用改插件,会有一些问题,有问题,请及时联系图漾技术。

相关推荐
youngong1 天前
强迫症之用相机快门数批量重命名文件
数码相机·文件管理
weixin_466485115 天前
halcon标定助手的使用
数码相机
诸葛务农6 天前
ToF(飞行时间)相机在人形机器人非接触式传感领域内的应用
数码相机·机器人
塞北山巅6 天前
相机自动曝光(AE)核心算法——从参数调节到亮度标定
数码相机·算法
美摄科技7 天前
相机sdk是什么意思?
数码相机
phyit7 天前
全景相机领域,影石何以杀出重围?
数码相机
鄃鳕7 天前
装饰器【Python】
开发语言·python·数码相机
聪明不喝牛奶7 天前
【已解决】海康威视相机如何升级固件
数码相机
PAQQ7 天前
1站--视觉搬运工业机器人工作站 -- 相机部分
数码相机·机器人
诸葛务农7 天前
人形机器人基于视觉的非接触式触觉传感技术
数码相机·机器人