图漾相机——Sample_V1示例程序

文章目录

  • 1.SDK支持的平台类型
    • [1.1 Windows 平台](#1.1 Windows 平台)
    • [1.2 Linux平台](#1.2 Linux平台)
  • 2.SDK基本知识
    • [2.1 SDK目录结构](#2.1 SDK目录结构)
    • [2.2 设备组件简介](#2.2 设备组件简介)
    • [2.3 设备组件属性](#2.3 设备组件属性)
    • [2.4 设备的帧数据管理机制](#2.4 设备的帧数据管理机制)
    • [2.5 SDK中的坐标系变换](#2.5 SDK中的坐标系变换)
  • 3.Sample_V1示例程序
    • [3.1 DeviceStorage](#3.1 DeviceStorage)
    • [3.2 DumpCalibInfo](#3.2 DumpCalibInfo)
    • [3.3 NetStatistic](#3.3 NetStatistic)
    • [3.4 SimpleView_SaveLoadConfig](#3.4 SimpleView_SaveLoadConfig)
    • [3.5 SimpleView_FetchFrame](#3.5 SimpleView_FetchFrame)
    • [3.6 SimpleView_Callback](#3.6 SimpleView_Callback)
    • [3.7 SimpleView_SGBM](#3.7 SimpleView_SGBM)
  • 参考

1.SDK支持的平台类型

1.1 Windows 平台

Windows SDK 支持 X86(32位)和 X64(64位)硬件平台,并提供支持 Window7 及以上版本操作系统的驱动文件。

1.2 Linux平台

Linux SDK 支持 AArch64、ARMv7hf、RaspberryPi、i686 和 x86-64 硬件平台,并为开发者编译程序提供相应平台的库文件。

2.SDK基本知识

2.1 SDK目录结构

Include:头文件

TYApi.h :设备操作的常规接口
TYCoordinateMapper.h :坐标系变换相关接口
TYImageProc.h :畸变校正/滤波接口
TyIsp.h:RAW RGB数据的软ISP处理代码

Lib :

各类平台下的动态库文件及windows平台下sample程序
sample:

SDK中示例代码,通过CMake跨平台自动构建项目,详细功能参见在线文档:https://doc.percipio.xyz/cam/latest/getstarted/compile.html

2.2 设备组件简介

TY_DEVICE_COMPONENT_LIST(TYApi.h):

TY_COMPONENT_DEVICE :用于设置相机本身属性,例如触发属性,网口相机的IP参数等
TY_COMPONENT_DEPTH_CAM :用于设置深度相机属性,例如是能深度数据通道,设置深度数据分辨率等
TY_COMPONENT_IR_CAM_LEFT :用于设置左IR相机属性
TY_COMPONENT_IR_CAM_RIGHT :用于设置右IR相机属性
TY_COMPONENT_LASER :用于设置激光器属性,例如激光器强度,设置激光器自动控制使能等
TY_COMPONENT_RGB_CAM:用于设置RGB相机属性,例如使能RGB通道数据,设置RGB分辨率,曝光时间,增益等

2.3 设备组件属性

TY_FEATURE_ID_LIST:

1.相机的所有组件所有属性

2.并不是相机会支持这里面所有的属性,可通过API接口TYHasFeature 的返回值判断是否支持。

3.属性的设置/获取可以通过API接口进行操作: TYSetBool/TYSetInt/TYSetFloat/TYSetStruct...
TYGetBool/TYGetInt/TYGetFloat/TYGetStruct...

4.部分属性参数存在一个range范围,可通过API接口TYGetIntRange/ TYGetFloatRange读取。

2.4 设备的帧数据管理机制

1.设备初始化的时候设置好使能的通道/分辨率/格式之后,可通过API接口TYGetFrameBufferSize 获取Frame包大小。

2.可根据获取的Frame包尺寸分配buffer

3.调用TYEnqueueBuffe r将分配的buffer加入到SDK的数据缓冲队列中。

4.调用TYFetchFrame 将能从SDK缓冲队列中获取一帧数据。

5.处理完数据之后,重新调用TYEnqueueBuffer将buffer重新加入SDK缓冲队列。


设备的帧数据管理机制示意图

2.5 SDK中的坐标系变换

深度图的像素坐标系和空间坐标系(点云)

TYMapDepthToPoint3d/ TYMapDepthImageToPoint3d TYMapPoint3dToDepth/TYMapPoint3dToDepthImage

点云空间坐标系变换

TYMapPoint3dToPoint3d

深度图和RGB图像素坐标系变换

TYMapDepthToColorCoordinate/TYMapDepthImageToColorCoordinate

TYMapRGBImageToDepthCoordinate

3.Sample_V1示例程序

下面运行exe程序,可以通过鼠标右键+shift按键,打开powershell运行

3.1 DeviceStorage

该示例程序用于操作custom_block.bin和isp_block.bin的存储空间。

使用方法:
1.操作custom_block.bin 存储空间

1)写入文件内容 :将1.txt文件中的内容写入custom_block.bin。

运行示例程序:

cpp 复制代码
.\DeviceStorage.exe -id 207000151696 -b custom -i 1.txt

2)读出内存中的文件内容并输出到程序运行目录下。

运行示例程序:

cpp 复制代码
.\DeviceStorage.exe -id 207000151696 -b custom -o 2.txt

注释:207000151696是相机序列号,根据实际情况更改

2.操作isp_block.bin存储空间

1)写入文件内容 :将1.txt文件中的内容写入isp_block.bin 。

运行示例程序:

cpp 复制代码
.\DeviceStorage.exe -id 207000151696 -b isp -i 1.txt

2)读出内存中的文件内容并输出到程序运行目录下。

运行示例程序:

cpp 复制代码
.\DeviceStorage.exe -id 207000151696 -b isp -o 2.txt

3.2 DumpCalibInfo

SDK3.6.52之后版本新增示例程序,此示例程序可以将相机的标定参数以json文件的形式导出到本地。

使用方法:
1.导出原始的标定参数文件:

cpp 复制代码
.\DumpCalibInfo.exe -id 相机序列号 -cs 0 -ds 0 -out_json FM855-E1-G.json

-cs 0 :表示设置RGB分辨率为列表中的第一个
-ds 0 :表示设置depth分辨率为列表中的第一个
-out_json:指定输出文件的名字及路径

2.导出当前的标定参数文件:

cpp 复制代码
.\DumpCalibInfo.exe -id 207000151696 -cs 1 -ds 2  -mode 0 -out_json FM855-E1-G.json

-mode 0:表示读取当前设置后的标定参数,读取到的内参会随分辨率变化,其他模式均为原始的标定参数。

3.3 NetStatistic

该示例程序用于测试网络相机图像的丢包率。

示例程序如下:

cpp 复制代码
TY_CAMERA_STATISTICS st;
ASSERT_OK( TYGetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_CAM_STATISTICS, &st, sizeof(st)) );
LOGI("Statistics:");
LOGI("  packetReceived: %" PRIu64 " ", st.packetReceived);
LOGI("  packetLost    : %" PRIu64 " ", st.packetLost);
LOGI("  imageOutputed : %" PRIu64 " ", st.imageOutputed);
LOGI("  imageDropped  : %" PRIu64 " ", st.imageDropped);

packetReceived :上位机共收到的数据包数量
packetLost :上位机共未收到的数据包数量
imageOutputed :上位机总的收到的图像数量(与数据流个数成整倍数关系)
imageDropped:上位机总的未收到的图像数量

3.4 SimpleView_SaveLoadConfig

该示例程序给出了保存/导出相机配置参数的demo。

参数配置文件有自己的格式,格式错误会校验不通过,从而功能失效。

若需正确的参数配置文件,请使用PV软件导出一份。

使用方法:

1.将参数配置文件导入相机存储空间

运行示例程序:

cpp 复制代码
.\SimpleView_SaveLoadConfig.exe -id 207000151696 -s FM855.json

2.将参数配置文件导出到本地程序运行目录下

运行示例程序:

cpp 复制代码
.\SimpleView_SaveLoadConfig.exe -id 207000151696 -o fm855.json
  1. write_parameters_to_storage
    向DeviceStorage写入包含featrue配置的json数据
  2. load_parameters_from_storage
    从DeviceStorage读出json并解码出json然后配置到相机

常见错误反馈:

cpp 复制代码
1.Error: The configuration file is too large, the maximum size should not exceed 4000 bytes:写入存储空间时,文件内容大于存储空间的大小
2.Error: The CRC check code is empty:加载参数时,存储空间没有内容
3.parameters load fail!:用write_parameters_to_storage()写入的文件内容错误,格式不匹配
4.Error: The data in the storage area has a CRC check error.:
存储空间的文件内容,不是以write_parameters_to_storage()接口写入的,在调用load_parameters_from_storage()时将返回此错误

3.5 SimpleView_FetchFrame

该示例程序用于深度相机工作在自由采集模式下连续采集图像并输出图像数据。

3.6 SimpleView_Callback

该示例程序用于深度相机工作在自由采集模式下连续采集图像,在独立的数据处理线程(防止堵塞图像数据获取)中进行 OpenCV 渲染,并输出图像数据。

sample/common/TYThread.cpp提供了简单的线程创建接口,通过开启线程循环fetch图像,以避免主线程的阻塞。

3.7 SimpleView_SGBM

SGM是一种用于计算双目视觉中视差(disparity)的半全局匹配算法,在OpenCV中的实现为semi-global block matching(SGBM)。

参考

1.双目立体匹配算法SGBM
https://blog.csdn.net/A_L_A_N/article/details/81490043?spm=1001.2014.3001.5506

2.双目立体匹配博客&资料汇总
https://blog.csdn.net/qq_38233873/article/details/135450586?spm=1001.2014.3001.5506

相关推荐
被AI抢饭碗的人3 小时前
c++:vector
开发语言·c++
_zwy3 小时前
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
linux·运维·c++·深度学习·神经网络
qystca3 小时前
【16届蓝桥杯寒假刷题营】第2期DAY4
数据结构·c++·算法·蓝桥杯·哈希
Xzh04235 小时前
c语言网 1127 尼科彻斯定理
数据结构·c++·算法
qystca6 小时前
【16届蓝桥杯寒假刷题营】第2期DAY5
c++·算法·蓝桥杯·贡献度
这是我587 小时前
链表的介绍
数据结构·c++·其他·链表·visual studio·介绍·图文结合
涛ing7 小时前
29. C语言 可变参数详解
linux·服务器·c语言·c++·windows·vscode·visual studio
智能与优化7 小时前
Windows 程序设计6:错误码的查看
开发语言·c++·windows
Golinie8 小时前
【C++高并发服务器WebServer】-10:网络编程基础概述
linux·服务器·网络·c++·socket
taoyong00111 小时前
代码随想录算法训练营第三十九天-动态规划-198. 打家劫舍
c++·算法·leetcode·动态规划