图漾相机错误码解析(待补充)
文章目录
- 1.相机错误码汇总
- 2.常见报错码
- 2.1 -1001报错
- 2.1.1 没有找到相机
- 2.1.2 SDK没有进行初始化
- 2.2 -1005报错
- 2.2.1 跨网段打开相机
- 2.2.2 旧版本SDK在软触发失败后提示的报错
- 2.2.3 相机初始化上电时报错
- 2.2.4 USB相机被占用
- 2.3 -1009报错
- 2.3.1 相机本身不支持改属性
- 2.4 -1014报错
- 2.4.1 超时时间设置较小
- 2.4.2 相机丢帧
- 2.5 -1016报错
- 2.5.1 SDK调用逻辑有问题
- 2.5.2 相机在StartCapture后处于busy状态
- 2.6 -1018报错
- 2.6.1 网络因素造成的丢帧
- 2.7 -1024报错
- 3.综合问题
1.相机错误码汇总
1.相机自身常见的错误码如下,具体含义稍后阐述:
TY_STATUS_OK = 0, //相机正常工作TY_STATUS_ERROR = -1001,//相机状态异常TY_STATUS_NOT_INITED = -1002, //相机未初始化TY_STATUS_NOT_IMPLEMENTED = -1003, //相机未实现TY_STATUS_NOT_PERMITTED = -1004, //状态不允许TY_STATUS_DEVICE_ERROR = -1005, //相机设备错误TY_STATUS_INVALID_PARAMETER = -1006, //非法的参数TY_STATUS_INVALID_HANDLE = -1007,//非法的设备句柄TY_STATUS_INVALID_COMPONENT = -1008,//非法的设备组件TY_STATUS_INVALID_FEATURE = -1009,//非法的属性TY_STATUS_WRONG_TYPE = -1010,//错误类型TY_STATUS_WRONG_SIZE = -1011,//错误的尺寸TY_STATUS_OUT_OF_MEMORY = -1012,//超出memoryTY_STATUS_OUT_OF_RANGE = -1013,//超出范围TY_STATUS_TIMEOUT = -1014,//设备取图超时TY_STATUS_WRONG_MODE = -1015,//错误的模式TY_STATUS_BUSY = -1016,//系统处于忙碌中TY_STATUS_IDLE = -1017,//相机未回到idle状态TY_STATUS_NO_DATA = -1018,//未取到完整图像数据TY_STATUS_NO_BUFFER = -1019,//buffer中无数据TY_STATUS_NULL_POINTER = -1020,//空指针TY_STATUS_READONLY_FEATURE = -1021,//只读的属性TY_STATUS_INVALID_DESCRIPTOR= -1022,//非法描述TY_STATUS_INVALID_INTERFACE = -1023, //非法的接口TY_STATUS_FIRMWARE_ERROR = -1024, //固件相关错误/* ret_code from remote device */TY_STATUS_DEV_EPERM = -1,//operation not permittedTY_STATUS_DEV_EIO = -5,// I/O erTY_STATUS_DEV_ENOMEM = -12,//not enough memoryTY_STATUS_DEV_EBUSY = -16, //device is busy,属于相机内部busyTY_STATUS_DEV_EINVAL = -22,//相机内部初始化异常/* endof ret_code from remote device */
而在打开相机的过程中,遇到-1024报错,一定要打起十二分的精神,具体错误码含义如下:
TY_FW_ERRORCODE_CAM0_NOT_DETECTED = 0x00000001, //没有检测到左IRTY_FW_ERRORCODE_CAM1_NOT_DETECTED = 0x00000002,//没有检测到右IRTY_FW_ERRORCODE_CAM2_NOT_DETECTED = 0x00000004,//没有检测到Color相机TY_FW_ERRORCODE_POE_NOT_INIT = 0x00000008,//POE初始化异常TY_FW_ERRORCODE_RECMAP_NOT_CORRECT = 0x00000010,//极线校正错误RecMap errorTY_FW_ERRORCODE_LOOKUPTABLE_NOT_CORRECT = 0x00000020,//视差匹配错误 Disparity error TY_FW_ERRORCODE_DRV8899_NOT_INIT = 0x00000040,//舵机初始化异常 Motor init erroTY_FW_ERRORCODE_FOC_START_ERR = 0x00000080,//舵机开启失败 Motor start failedTY_FW_ERRORCODE_CONFIG_NOT_FOUND = 0x00010000,//相机内部缺失config文件 Config file not existTY_FW_ERRORCODE_CONFIG_NOT_CORRECT = 0x00020000,//相机内部config文件损坏 Broken Config fileTY_FW_ERRORCODE_XML_NOT_FOUND = 0x00040000,//相机内部缺失xml文件 XML file not existTY_FW_ERRORCODE_XML_NOT_CORRECT = 0x00080000,//解析xml文件失败 XML Parse errTY_FW_ERRORCODE_XML_OVERRIDE_FAILED = 0x00100000,//非法的xml文件,只可用于debug测试 Illegal XML file overrided Only Used in Debug Mode!" TY_FW_ERRORCODE_CAM_INIT_FAILED = 0x00200000,//初始化相机默认属性失败 Init default cam feature failed!TY_FW_ERRORCODE_LASER_INIT_FAILED = 0x00400000,//初始化相机Laser属性失败 Init default laser feature failed!
2.常见报错码
2.1 -1001报错
相机出现-1001报错,可能的原因如下:
2.1.1 没有找到相机
解决措施:
需要检查下相机是否正常供电,相机状态指示灯是否正常,相机状态指示灯如下图所示,同时通过PercipioViewer软件能否正常枚举到相机。
2.1.2 SDK没有进行初始化
以C++版本SDK为例,需要完整调用以下两个接口,否则容易在初始化枚举设备时出现-1001报错
LOGD("=== Init lib");ASSERT_OK( TYInitLib() );TY_VERSION_INFO ver;ASSERT_OK( TYLibVersion(&ver) );LOGD(" - lib version: %d.%d.%d", ver.major, ver.minor, ver.patch);
2.2 -1005报错
2.2.1 跨网段打开相机
原因1
:
相机的 IP 地址与上位机 IP 地址不在同一网段,若相机的 IP 地址与上位机 IP 地址不在同一网段,上位机可跨网段发现该相机,但不能打开。此时,可修改相机 IP 地址或上位机IP 地址。
解决措施1
:
相机出厂默认IP为169.254.X.X
网段,如果是第一次连接图漾相机,建议先将电脑上网络适配器改为自动IP,通过PeripioViewer连接一下相机,之后将电脑上网络适配器改为静态IP后,再将相机设置为静态IP。
原因2
:
之前在A电脑上将旧相机IP设置为192.168.1.X网段,在B电脑(与A电脑不在同一个网段)上,提示-1005报错。
解决措施2
:
使用官网最新的PercipioViewer软件打开相机,进行更改IP操作,具体步骤如下:
图漾相机更改IP操作
2.2.2 旧版本SDK在软触发失败后提示的报错
原因
:
3.6.53版本之前的SDK,触发超时错误码是-1005
解决措施
:
升级一下相机SDK或者旧SDK里面规避一下此问题。
if (m_run_model == CameraModel::TRIGGER && m_get_data){int isok=TYSendSoftTrigger(hDevice);if (TY_STATUS_OK!=isok){//trigger muti timeLogError("soft trigger fail!");LogInfo("camera return :"<<isok)if (isok==-1005){ASSERT_OK(TYStopCapture(hDevice));std::this_thread::sleep_for(std::chrono::milliseconds(600));ASSERT_OK(TYStartCapture(hDevice));continue;}else{std::this_thread::sleep_for(std::chrono::milliseconds(200));continue;}};}
2.2.3 相机初始化上电时报错
原因
:
上电到初始化完成整个过程约40s
,初始化完成后,Power灯以 1HZ 频率闪烁,Ethernet 灯常亮(表示相机为千兆网),Act 灯会在有数据传输时闪烁。如果在刚上电的时候,就打开相机,会提示-1005报错,这个跟相机底层枚举机制有关系,初始上电时,建议加一些延时。
2.2.4 USB相机被占用
请排查是否有其他进程占用了该 USB 相机(如 Percipio Viewer 工具)。若是其他进程占用了该相机,关闭进程即可。
2.3 -1009报错
2.3.1 相机本身不支持改属性
原因
:
如TM461-E2相机本身不支持触发,如果SDK设置触发模式,此时会报错
解决措施
:
屏蔽对应报错代码。
2.4 -1014报错
2.4.1 超时时间设置较小
原因
:
程序中 TYFetchFrame 中的超时时间设置过短。
解决措施
:
请根据相机的出图延迟时间合理设置超时时间,推荐5000以上,单位:毫秒。
TYFetchFrame(hDevice, &frame, 5000);
2.4.2 相机丢帧
原因1
:
相机进入百兆网时,Ethernet 灯处于熄灭状态,如下图所示:
解决措施1
:
1.首先检测硬件配置,排查顺序依次是网口->网线->交换机/网卡配置。
2.尤其是PS800/802/FM855/815/TL430
等使用X-Code线缆的相机,一定要注意检查Pin针是否歪了,如下图所示
3.其次确认所用网线是否为CAT5E及以上的网线(千兆网线)。
4.确认是否是独享带宽交换机,同时开启了交换机Web功能,开启Web功能,不同交换机型号不太一样,以 TP-LINK TL-SG2210PE 为例介绍如何开启流控,具体操作请参考下面链接
开启交换机流控功能
5.如果相机另外一端连接的是网卡,请参考下面链接第四章节,进行网卡设置。
Windows环境网卡设置
原因2
:
数据量太大
解决措施2
:
数据量太大,上位机处理能力不足。建议更换性能好的上位机或者减少数据量。
原因3
:
SDK中未开启网络重传
解决措施3
:
LOGD("=== resend: %d", resend);if (resend) {bool hasResend;ASSERT_OK(TYHasFeature(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_GVSP_RESEND, &hasResend));if (hasResend) {LOGD("=== Open resend");ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_GVSP_RESEND, true));}else {LOGD("=== Not support feature TY_BOOL_GVSP_RESEND");}}
原因4
:
一台上位机同时运行多台相机
解决措施4
:
打开多相机瞬间CPU升高,相机一定时间内没有收到心跳包。
2.5 -1016报错
2.5.1 SDK调用逻辑有问题
原因1
:
配置相机属性时,报错-1016
解决措施1
:
需要在TYStartCapture() 之前配置的参数,写在startcapture之后。
如设置相机图像的分辨率、设置相机的工作模式等。
具体参见相机fetch_config.xml文件。若writableAtRun≠"1",则必须写在 TYStartCapture() 之前。
2.5.2 相机在StartCapture后处于busy状态
原因2
:
发送软触发命令时存在-1016的报错。
个别相机如:TL460-S1-E1、FM851-S1-E2内部带算力的相机,在相机TYStartCapture()之后,会有一段busy时间,这个时间内发送软触发命令,会造成-1016报错。
解决措施2
:
1.增加一段延迟时间,MSLEEP(7000);
2.将代码进行修改,如下:
while(TY_STATUS_BUSY == TYSendSoftTrigger(hDevice));
2.6 -1018报错
2.6.1 网络因素造成的丢帧
原因1
:
网络波动,造成的丢帧,如日志中出现DropImage或者Ignoring frame。
原因2
:
旧版本的SDK(3.6.48版本之前),某次sendSoftTrigger超时,但是未正常处理(只检测了busy),或者是软触发指令没有下发下去,造成取不到图 。
2.7 -1024报错
1.打印error code,进行对比,确定问题发生的原因,将TYOpenDevice()接口调用修改如下:
TY_FW_ERRORCODE fw_err;
ASSERT_OK( TYOpenDevice(hIface, selectedDev.id, &hDevice,&fw_err) );
LOGD("%x", fw_err);
2.运行程序,读出fw_error 后进行对照下表找出对应的错误。
cam0表示left ir,cam1表示right ir,cam2表示color。
3.如出现TY_FW_ERRORCODE_POE_NOT_INIT 错误,请确认PoE的型号是否符合协议标准。
3.综合问题
待补充