文章目录
- 1.FM851-E2相机
-
- [1.1 FM851-E2工作场景](#1.1 FM851-E2工作场景)
- [1.2 FM851-E2 IO线和数据线定义](#1.2 FM851-E2 IO线和数据线定义)
-
- [1.2.1 IO接口定义](#1.2.1 IO接口定义)
- [1.2.2 数据接口线](#1.2.2 数据接口线)
- [1.2.3 FM851-E2相机连接拓扑网络](#1.2.3 FM851-E2相机连接拓扑网络)
- [1.2.4 FM851-E2相机正面安装方向](#1.2.4 FM851-E2相机正面安装方向)
- [1.2.5 上下面螺纹孔安装](#1.2.5 上下面螺纹孔安装)
- [1.2.6 侧面螺纹孔安装](#1.2.6 侧面螺纹孔安装)
- [1.2.7 相机IO指示灯](#1.2.7 相机IO指示灯)
- [1.3 FM851-E2相机性能指标](#1.3 FM851-E2相机性能指标)
- 2.FM851-E2相机调参技巧
-
- [2.1 下载看图软件连接相机](#2.1 下载看图软件连接相机)
- [2.2 图漾PercipioViewer软件更改相机IP](#2.2 图漾PercipioViewer软件更改相机IP)
- [2.3 深度图调参](#2.3 深度图调参)
-
- [2.3.1 相机的IR参数](#2.3.1 相机的IR参数)
- [2.3.2 相机的Depth参数](#2.3.2 相机的Depth参数)
- [2.3.4 相机的RGB参数](#2.3.4 相机的RGB参数)
- [2.4 深度图评估](#2.4 深度图评估)
-
- [2.4.1 评估点云](#2.4.1 评估点云)
- [2.4.2 填充空洞](#2.4.2 填充空洞)
- [2.4.3 滤波功能](#2.4.3 滤波功能)
- [2.4.4 时域滤波功能](#2.4.4 时域滤波功能)
- [2.4.5 中值滤波](#2.4.5 中值滤波)
- [2.4.6 调节深度图渲染效果](#2.4.6 调节深度图渲染效果)
- [2.5 保存图像](#2.5 保存图像)
-
- [2.5.1 单张存图](#2.5.1 单张存图)
- [2.5.2 连续存图](#2.5.2 连续存图)
- [2.6 相机保存参数配置](#2.6 相机保存参数配置)
-
- [2.6.1 保存参数限制](#2.6.1 保存参数限制)
- [2.6.2 保存参数注意事项](#2.6.2 保存参数注意事项)
- 3.FM851-E2相机SDK相关
-
- [3.1 TYCamera之C++语言SDK(`推荐`)](#3.1 TYCamera之C++语言SDK(
推荐)) - [3.2 TYCamera之ROS1版本(`推荐`)](#3.2 TYCamera之ROS1版本(
推荐)) - [3.3 TYCamera之ROS2版本(`推荐`)](#3.3 TYCamera之ROS2版本(
推荐)) - 3.4 TYCamera之C#语言SDK
- [3.5 TYCamera之Python语言SDK](#3.5 TYCamera之Python语言SDK)
- [3.6 Halcon语言SDK](#3.6 Halcon语言SDK)
- [3.7 VisionPro语言SDK](#3.7 VisionPro语言SDK)
- [3.1 TYCamera之C++语言SDK(`推荐`)](#3.1 TYCamera之C++语言SDK(
- 4.FM851-E2相机常见FAQ
-
- [4.1 如何获取FM851-E2相机内参?](#4.1 如何获取FM851-E2相机内参?)
-
- [4.1.1 方法一 运行DumpCalibInfo](#4.1.1 方法一 运行DumpCalibInfo)
- [4.1.2 方法二 运行DumpAllFeature例子](#4.1.2 方法二 运行DumpAllFeature例子)
- [4.1.3 通过PV软件](#4.1.3 通过PV软件)
- [4.2 FM851-E2相机内参说明](#4.2 FM851-E2相机内参说明)
-
- [4.2.1 深度图内参](#4.2.1 深度图内参)
- [4.2.2 彩色图内参/畸变系数/外参](#4.2.2 彩色图内参/畸变系数/外参)
- [4.2.3 左右IR极限约束前内参/极限校正后内参](#4.2.3 左右IR极限约束前内参/极限校正后内参)
- [4.3 FM851-E2/FM855-E2-7相机光心位置](#4.3 FM851-E2/FM855-E2-7相机光心位置)
- 5.成像问题FAQ
-
- [5.1 FM851-E2 成像问题](#5.1 FM851-E2 成像问题)
-
- [5.1.1 黑色托盘成像差](#5.1.1 黑色托盘成像差)
- [5.2 RGB成像异常](#5.2 RGB成像异常)
-
- [5.2.1 设置R/G/B三通道](#5.2.1 设置R/G/B三通道)
- [5.2.2 设置AutonISP功能](#5.2.2 设置AutonISP功能)
-
- 5.2.2.1首先初始化
- [5.2.2.2 在调用RGB组件时,调用软ISP功能](#5.2.2.2 在调用RGB组件时,调用软ISP功能)
- [5.2.2.3 最后在关闭相机取流时,释放接口](#5.2.2.3 最后在关闭相机取流时,释放接口)
- [5.3 FM851-E2相机成像质量差](#5.3 FM851-E2相机成像质量差)
-
- 【问题描述】:
- 【排查过程】:
- [5.3.1 首先排查现场环境:](#5.3.1 首先排查现场环境:)
- [5.3.2 现场材质因素:](#5.3.2 现场材质因素:)
- [5.2.3 相机参数设置不合理:](#5.2.3 相机参数设置不合理:)
- [5.2.4 相机标定失效](#5.2.4 相机标定失效)
- [5.2.5 相机激光器损坏](#5.2.5 相机激光器损坏)
- [5.2.6 工作环境(主要是温度和湿度)](#5.2.6 工作环境(主要是温度和湿度))
- [5.2.7 相机安装高度角度](#5.2.7 相机安装高度角度)
- [5.2.8 相机工作距离偏远或者偏近](#5.2.8 相机工作距离偏远或者偏近)
- 6.FM851-E2相机测试结果
-
- [6.1 FM851-E2 帧率测试](#6.1 FM851-E2 帧率测试)
-
- [6.1.1 FM851-E2出图延迟时间](#6.1.1 FM851-E2出图延迟时间)
- [6.1.2 FM851-E2帧率测试](#6.1.2 FM851-E2帧率测试)
- 7.FM851-E2相机属性设置
-
- [7.1 Device组件](#7.1 Device组件)
- [7.2 Laser组件](#7.2 Laser组件)
- [7.3 Depth组件](#7.3 Depth组件)
- [7.4 RGB组件](#7.4 RGB组件)
- [7.5 左IR组件](#7.5 左IR组件)
- [7.6 右IR组件](#7.6 右IR组件)
- 8.其他学习资料
1.FM851-E2相机

FM851-E2相机外观
1.1 FM851-E2工作场景
适用材质 :室内常规蓝色托盘,木托盘
特点1 :波段830nm,抗光性较弱,不适合工作在有环境干扰的环境,如遇到这种场景,建议更换FM855-E2-7进行平替,或者使用FM854相机。
特点2 :建议托盘上边沿壁厚超过20mm,否则上边沿容易出现点云断裂现象。
不适用材质:黑色等低反射率材质托盘,现场环境有阳光斜射、顶部有天窗或者黑暗环境下使用(如果使用深度学习+3D模版匹配,RGB亮度不够,造成识别率偏低)。
1.2 FM851-E2 IO线和数据线定义
1.2.1 IO接口定义

电源&触发接口外观
1.2.2 数据接口线
FM851-E2相机,网路数据线如下图所示:

建议使用超五类网线。
如果相机在动态场景中使用,建议使用高柔线,非高柔线容易引发掉线问题。
1.2.3 FM851-E2相机连接拓扑网络
FM851-E2相机拓扑网络如下图:

DC供电方式

POE供电方式
1.2.4 FM851-E2相机正面安装方向
FM851-E2相机正面安装方向如下:

从左到右依次是右IR镜头,散斑投射器,RGB相机,左IR镜头。
1.2.5 上下面螺纹孔安装
FM851-E2相机上下面有一组M4螺纹孔(螺纹深度7mm)

1.2.6 侧面螺纹孔安装
FM851-E2相机侧面有一组M4螺纹孔(螺纹深度6mm)

1.2.7 相机IO指示灯
FM851-E2/FM855-E2-7相机状态指示灯如下图所示:

1.3 FM851-E2相机性能指标
FM851-E2相机的性能指标如下:


2.FM851-E2相机调参技巧
1.FM851-E2相机,仍建议使用官网PercipioViewer软件打开相机。
2.1 下载看图软件连接相机
1.FM851-E2相机,建议搭配图漾官网PercipioViewer看图软件使用,看图软件下载链接:图漾官网

2.PercipioViewer看图软件详细操作,可查看此链接:图漾官网PercipioViewer软件操作手册
2.2 图漾PercipioViewer软件更改相机IP
详细更改相机的IP操作,可打开链接:
2.3 深度图调参
2.3.1 相机的IR参数
PercipioViewer软件参数设置:

注 :关闭Light Source模块下的auto ctrl属性,这个时候,打开相机的左右IR取流,才能看到散斑图。
个人推荐的参数配置:

2.3.2 相机的Depth参数
PercipioViewer软件参数设置:

同时建议开启滤波设置,不然会有很多误匹配的点。

2.3.4 相机的RGB参数
PercipioViewer软件参数设置:

个人推荐的参数配置:

1.主要是将自动曝光目标亮度设置在3500 左右。
2.如果是在色温较大的工作场景,建议把RgbAWB自动白平衡 关掉。
3.每个参数的作用,可参看链接:相机参数作用
2.4 深度图评估
2.4.1 评估点云
打开深度取图开关,打开下图如下位置:

个人建议参考上图中的1 和3,2的数值会收到ROI大小和ROI是否平整等因素有关,会波动较大。
2.4.2 填充空洞

2.4.3 滤波功能

2.4.4 时域滤波功能

2.4.5 中值滤波

2.4.6 调节深度图渲染效果
个人推荐使用Turto 渲染功能,该功能类似Opencv中的colorformap函数。

2.5 保存图像
详细操作和图像格式,可打开链接:图漾看图软件保存图片
2.5.1 单张存图

具体操作步骤如下:

2.5.2 连续存图
Percipio Viewer 可以按照预设帧数连续保存图像(深度图、彩色图、左右灰度图、深度图映射至彩色图的对齐图、彩色图映射至深度图的对齐图、点云图、深度与彩色对齐后生成的点云图)。

保存的格式,具体说明如下:连续保存图片
2.6 相机保存参数配置
保存相机参数进相机storage区域,具体操作流程如下图:

2.6.1 保存参数限制
只能保存每个组件control 下的属性,其他的参数无法保存进相机里。

2.6.2 保存参数注意事项
1.在打开相机取流的时候,无法进行参数保存,需要关闭相机取流后,再进行保存参数。
2.无法保存相机Device组件里的触发属性,。

3.无法保存深度图和点云图的质量评估及后处理功能。

4.无法保存Color组件的校正畸变,以及AutoISP功能。

5.相机系统层的属性无法保存,如对时设置,接收包比例,图像重传等功能。
3.FM851-E2相机SDK相关
FM851-E2相机,推荐使用的编程语言和SDK版本如下:
3.1 TYCamera之C++语言SDK(推荐)
FM851-E2 相机,既可以使用官网3.X.X版本的SDK,也可以使用4.X.X版本的SDK。
具体操作和Sample和案例,可打开如下链接:
官网修改后的C++语言SDK,可参考链接:官网修改后的C++语言的SDK
1.如果只是单纯使用FM851-E2相机,或者其他旧的相机,没有使用GM46X和PMD相机,建议使用3.6.66 版本SDK。
2.如果同时使用FM851-E2和GM46X新相机,个人目前仍建议使用4.X.X版本中的Sample_V1例子。
3.2 TYCamera之ROS1版本(推荐)
FM851-E2 相机,既可以使用官网3.X.X版本的SDK,也可以使用4.X.X版本的SDK。
具体操作和Sample和案例,可打开如下链接:
1.图漾相机-ROS1_SDK_ubuntu_3.X.X版本编译
2.图漾相机-ROS1_SDK_ubuntu 4.X.X版本编译
1.如果只是单纯使用FM851-E2相机,或其他旧的相机,没有使用GM46X和PMD相机,建议使用3.6.66 版本SDK。
2.如果同时使用FM855-E1和GM46X新相机,建议使用4.1.14及其以上版本SDK。
3.3 TYCamera之ROS2版本(推荐)
FM851-E2 相机,既可以使用官网3.X.X版本的SDK,也可以使用4.X.X版本的SDK。
具体操作和Sample和案例,可打开如下链接:
1.图漾相机-ROS2-SDK-Ubuntu 3.X.X版本编译
2.图漾相机-ROS2-SDK-Ubuntu 4.X.X版本编译
1.如果是单纯使用FM851-E2相机,或者其他旧的相机,没有使用GM46X和PMD相机,建议使用3.6.66 版本SDK。
2.如果同时使用FM851-E2和GM46X新相机,建议使用4.1.14及其以上版本SDK。
3.4 TYCamera之C#语言SDK
1.目前只建议使用3.X.X版本
建议参考以下链接
如果涉及到和GM46X和PMD相机混用的情况,建议使用官网VCamera的SDK。
3.5 TYCamera之Python语言SDK
1.目前只建议使用3.X.X版本
建议参考以下链接:
1.图漾相机------Python 3.X.X版本属性设置
如果涉及到和GM46X和PMD相机混用的情况,建议使用官网VCamera的SDK。
3.6 Halcon语言SDK
建议参考以下链接:
1.图漾Halcon版本SDK使用教程【V1.1.X新版本】
3.7 VisionPro语言SDK
建议参考以下链接:
如果使用VisionPro调用TOF相机,请联系图漾技术,获取最新版本SDK。
4.FM851-E2相机常见FAQ
4.1 如何获取FM851-E2相机内参?
4.1.1 方法一 运行DumpCalibInfo
SDK3.6.52之后版本,新增示例程序,此示例程序可以将相机的标定参数以json文件的形式导出到本地。
编译C++语言中的例子,之后运行Sample_V1文件夹中的DumpCalibInfo 例子,会生成一个json文件,里面记录FM851--E2相机的内外参信息。

4.1.2 方法二 运行DumpAllFeature例子
使用官网如下路径下的x64 压缩包,通过鼠标右键+shift键 ,进入到PowerShell界面,运行DumpAllFeatures例子,生成对应内容:

4.1.3 通过PV软件
具体方法如下:


获取的fetch_config.xml内容如下:
cpp
<config version="1">
<comprotocol>1.0</comprotocol>
<component addr="0x01000000" id="0x80000000" name="device">
<feature hide="0" id="0x5f00" name="SN" rw="1">207000127711</feature>
<feature hide="0" id="0x5f01" name="vendor" rw="1">Percipio</feature>
<feature hide="0" id="0x5f02" name="model" rw="1">FM851-E2</feature>
<feature hide="0" id="0x5f08" name="user defined name" rw="1">Percipio</feature>
<feature addr="0x204" hide="0" id="0x1202" name="frame per trigger" rw="3">1</feature>
<feature addr="0x208" hide="0" id="0x7523" name="struct trigger mode" rw="3"/>
<feature addr="0x218" hide="0" id="0x7525" name="struct trigger mode ex" rw="3"/>
<feature absaddr="0x64c" hide="0" id="0x1010" name="persistent IP" rw="3"/>
<feature absaddr="0x65c" hide="0" id="0x1011" name="persistent netmask" rw="3"/>
<feature absaddr="0x66c" hide="0" id="0x1012" name="persistent gateway" rw="3"/>
<feature addr="0x400020" hide="0" id="0x1014" inc="1" max="10000" min="0" name="packet delay" rw="3"/>
<feature addr="0x400024" hide="0" id="0x1016" name="ntp server ip" rw="3"/>
<feature addr="0x214" hide="0" id="0x4207" name="trigger out io" rw="2" writableAtRun="1"/>
<feature addr="0x20c" hide="0" id="0x4205" name="cmos sync" rw="3"/>
<feature hide="0" id="0x4203" name="keep alive onoff" rw="3"/>
<feature hide="0" id="0x1204" inc="1" max="30000" min="2000" name="keep alive timeout" rw="3"/>
<feature addr="0x210" hide="0" id="0x1206" inc="1" max="1300000" min="0" name="trigger delay us" rw="3"/>
<feature addr="0x21C" hide="0" id="0x1208" inc="1" max="1300000" min="1" name="trigger duration us" rw="3"/>
<feature addr="0x220" hide="0" id="0x3209" name="stream async" rw="3">
<entry name="async off" value="0"/>
<entry name="async depth" value="1"/>
<entry name="async rgb" value="2"/>
<entry name="async depth rgb" value="3"/>
<entry name="async all" value="255"/>
</feature>
<feature addr="0x200" hide="0" id="0x3201" name="trig pol" rw="3">
<entry name="falling edge" value="0"/>
<entry name="rising edge" value="1"/>
</feature>
<feature addr="0x228" hide="0" id="0x1210" name="capture time us" rw="1" volatile="1"/>
<feature id="0x5fe0" name="device extrinsic" rw="1">1.0 4.40457132572e-20 0.0 0.0 0.0 1.0 1.73472347598e-18 0.0 -4.33680868994e-19 0.0 1.0 1.11022302463e-16 0.0 0.0 0.0 1.0</feature>
<feature id="0x5f03" name="hardware version" rw="1" hide="0">1.3.0</feature>
<feature id="0x5f04" name="firmware version" rw="1" hide="0">3.13.10</feature>
<build>
<hash>model:AP03B04-008AM81X_X_X7_F121_DVP_A2;rtl:R1.1.2_2_gfe6c7c23ac_dirty;kernel:R3.13.10-0-g0fc6405bf1;tycam:R3.5.15-2c5266f1;gevcam:R3.13.10-0-ge6287be0</hash>
</build>
<config_version>r3.11.0</config_version>
<tech_model>AM830-GTIS8-47</tech_model>
<generated_time>2021-08-13T160840</generated_time>
<calibration_time>2021-08-13T040317</calibration_time>
</component>
<component addr="0x02000000" id="0x00010000" name="depth">
<feature hide="0" id="0x210a" name="scale unit" rw="1">1.0</feature>
<feature hide="1" id="0x1003" name="intrinsic width" rw="1">1280</feature>
<feature hide="1" id="0x1004" name="intrinsic height" rw="1">960</feature>
<feature hide="0" id="0x7000" name="depth intrinsic" rw="1"> 1047.1476085893669 0.0 641.846752166748 0.0 1047.1476085893669 464.3055610656738 0.0 0.0 1.0</feature>
<feature addr="0x10" hide="0" id="0x1104" name="image width" rw="1"/>
<feature addr="0x14" hide="0" id="0x1105" name="image height" rw="1"/>
<feature addr="0x18" hide="0" id="0x3109" name="image mode" rw="3">
<entry name="DEPTH16_640x480" value="0x202801e0"/>
<entry name="DEPTH16_1280x960" value="0x205003c0"/>
<entry name="DEPTH16_320x240" value="0x201400f0"/>
</feature>
</component>
<component addr="0x03000000" id="0x00040000" name="leftir">
<feature addr="0x18" hide="0" id="0x3109" name="image mode" rw="1">
<entry name="mono8 1280x960" value="0x105003c0"/>
</feature>
<feature addr="0x10" hide="0" id="0x1104" name="image width" rw="1">1280</feature>
<feature addr="0x14" hide="0" id="0x1105" name="image height" rw="1">960</feature>
<feature hide="1" id="0x1003" name="intrinsic width" rw="1">1280</feature>
<feature hide="1" id="0x1004" name="intrinsic height" rw="1">960</feature>
<feature hide="0" id="0x7000" name="intrinsic" rw="1"> 1101.9485483947833 0.0 612.5489710744077 0.0 1102.212774526855 475.8324310018801 0.0 0.0 1.0</feature>
<feature hide="0" id="0x7006" name="distortion" rw="1"> 0.15237112688231955 -0.3441298258711977 0.003595272001527585 -0.01050512418262648 -0.1608824866357718 0.4044611491334077 -0.4043642223004059 -0.23885871129759392 0.021545671932857117 -0.005486894341414563 -0.007631869740162485 0.001954316368701212</feature>
<feature addr="0x324" hide="0" id="0x4510" name="undistort" rw="3"/>
<feature addr="0x304" hide="0" id="0x1301" inc="1" max="1088" min="3" name="exposure time" rw="3" writableAtRun="1"/>
<feature addr="0x310" hide="0" id="0x1303" inc="1" max="255" min="0" name="gain" rw="3" writableAtRun="1"/>
<feature addr="0x328" hide="0" id="0x1524" inc="1" max="3" min="0" name="analog gain" rw="3" writableAtRun="1"/>
</component>
<component addr="0x04000000" id="0x00080000" name="rightir">
<feature addr="0x18" hide="0" id="0x3109" name="image mode" rw="1">
<entry name="mono8 1280x960" value="0x105003c0"/>
</feature>
<feature addr="0x10" hide="0" id="0x1104" name="image width" rw="1">1280</feature>
<feature addr="0x14" hide="0" id="0x1105" name="image height" rw="1">960</feature>
<feature hide="1" id="0x1003" name="intrinsic width" rw="1">1280</feature>
<feature hide="1" id="0x1004" name="intrinsic height" rw="1">960</feature>
<feature hide="0" id="0x7000" name="intrinsic" rw="1"> 1104.2549745407143 0.0 671.8018952790227 0.0 1104.08652127482 456.21931273725335 0.0 0.0 1.0</feature>
<feature hide="0" id="0x7006" name="distortion" rw="1"> 0.1489084585466596 0.4014150534105256 -0.0023471376487645226 0.010779189300320216 0.2777526988375419 0.40262377096988705 0.3291142718480881 0.4160157563679487 -0.02184919806111351 0.004920811737662381 0.004696749575448125 -0.0013126782863131289</feature>
<feature hide="0" id="0x7001" name="rightIR to leftIR extrinsic" rw="1"> 0.9963463992308482 0.0022480394065279193 -0.08537446373799121 -78.94565719217945 -5.505610496070355e-05 0.9996702048306906 0.025680314300847513 0.3813918578209119 0.08540403801078836 -0.025581788299329368 0.9960179327697166 -3.390585174011509 0 0 0 1</feature>
<feature bind="0x00044510"/>
<feature addr="0x304" hide="0" id="0x1301" inc="1" max="1088" min="3" name="exposure time" rw="3" writableAtRun="1"/>
<feature addr="0x310" hide="0" id="0x1303" inc="1" max="255" min="0" name="gain" rw="3" writableAtRun="1"/>
<feature addr="0x328" hide="0" id="0x1524" inc="1" max="3" min="0" name="analog gain" rw="3" writableAtRun="1"/>
</component>
<component addr="0x05000000" id="0x00100000" name="rgb">
<feature addr="0x18" hide="0" id="0x3109" name="image mode" rw="3">
<entry name="BAYER8GB_1280x960" value="0x115003c0"/>
<entry name="BAYER8GB_640x480" value="0x112801e0"/>
</feature>
<feature addr="0x10" hide="0" id="0x1104" name="image width" rw="1" volatile="1"/>
<feature addr="0x14" hide="0" id="0x1105" name="image height" rw="1" volatile="1"/>
<feature hide="1" id="0x1003" name="intrinsic width" rw="1">1280</feature>
<feature hide="1" id="0x1004" name="intrinsic height" rw="1">960</feature>
<feature addr="0x304" hide="0" id="0x1301" inc="1" max="1088" min="3" name="exposure time" rw="3" writableAtRun="1"/>
<feature hide="0" id="0x7000" name="rgb intrinsic" rw="1"> 1086.21365398 0.0 659.42281138 0.0 1086.47059743 471.293685522 0.0 0.0 1.0</feature>
<feature hide="0" id="0x7001" name="rgb to leftIR extrinsic" rw="1"> 0.999276475118 0.000248267441684 0.0380324156445 24.0051025158 -0.00055702922314 0.999966974454 0.0081080034201 0.0065291451146 -0.03802914665 -0.00812332224482 0.999243611759 -0.341400972744 0.0 0.0 0.0 1.0</feature>
<feature hide="0" id="0x7006" name="distortion" rw="1">-0.401650579252 0.401347334634 0.00211463047862 0.0094172819058 0.227845964387 -0.154128692412 0.202589583973 0.391942301767 -0.0186964044167 0.00403450686443 -0.00405578879293 0.000782498930968</feature>
<feature addr="0x318" hide="0" id="0x1520" inc="1" max="255" min="0" name="r gain" rw="3" writableAtRun="1"/>
<feature addr="0x31c" hide="0" id="0x1521" inc="1" max="255" min="0" name="g gain" rw="3" writableAtRun="1"/>
<feature addr="0x320" hide="0" id="0x1522" inc="1" max="255" min="0" name="b gain" rw="3" writableAtRun="1"/>
<feature addr="0x328" hide="0" id="0x1524" inc="1" max="3" min="0" name="analog gain" rw="3" writableAtRun="1"/>
</component>
<component addr="0x07000000" id="0x00400000" name="laser">
<feature addr="0x500" hide="0" id="0x1500" inc="1" max="100" min="0" name="power" rw="3" writableAtRun="1"/>
<feature addr="0x504" hide="0" id="0x4501" name="auto ctrl" rw="3"/>
</component>
<component addr="0x08000000" id="0x01000000" name="histogram"> </component>
<component addr="0x09000000" id="0x02000000" name="storage">
<feature addr="0x100000" hide="0" id="0x600a" name="custom block" rw="3" size="4096" volatile="1"/>
<feature addr="0x200000" hide="0" id="0x600b" name="isp block" rw="3" size="65536" volatile="1"/>
</component>
</config>
4.2 FM851-E2相机内参说明
运行DumpCalibInfo例子,打印出来的内参如下:
cpp
而运行DumpAllFeature例子,得到的内参如下:
cpp
从此处看出,DumpCalibInfo 例子打印的是出厂标定的内外参,而DumpAllFeature例子,则是会根据分辨率,内参相应做出变化。
4.2.1 深度图内参


1.cx和cy通常大约是图像分辨率W和H的一半,得出FM851-E2相机深度图出厂标定分辨率为1280x960
2.由于深度相机是虚拟相机,所以其畸变参数以及外参都是零矩阵。
4.2.2 彩色图内参/畸变系数/外参
cpp
1.cx和cy通常大约是图像分辨率W和H的一半,得出FM851-E2相机深度图出厂标定分辨率为1280x960
2.彩色图相机的畸变系数如下:

cpp
用TYGetEnum(hDevice, comp_id, TY_ENUM_LENS_OPTICAL_TYPE, &lens_tpye)来区分新旧相机。
//TY_LENS_PINHOLE是小孔成像,RGB畸变系数依次是k1,k2,p1,p2,k3,k4,k5,k6,s1,s2,s3,s4
//TY_LENS_FISHEYE是新的鱼眼标定,RGB畸变系数依次是k1,k2,k3,k4
3.彩色图相机的外参如下:
cpp

4.2.3 左右IR极限约束前内参/极限校正后内参

双目立体匹配模型


cpp
cpp
4.3 FM851-E2/FM855-E2-7相机光心位置

同时通过RGB外参,可得知RGB至左IR应该在25mm左右。
cpp
5.成像问题FAQ
5.1 FM851-E2 成像问题
5.1.1 黑色托盘成像差
针对黑色材质,有环境光干扰的场景,FM851-E2是不适合的,如果涉及到旧车型改造,建议直接使用FM855-E2-7相机直接无缝替换。
5.2 RGB成像异常
在实际应用场景中,FM851-E2相机由于RGB相机本身,没有硬ISP功能,常常会出现R/G/B三通道增益值设置的不合理,造成采集的图片成像异常。常见情况如下图所示:

图片偏红

图片偏绿

图片偏蓝紫色

图片稍微正常

图片j基本正常
打开AutoISP设置,同时降低Exposure time曝光时间,可以得到一张比较正常的图像,但是此属性无法保存进相机storage区中。
R/G/B三通道参数参考设置值,大概按照3:2:3的一个比例去设置,如设置成32:20:32
5.2.1 设置R/G/B三通道
cpp
//获取RGB支持的属性
bool hasRGB_ANALOG_GAIN, hasRGB_R_GAIN, hasRGB_G_GAIN, hasRGB_B_GAIN, hasRGB_EXPOSURE_TIME;
ASSERT_OK(TYHasFeature(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_ANALOG_GAIN, &hasRGB_ANALOG_GAIN));
ASSERT_OK(TYHasFeature(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_R_GAIN, &hasRGB_R_GAIN));
ASSERT_OK(TYHasFeature(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_G_GAIN, &hasRGB_G_GAIN));
ASSERT_OK(TYHasFeature(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_B_GAIN, &hasRGB_B_GAIN));
ASSERT_OK(TYHasFeature(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_EXPOSURE_TIME, &hasRGB_EXPOSURE_TIME));
if (hasRGB_ANALOG_GAIN)
{
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_ANALOG_GAIN, 1));//设置RGB模拟增益[0,3]
}
if (hasRGB_R_GAIN)
{
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_R_GAIN, 32));//设置RGB数字增益R通道[0,255]
}
if (hasRGB_G_GAIN)
{
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_G_GAIN, 20));//设置RGB数字增益G通道[0,255]
}
if (hasRGB_B_GAIN)
{
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_B_GAIN, 32));//设置RGB数字增益B通道[0,255]
}
if (hasRGB_EXPOSURE_TIME)
{
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_EXPOSURE_TIME, 200));//设置RGB曝光时间【3,1088】
}
5.2.2 设置AutonISP功能
5.2.2.1首先初始化
cpp
TY_ISP_HANDLE hColorIspHandle = NULL;
5.2.2.2 在调用RGB组件时,调用软ISP功能
cpp
///try to enable color camera
if(allComps & TY_COMPONENT_RGB_CAM && color)
{
LOGD("Has RGB camera, open RGB cam");
ASSERT_OK( TYEnableComponents(hDevice, TY_COMPONENT_RGB_CAM) );
//create a isp handle to convert raw image(color bayer format) to rgb image
ASSERT_OK(TYISPCreate(&hColorIspHandle));
//Init code can be modified in common.hpp
//NOTE: Should set RGB image format & size before init ISP
ASSERT_OK(ColorIspInitSetting(hColorIspHandle, hDevice));
//You can call follow function to show color isp supported features
#if 0
ColorIspShowSupportedFeatures(hColorIspHandle);
#endif
//You can turn on auto exposure function as follow ,but frame rate may reduce .
//Device may be casually stucked 1~2 seconds while software is trying to adjust device exposure time value
#if 0
ASSERT_OK(ColorIspInitAutoExposure(hColorIspHandle, hDevice));
#endif
}
5.2.2.3 最后在关闭相机取流时,释放接口
cpp
ASSERT_OK( TYStopCapture(hDevice) );
ASSERT_OK( TYCloseDevice(hDevice));
ASSERT_OK( TYCloseInterface(hIface) );
ASSERT_OK(TYISPRelease(&hColorIspHandle));
ASSERT_OK( TYDeinitLib() );
5.3 FM851-E2相机成像质量差

【问题描述】:
相机在拍摄下面金属托盘时,点云缺失严重,无法通过调整参数,形成较好的图像。
【排查过程】:
5.3.1 首先排查现场环境:
是否有侧窗或者顶部有阳光斜射,如FM851-E2相机,由于激光波段是830nm的,在有环境光干扰的工作环境下,信噪比不够,造成成像欠佳。
【解决措施 】:
1.前期方案评估时,尽量考虑到现场环境对相机的影响
2.如果相机已经在现场使用,先适当降低相机IR的AnalogGain参数和Gain参数,查看成像是否会好一些,如仍无法解决,考虑用FM855-E2-7平替。
5.3.2 现场材质因素:
1. 确认现场材质是否有黑色托盘等低反射率材质,此时调整相机参数,在2m以外,很难拿到比较好的成像;
2. 而如果是高反金属,此时需要适当降低激光亮度降低曝光、增益和模拟增益。
【解决措施 】:
黑色托盘属于低反材质,FM851-E2无法胜任此场景,建议切换成FM854-E1和FM855-E1,如现场结构和线缆不允许更换,建议使用FM855-E2-7相机。
5.2.3 相机参数设置不合理:
如果需要查看散斑相机的IR图,首先需要关闭light Source里面的auto ctrl属性,之后再打开左右相机IR图查看散斑信息,是否过曝,过亮,详细操作如下图:

注意 :跟深度图相关的有IR Gain、IR AnalogGain和IR ExposureTime这三个参数可调,建议调节顺序为IR ExposureTime->IR AnalogGain->IR Gain 。
IR AnalogGain属性是对相机模拟信号进行放大,不建议设置过大,过大图像容易产生噪点。
【解决措施 】:
1.如调试参数不能得到一张比较好的深度图,建议联系图漾技术。
5.2.4 相机标定失效
由于运输过程或者其他因素,造成相机碰撞,或者相机散热未做好,导致相机散斑图出现模糊,从而使深度图成像较差,具体有以下两种方式去排查
方法一 :按照如下图所示操作,查看相机左右IR,同一个亮点,是否在同一水平线上。

方法二 :按照方法一的操作,可查看IR散斑是否有粘连或者模糊的情况,具体如下图:

相机左IR

相机右IR

左IR图的中心偏右下方比正常的模组要模糊一些。
【解决措施 】:
1.遇到此种情况,联系图漾技术确认后,需要返厂维修。
5.2.5 相机激光器损坏

需要相机打开取流,之后打开相机,若此处的散斑投射器没有发光,如未发光表示已损坏(可用安卓手机对着相机拍摄,看是否有激光闪烁),若损坏则需要寄回维修,更换激光器。
【解决措施 】:
1.遇到此种情况,联系图漾技术确认相机激光器损坏后后,需要返厂维修。
5.2.6 工作环境(主要是温度和湿度)
情况1 :如果在冷库或者偏北方的区域使用,有时候出现相机开机时正常,但工作一阵子后,深度图变差,查看此时IR图散斑图,呈模糊状,静止或者拆下来一会后,相机又成像正常;
情况2 :而如果频繁在冷库和室温环境来回切换,相机镜头表面有凝露,擦拭水珠后,成像又恢复正常。
情况3:相机在俄罗斯或者北方区域工作时,工作环境在0度以下,刚开始工作的时候,出现深度图比较差的情况,工作一阵子后,深度图逐渐正常。
【解决措施 】:
1.首先需要排除现场环境的干扰,之后排查是否有问题4和5现象。排查后如未发现问题,请联系图漾技术。
5.2.7 相机安装高度角度
根据实测数据,叉臂长度在 1.2 米之下时,安装高度在 0.35 米-0.45米左右;叉臂长度大于 1.2 米时,安装高度在在 0.45 米-0.8米左右。以上数据根据经验得出结论,不同的叉车会有差异。
相机与上表面的倾斜角度不建议操作30度,角度较大,容易对相机的立体匹配算法产生影响,同时对图像对齐会有些许影响,进而影响识别率。
【解决措施 】:
1.设计安装机构时,角度尽可能可调。
2.在相机工作范围内,如果倾斜角度较小,此时识别率较低,建议适当拉开相机与托盘的拍照距离。
5.2.8 相机工作距离偏远或者偏近
1.如在4m外拍摄蓝色托盘,托盘上边沿壁厚在20mm左右,此时托盘上边沿已经处于断裂状态。
2.测试过程中在700mm以内拍摄物体,属于相机工作盲区,无法成像。
3.相机的工作区间是在90%反射率下得出的。如果拍摄黑托盘等低反物体,尽量压缩工作区间。
6.FM851-E2相机测试结果
6.1 FM851-E2 帧率测试
6.1.1 FM851-E2出图延迟时间
出图延迟时间 :相机使用默认配置,在连续采集模式下统计从开始曝光到系统完全处理完图像的总之时间,单位微秒。
出图延时时间测试结果如下所示:

FM851-E2相机出图延迟时间结果
6.1.2 FM851-E2帧率测试
FPS(帧率) :指相机设置在自由采集模式下,上位机每秒采集的图像帧数。
FM851-E2帧率测试结果如下所示:

FM851-E2相机帧率结果
7.FM851-E2相机属性设置
7.1 Device组件

7.2 Laser组件
| 组件类型 | 属性名字 | 属性 | 默认范围 |
|---|---|---|---|
| TY_COMPONENT_LASER | 激光器亮度 | TY_INT_LASER_POWER | 默认50,范围[0,100] |
| 开关激光器 | TY_BOOL_LASER_AUTO_CTRL | 默认true,true/false |
7.3 Depth组件

7.4 RGB组件

7.5 左IR组件

7.6 右IR组件

8.其他学习资料
1. 图漾官网相机规格书