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

相关推荐
格林威6 小时前
工业视觉检测:OpenCV FPS 正确计算的方式
运维·人工智能·数码相机·opencv·机器学习·计算机视觉·视觉检测
格林威1 天前
AI视觉检测:模型量化后漏检率上升怎么办?
人工智能·windows·深度学习·数码相机·计算机视觉·视觉检测·工业相机
gaosushexiangji1 天前
用于焊接机理研究的高速相机选型参考:S1315在激光电弧复合焊接熔池观测中的实验验证
数码相机
AGV算法笔记1 天前
最新感知算法论文分析:RaCFormer 如何提升雷达相机 3D 目标检测性能?
数码相机·算法·3d·自动驾驶·机器人视觉·3d目标检测·感知算法
三维频道1 天前
光学像素重构物理真实:极限工况下的 DIC 全场测量逻辑
数码相机·重构·全场应变测量·数字图像相关技术·可靠性测试·cae仿真对比·无损检测
空中海1 天前
第九章:安卓系统能力与平台集成
android·数码相机
moonsims1 天前
基于AiBrainBox-UGV的Smart RoBot系统架构&多Smart Robot协同架构:数据流 + 多机协同架构图
人工智能·数码相机·无人机
码农的日常搅屎棍1 天前
视觉标定--眼在手上整相机标定步骤适配随机工作平面
人工智能·数码相机·计算机视觉
三维频道1 天前
精密功能主义:DIC全场变形检测的系统秩序与物理真实
数码相机·机器人·xtdic·精密功能主义·光学测试装备·微距形变分析·机器视觉应用
gaosushexiangji1 天前
基于sCMOS相机的冷离子云成像与量子测量实验研究
数码相机