属性设置说明 (Gige_2_0 相机)
Device 组件下的属性
TY_TRIGGER_PARAM_EX
图漾相机包含多种工作模式设置:
TY_TRIGGER_MODE_OFF:自由采集模式
TY_TRIGGER_MODE_SLAVE:软触发/硬触发模式
TY_TRIGGER_MODE_M_SIG:相机接收到软触发信号后,自身触发的同时,在OutPut引脚输出信号,以触发从设备
TY_TRIGGER_MODE_M_PER:相机按照特定的帧率触发,同时在OutPut引脚输出信号,以触发从设备
生命周期: start-stop
设置方式:
TY_TRIGGER_MODE_OFF、TY_TRIGGER_MODE_SLAVE、TY_TRIGGER_MODE_M_SIG 设置方法统一如下:
TY_TRIGGER_PARAM_EX trigger; trigger.mode = TY_TRIGGER_MODE_OFF;//根据需要的工作模式进行配置 ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_PARAM_EX, &trigger, sizeof(trigger)));
TY_TRIGGER_MODE_M_PER 设置方法如下:
TY_TRIGGER_PARAM_EX param; param.mode = TY_TRIGGER_MODE_M_PER; param.fps = 5; ASSERT_OK(TYSetStruct(cams[count].hDev, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_PARAM_EX, (void*)¶m, sizeof(param)));
注解
TY_TRIGGER_MODE_M_SIG 和 TY_TRIGGER_MODE_M_PER固件版本需大于3.13.68,否则使用TY_TRIGGER_PARAM进行设置。
TY_INT_FRAME_PER_TRIGGER
该属性用于设置相机在接收到一次软触发/硬触发后的出图数量。相机默认接收一次信号后出一帧图像。
设置方法
// 接收一次信号后出2帧图像
int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_FRAME_PER_TRIGGER, value));
生命周期: open-close
TY_INT_PACKET_DELAY
该属性用于设置相机数据包传输时包与包之间延迟时间,适用于网络状况不佳的场景,可有效提升传输稳定性。
设置方法
int32_t value = 10000;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_PACKET_DELAY, value));
调试说明
TY_INT_PACKET_DELAY 设定值越大,相机帧率越低。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数
TY_INT_PACKET_SIZE
该属性用于设置相机数据包的大小,用于网络环境不理想的情况下。
设置方法
int32_t value = 100;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_PACKET_SIZE, value));
调试说明
TY_INT_PACKET_SIZE 设定值越小,相机帧率越低。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数
TY_BOOL_GVSP_RESEND
该属性用于网络相机图像重传功能。
设置方法
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_GVSP_RESEND, true));
调试说明
网络相机默认为未开启图像重传模式(false)。开启重传后,可有效减少上位机无法获取到图像的概率。
生命周期: init-deinit
TY_BOOL_TRIGGER_OUT_IO
该属性用于反转 trigger_out 的输出电平。该属性可写,但是不可读。
设置方法
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_TRIGGER_OUT_IO, false));
调试说明
Trigger 电路连接电源后,将示波器探头放在相机 Trigger_out 引脚上,查看输出信号。
TY_BOOL_TRIGGER_OUT_IO = true 时,电平反转。
TY_BOOL_TRIGGER_OUT_IO = false 时,电平不反转。
生命周期: start-stop
TY_BOOL_KEEP_ALIVE_ONOFF
该属性用于设置 SDK 与相机维持通信状态保持机制,默认为 true,表示通讯保持。
设置方法
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_KEEP_ALIVE_ONOFF, false));
调试说明
将此属性设置为 false 后,运行相机,以 “ctrl+c” 的方式异常终止 SDK 采图,相机激光器常亮,SDK 无法再次打开相机。
生命周期: start-stop
TY_INT_KEEP_ALIVE_TIMEOUT
该属性用于设置 SDK 与相机维持通信状态保持时间,USB相机默认 15000ms,网络相机默认 3000ms。单位:ms。
设置方法
int32_t value = 30000;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_KEEP_ALIVE_TIMEOUT, value));
调试说明
TY_INT_KEEP_ALIVE_TIMEOUT 设定为 30000 后,运行相机,以 “ctrl+c” 的方式异常终止 SDK 采图,相机激光器在常亮 30000ms 后熄灭。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_TRIGGER_DELAY_US
该属性用于设置软/硬触发延迟时间。相机在收到硬触发信号后,延迟一段时间后出图。单位:us。
设置方法
int32_t value = 1300000;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_TRIGGER_DELAY_US, value));
调试说明
TY_INT_TRIGGER_DELAY_US 设定为 1300000 后,相机在收到硬触发信号后,延迟 1300000us(1.3s)后出图。
生命周期: start-stop
TY_INT_TRIGGER_DURATION_US
该属性用于设置输出信号的电平保持时间,单位:us。
设置方法
int32_t value = 100000;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_TRIGGER_DURATION_US, value));
调试说明
Trigger 电路连接电源后,将示波器探头接在相机 Trigger_out 引脚上。设置相机工作模式为:TY_TRIGGER_MODE_M_SIG,对于输出默认为高电平的相机,则信号低电平保持时间为 100000us;对于输出默认为低电平的相机,则信号高电平保持时间为 100000us。
生命周期: start-stop
TY_ENUM_STREAM_ASYNC
该属性用于设置数据流异步功能。
TY_STREAM_ASYNC_OFF:数据流同步
TY_STREAM_ASYNC_DEPTH:depth数据流异步
TY_STREAM_ASYNC_RGB:RGB数据流异步
TY_STREAM_ASYNC_DEPTH_RGB:depth和RGB数据流异步
TY_STREAM_ASYNC_ALL:所有数据流都异步
设置方法
ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_STREAM_ASYNC, TY_STREAM_ASYNC_RGB));
调试说明
观察程序运行 log,以 TY_STREAM_ASYNC_RGB 为例,上位机先拿到一帧 RGB 图像,然后拿到一帧 depth 和 ir 图。depth 和 ir 的时间戳一致,RGB 的时间戳与 depth 和 ir 的不一致,根据使用的相机或早或晚的情况都存在。但是同一台相机不会出现有早有晚的情况。
生命周期: start-stop
TY_INT_CAPTURE_TIME_US
该属性用于读取深度计算的时间,仅适用于触发模式下,单位us。
注解
自由采集模式下,读取的深度计算时间为0。
读取方法
int32_t default_value=0;
ASSERT_OK(TYGetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_CAPTURE_TIME_US, &default_value));
TY_ENUM_TIME_SYNC_TYPE
该属性用于设置相机的对时功能。
TY_TIME_SYNC_TYPE_NONE:不进行对时。
TY_TIME_SYNC_TYPE_HOST:相机与上位机对时
TY_TIME_SYNC_TYPE_NTP:相机与NTP服务器对时
TY_TIME_SYNC_TYPE_PTP:相机与PTP服务器对时
TY_TIME_SYNC_TYPE_CAN:相机与CAN网络对时,仅FM862-GDW支持
TY_TIME_SYNC_TYPE_PTP_MASTER:设置相机为PTP服务器
设置方法
ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_TIME_SYNC_TYPE, TY_TIME_SYNC_TYPE_HOST));
while (1) {
bool sync_ready;
ASSERT_OK(TYGetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_TIME_SYNC_READY, &sync_ready));
if (sync_ready) {
break;
}
MSLEEP(10);
}
调试说明
TY_TIME_SYNC_TYPE_NONE:图像时间戳位数较短
TY_TIME_SYNC_TYPE_HOST:图像时间戳与上位机一致,修改上位机时间后,相机时间戳自动发生变化
TY_TIME_SYNC_TYPE_NTP:图像时间戳与NTP服务器一致,修改上位机时间后,时间戳不会发生变化
TY_TIME_SYNC_TYPE_PTP:图像时间戳与PTP服务器一致,LR定制功能
TY_TIME_SYNC_TYPE_CAN:图像时间戳与can网络服务器一致,仅FM862-GDW支持
TY_TIME_SYNC_TYPE_PTP_MASTER:相机自身作为PTP服务器,其他相机可以与其进行对时
对于 NTP 对时,需要额外验证指定服务器 IP 后的对时情况。方法如下:
const char* ntp_ip = " 119.29.26.206 ";
int32_t ip_i[4];
uint8_t ip_b[4];
int32_t ip32;
sscanf(ntp_ip, "%d.%d.%d.%d", &ip_i[0], &ip_i[1], &ip_i[2], &ip_i[3]);
ip_b[0] = ip_i[0]; ip_b[1] = ip_i[1]; ip_b[2] = ip_i[2]; ip_b[3] = ip_i[3];
ip32 = TYIPv4ToInt(ip_b);
LOGI("Set persistent IP 0x%x(%d.%d.%d.%d)", ip32, ip_b[0], ip_b[1], ip_b[2], ip_b[3]);
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_NTP_SERVER_IP, ip32));
ASSERT_OK(TYGetInt(hDevice, TY_COMPONENT_DEVICE,TY_INT_NTP_SERVER_IP, &ip32));
TYIntToIPv4(ip32, ip_b);
LOGD("%d %d %d %d", ip_b[0], ip_b[1], ip_b[2], ip_b[3]);
LOGD("Set type of time sync mechanism");
ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_TIME_SYNC_TYPE, TY_TIME_SYNC_TYPE_NTP));
LOGD("Wait for time sync ready");
while (1) {
bool sync_ready;
ASSERT_OK(TYGetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_TIME_SYNC_READY, &sync_ready));
if (sync_ready) {
break;
}
MSLEEP(10);
}
生命周期: init-deinit
TY_BOOL_TIME_SYNC_READY
该属性用于判断对时是否成功。
读取方法
bool sync_ready;
ASSERT_OK(TYGetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_TIME_SYNC_READY, &sync_ready));
调试说明
设置相机为 NTP 对时,每隔 1s 打印一次对时是否成功的状态。 当对时尚未成功时,返回结果为 false; 当对时成功时,返回结果为 true。
TY_BOOL_CMOS_SYNC
左右ir异步曝光开关。true:同步曝光;false:异步曝光。
设置方法
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_CMOS_SYNC, false));
调试说明
对于支持 TY_BOOL_CMOS_SYNC 属性的相机,其 TY_BOOL_CMOS_SYNC = false 比 TY_BOOL_CMOS_SYNC = true 时的深度图帧率高。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_ACCEPTABLE_PERCENT
网络数据包丢包容忍度,上位机接收到的图像数据包百分比低于此阈值的图像将被丢弃,单位:%。
设置方法
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_ACCEPTABLE_PERCENT, 90));
调试说明
关闭网络重传后,将 TY_INT_ACCEPTABLE_PERCENT 设置成较小的数值时,在一台电脑上运行多台相机,观察各个相机的输出图像。当此值较小时,上位机将收到破损的图像(如:RGB上有大面积的绿色)。
TY_STRUCT_CAM_STATISTICS
获取网络相机的传图情况。
读取方法
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:上位机总的未收到的图像数量
TY_ENUM_TEMPERATURE_ID
与TY_STRUCT_TEMPERATURE一起使用,用于读取指定位置处的温度值。当前支持读取的位置有:左IR位置处、右IR位置处、color位置处、cpu位置处、主板位置处。
读取方法
uint32_t n = 0;
ASSERT_OK(TYGetEnumEntryCount(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_TEMPERATURE_ID, &n));
LOGD("=== %14s: entry count %d", "", n);
std::vector<TY_ENUM_ENTRY> feature_info(n);
if (n == 0) {
LOGD("None temperature sensor exist!\n");
}
else {
ASSERT_OK(TYGetEnumEntryInfo(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_TEMPERATURE_ID, &feature_info[0], n, &n));
for (int i = 0; i < n; i++) {
int ret = TYSetEnum(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_TEMPERATURE_ID, feature_info[i].value);
if (ret < 0) { LOGD("Set temperature id[%d](%s) failed %d(%s)\n", feature_info[i].value, feature_info[i].description, ret, TYErrorString(ret));
break; }
TY_TEMP_DATA temp;
memset(&temp, 0, sizeof(temp));
ret = TYGetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TEMPERATURE, &temp, sizeof(temp));
if (ret < 0) { LOGD("Get temperature [%d](%s) failed %d(%s)\n", feature_info[i].value, feature_info[i].description, ret, TYErrorString(ret));
break;
}
LOGD("Get temperature [%d](%s) temp %s\n", feature_info[i].value, feature_info[i].description, temp.temp);
} }
IP设置
ip设置涉及 3 个 属性:
IP设置:TY_INT_PERSISTENT_IP
子网掩码设置:TY_INT_PERSISTENT_SUBMASK
网关设置:TY_INT_PERSISTENT_GATEWAY
设置方式
int32_t ip_i[4] = { 192, 168, 2, 199 };
uint8_t ip_b[4] = { ip_i[0], ip_i[1], ip_i[2], ip_i[3] };
int32_t ip32 = TYIPv4ToInt(ip_b);
LOGI("Set persistent IP 0x%x(%d.%d.%d.%d)", ip32, ip_b[0], ip_b[1], ip_b[2], ip_b[3]);
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_PERSISTENT_IP, ip32));
int32_t mask_i[4] = { 255, 255, 255, 0 };
uint8_t mask_b[4] = { mask_i[0], mask_i[1], mask_i[2], mask_i[3] };
int32_t mask32 = TYIPv4ToInt(mask_b);
LOGI("Set persistent Netmask 0x%x(%d.%d.%d.%d)", mask32, mask_b[0], mask_b[1], mask_b[2], mask_b[3]);
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_PERSISTENT_SUBMASK, mask32));
int32_t gateway_i[4] = { 192, 168, 2, 1 };
uint8_t gateway_b[4] = { gateway_i[0], gateway_i[1], gateway_i[2], gateway_i[3] };
int32_t gateway32 = TYIPv4ToInt(gateway_b);
LOGI("Set persistent Gateway 0x%x(%d.%d.%d.%d)", gateway32, gateway_b[0], gateway_b[1], gateway_b[2], gateway_b[3]);
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_PERSISTENT_GATEWAY, gateway32));
按照上面方式设置IP后,断电重启相机后设置生效。
此外,还可以通过 {Camport4 SDK下载路径}/camport4/sample/sample_v1 路径下的 ForceDeviceIP 示例程序设置 IP。
调试说明
设置静态ip后,相机上电重启,ip保持不变。可以在进行跨网段发现及跨网清除ip。 合法的ip地址能够设置成功。 合法的ip地址含义:设置的ip地址与子网掩码属于同一类的网络地址。
Laser组件下的属性
TY_BOOL_LASER_AUTO_CTRL
激光自动控制开关。
注解
这里不是根据光线亮度自动调整激光亮度的意思。
设置方法
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_LASER, TY_BOOL_LASER_AUTO_CTRL, false));
调试说明
对于主动双目结构光相机,当TY_BOOL_LASER_AUTO_CTRL = false时,出任意数据流,只要laser_power≠0,激光器都被点亮,ir为散斑图,当TY_BOOL_LASER_AUTO_CTRL = true时,只有出深度时,激光器才被点亮,ir出sobel图。
对于主动双目条纹光相机,当TY_BOOL_LASER_AUTO_CTRL = false时,出任意数据流,只要laser_power≠0,条纹光投射器都将被点亮,当TY_BOOL_LASER_AUTO_CTRL = true时,只有出深度时,条纹光投射器才会被点亮。
生命周期: start-stop
TY_INT_LASER_POWER
用于设置激光/条纹光投射器光源强度。
设置方法
int32_t value = 0;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_LASER, TY_INT_LASER_POWER, value));
调试说明
TY_INT_LASER_POWER值越大,激光/条纹光投射器投射的光越亮。
生命周期: open-close
TY_BOOL_IR_FLASHLIGHT
用于开启 IR 的泛光灯源。
设置方法
bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_LASER, TY_BOOL_IR_FLASHLIGHT, value));
调试说明
将此属性设置为 true 后,ir 的泛光灯源被点亮。
注解
ir 泛光灯源与 RGB 泛光灯源(如果有)、激光器不可同时被点亮。
当相机出深度图时,ir 泛光灯不可被点亮。
生命周期: start-stop
TY_BOOL_RGB_FLASHLIGHT
用于开启 RGB 的泛光灯源。
设置方法
bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_LASER, TY_BOOL_RGB_FLASHLIGHT, value));
调试说明
将此属性设置为 true 以后,RGB 的泛光灯源被点亮。
生命周期: start-stop
TY_INT_IR_FLASHLIGHT_INTENSITY
用于设置 IR 泛光亮度强度。
设置方法
int32_t value = 0;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_LASER, TY_INT_IR_FLASHLIGHT_INTENSITY, value));
调试说明
开启 IR 泛光后,设置的强度越大,灯越亮,IR 图像越亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数
TY_INT_RGB_FLASHLIGHT_INTENSITY
用于设置 RGB 泛光亮度强度。
设置方法
int32_t value = 0;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_LASER, TY_INT_RGB_FLASHLIGHT_INTENSITY, value));
调试说明
开启 RGB 泛光后,设置的强度越大,灯越亮,RGB 图像越亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数
Depth 组件下的属性
TY_FLOAT_SCALE_UNIT
深度数值单位。
设置方法
float value = 0.25;
ASSERT_OK(TYSetFloat(hDevice, TY_COMPONENT_DEPTH_CAM, TY_FLOAT_SCALE_UNIT,value));
调试说明
设置后,鼠标点击深度图,程序打印的深度值为 TY_FLOAT_SCALE_UNIT 设定值的整数倍。如设置为 0.25,则深度值为 0.25 的倍数。
生命周期: open-close
TY_INT_SGBM_IMAGE_NUM
SGBM 计算深度时需要的 ir 图像数量。
设置方法
int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_IMAGE_NUM, value));
调试说明
该参数越小,帧率越高。
生命周期: open-close
TY_INT_SGBM_DISPARITY_NUM
SGBM 计算深度时的视差搜索范围。
设置方法
int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_DISPARITY_NUM, value));
生命周期: open-close
TY_INT_SGBM_DISPARITY_OFFSET
SGBM 计算深度时开始搜索的视差值。
设置方法
int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_DISPARITY_OFFSET, value));
生命周期: open-close
TY_INT_SGBM_MATCH_WIN_HEIGHT
SGBM 计算深度时匹配窗口的高。
设置方法
int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_MATCH_WIN_HEIGHT, value));
生命周期: open-close
注解
TY_INT_SGBM_MATCH_WIN_HEIGHT和TY_INT_SGBM_IMAGE_NUM存在约束关系,以相机config文件的约束为准。
TY_INT_SGBM_MATCH_WIN_WIDTH
SGBM 计算深度时匹配窗口的高。
设置方法
int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_MATCH_WIN_WIDTH, value));
生命周期: open-close
TY_INT_SGBM_SEMI_PARAM_P1
相邻像素 (+/-1) 约束惩罚参数。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_SEMI_PARAM_P1, value));
调试说明
P1 越小,深度上细小的黑洞就越多。
生命周期: open-close
TY_INT_SGBM_SEMI_PARAM_P1_SCALE
相邻像素 (+/-1) 约束惩罚参数 P1_scale。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_SEMI_PARAM_P1_SCALE, value));
调试说明
P1_Scale 参数越大,深度黑洞越多。
生命周期: open-close
TY_INT_SGBM_SEMI_PARAM_P2
周围像素约束惩罚参数 P2。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_SEMI_PARAM_P2, value));
生命周期: open-close
TY_INT_SGBM_UNIQUE_FACTOR
唯一性检查参数 2,即最优与次优匹配点的差值。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_UNIQUE_FACTOR, value));
调试说明
唯一性百分比参数越大,深度黑洞越多。
生命周期: open-close
TY_INT_SGBM_UNIQUE_ABSDIFF
唯一性检查参数 1,即最优与次优匹配点的百分比。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_UNIQUE_FACTOR, value));
调试说明
唯一性差值参数越大,深度黑洞越多。
生命周期: open-close
TY_BOOL_SGBM_HFILTER_HALF_WIN
搜索滤波开关。用于进一步优化深度图,去除噪声和不连续性,对物体边缘点云更友好。
设置方法
bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEPTH_CAM, TY_BOOL_SGBM_HFILTER_HALF_WIN, value));
调试说明
关闭搜索滤波后,深度黑洞变少,错误匹配点增多。
生命周期: open-close
TY_BOOL_SGBM_MEDFILTER
中值滤波开关,用于消除孤立的噪声点,同时尽可能地保留图像的边缘信息。
设置方法
bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEPTH_CAM, TY_BOOL_SGBM_MEDFILTER, value));
调试说明
开启中值滤波后,平面拟合的均方根误差变小(通过老版 Percipio Viewer 2.6.3 可以查看深度图 Planarity of ROI)。
生命周期: open-close
TY_INT_SGBM_MEDFILTER_THRESH
中值滤波阈值。设定值越大,过滤的噪点越多,但也可能会导致深度图的细节信息丢失。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_MEDFILTER_THRESH, value));
调试说明
开启中值滤波后,中值滤波阈值参数越大,平面拟合的均方根误差越小(通过老版 Percipio Viewer 2.6.3 可以查看深度图 Planarity of ROI)。
生命周期: open-close
TY_BOOL_SGBM_LRC
左右一致性检查开关
设置方法
bool value = false;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEPTH_CAM, TY_BOOL_SGBM_LRC, value));
调试说明
关闭左右一致性检查后,错误匹配点变多。
生命周期: open-close
TY_INT_SGBM_LRC_DIFF
中值滤波阈值。设定值越大,过滤的噪点越多,但也可能会导致深度图的细节信息丢失。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_LRC_DIFF, value));
调试说明
开启左右一致性检查后,一致性检查参数越大,错误匹配点越多。
生命周期: open-close
TY_ENUM_DEPTH_QUALITY
ToF相机的深度图像质量。
设置方法
uint32_t value = 0;
ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEPTH_CAM, feature_id, value));
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_TOF_MODULATION_THRESHOLD
ToF 深度相机接收激光调制光强的阈值,小于此阈值的像素点不参与计算深度,即像素点的深度值赋值为 0。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_MODULATION_THRESHOLD, value));
调试说明
参数越大,深度有效像素百分比越低。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_TOF_JITTER_THRESHOLD
ToF 深度相机抖动过滤阈值,阈值设置值越大,深度图边缘抖动的深度数据过滤得越少。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_JITTER_THRESHOLD, value));
调试说明
参数越小,深度有效像素百分比越低。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_FILTER_THRESHOLD
ToF 深度相机飞点滤波阈值,默认值为 0,即不加滤波。滤波阈值设置越小,过滤的飞点越多。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_FILTER_THRESHOLD, value));
调试说明
参数越小,深度有效像素百分比越低。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_TOF_CHANNEL
ToF 深度相机调制频道。不同调制频道的调制频率不同,互不干扰。如需在同一场景运行多台 ToF 深度相机,首先需确保同系列相机的调制频道不同。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_CHANNEL, value));
调试说明
使用多台相同频率的相机进行对射时,深度图异常。
使用多台不同频率的相机进行对射时,深度图不受干扰。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_TOF_HDR_RATIO
高动态范围比阈值,需在 TY_ENUM_DEPTH_QUALITY=HIGH 模式下使用。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_HDR_RATIO, value));
调试说明
优化高反物体成像效果。
生命周期: open-close
TY_INT_TOF_ANTI_SUNLIGHT_INDEX
ToF抗阳光指数。
设置方法
int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_ANTI_SUNLIGHT_INDEX, value));
调试说明
在太阳光底下,设置该参数后,可以有效减少阳光的干扰。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_MAX_SPECKLE_DIFF
斑点滤波器聚类阈值,单位:mm。若相邻像素的深度差值小于该阈值,则认为该相邻像素属于同一个聚类斑点。
设置方法
int32_t value = 200;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_MAX_SPECKLE_DIFF, value));
调试说明
阈值越小,图像滤除的斑点越多。在 TY_INT_MAX_SPECKLE_SIZE 较大值时调试 TY_INT_MAX_SPECKLE_DIFF,效果明显。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_MAX_SPECKLE_SIZE
斑点滤波器面积阈值,单位:像素。面积小于该阈值的聚类斑点会被滤除。
设置方法
int32_t value = 200;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_MAX_SPECKLE_SIZE, value));
调试说明
阈值越大,图像滤除的斑点越多。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_BOOL_TOF_ANTI_INTERFERENCE
抗多机干扰开关,适用于场景中dToF相机数量大于ToF_channel数量时的场景,可以有效避免多机干扰现象。
设置方法
bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEPTH_CAM, TY_BOOL_TOF_ANTI_INTERFERENCE, value));
调试说明
开启抗多机干扰后,同一场景中的多台 dToF 相机之间的影响有效减弱。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_ENUM_CONFIG_MODE
V系列相机预设的参数,不同模式下相机的精度不同。
设置方法
uint32_t value = TY_CONFIG_MODE_PRESET1;
ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_CONFIG_MODE, value));
生命周期: start-stop
TY_INT_SGBM_TEXTURE_THRESH
解决被测物品后无背景或背景较远时,深度图像异常的情况。
设置方法
int32_t value = 500;
TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_TEXTURE_THRESH, value);
生命周期: open-close
TY_INT_SGBM_TEXTURE_OFFSET
解决被测物体背景或者背景较远深度成像不佳的问题,该属性为只读。
读取方法
int32_t value;
TYGetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_TEXTURE_OFFSET, &value);
TY_INT_DEPTH_MIN_MM
设置深度值最小截止距离,单位:mm。该属性为可读写。
设置方法
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_DEPTH_MIN_MM, 1400));
读取方法
int min = 0;
ASSERT_OK(TYGetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_DEPTH_MIN_MM, &min));
printf("min: %d\n", min);
调试说明
设定 TY_INT_DEPTH_MIN_MM 为 1400 时,所有距离小于 1400mm 的深度数据将被屏蔽,深度图上表现为黑洞。
生命周期: open-close
TY_INT_DEPTH_MAX_MM
设置深度值最大截止距离,单位:mm。该属性为可读写。
设置方法
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_DEPTH_MAX_MM, 1500));
读取方法
int max = 0;;
ASSERT_OK(TYGetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_DEPTH_ MAX _MM, &max));
调试说明
设定 TY_INT_DEPTH_MAX_MM 为 1500 时,所有距离大于 1500mm 的深度数据将被屏蔽,深度图上表现为黑洞。
生命周期: open-close
RGB 组件下的属性
TY_INT_ANALOG_GAIN
用于设置 RGB 模拟增益。
设置方法
int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_ANALOG_GAIN, value));
调试说明
值越大,RGB图像越亮。
但需注意,提升模拟增益的同时也会放大传感器的本底噪声,可能导致图像噪点增加、信噪比下降。建议在满足亮度需求的前提下,尽可能使用较低的模拟增益值以获得更纯净的图像质量。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_R_GAIN
用于设置RGB红色通道增益。
设置方法
int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_R_GAIN, value));
调试说明
值越大,RGB图像越红。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_G_GAIN
用于设置RGB绿色通道增益。
设置方法
int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_G_GAIN, value));
调试说明
值越大,RGB图像越绿。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_B_GAIN
用于设置RGB蓝色通道增益。
设置方法
int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_B_GAIN, value));
调试说明
值越大,RGB图像越蓝。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_EXPOSURE_TIME
用于设置RGB曝光时间。
设置方法
int32_t value = 100;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_EXPOSURE_TIME, value));
调试说明
值越大,RGB图像越亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_FLOAT_EXPOSURE_TIME_US
用于设置彩色传感器的真实曝光时间,单位:us。
设置方法
float value = 23000.0;
ASSERT_OK(TYSetFloat(hDevice, TY_COMPONENT_RGB_CAM, TY_FLOAT_EXPOSURE_TIME_US, value));
调试说明
值越大,RGB图像越亮。
注解
该项与TY_INT_EXPOSURE_TIME有计算转换关系,请参考相机的 fetch_config.xml 文件。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_AE_TARGET_Y
AEC调节的目标明亮度。
设置方法
int32_t value = 200;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_AE_TARGET_Y, value));
调试说明
开启 AEC 以后,值越小,图像越暗;值越大,图像越亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_STRUCT_AEC_ROI
AEC调节感兴趣区域,设置后,根据感兴趣区域的亮度,自动调整曝光时间。
设置方法
TY_AEC_ROI_PARAM roi;
roi.x = 0;
roi.y = 0;
roi.w = 100;
roi.h = 100;
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_RGB_CAM, TY_STRUCT_AEC_ROI, &roi, sizeof(roi)));
调试说明
若感兴趣区域内过曝(日光灯),则整幅图像变暗。
若感兴趣区域欠曝(黑色物体),则整幅图像变亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_BOOL_AUTO_EXPOSURE
RGB 自动曝光开关。
设置方法
bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_RGB_CAM, TY_BOOL_AUTO_EXPOSURE, value));
调试说明
方法1:开启 RGB 自动曝光后,相机对着日光灯,用手遮住 RGB 镜头,手移开后,图像会有一个收敛的过程。
方法2:关闭 RGB 自动曝光后,将曝光时间拉到最低,然后开启 RGB 自动曝光,图像会变亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_BOOL_AUTO_AWB
RGB自动白平衡功能。
设置方法
bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_RGB_CAM, TY_BOOL_AUTO_AWB, value));
调试说明
RGB 图像偏色时,开启自动白平衡,图像恢复正常色彩。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
AUTO_ISP
图漾针对 FM851-E2 相机研发的软件 isp 功能,涉及 TYISPCreate()、ColorIspInitSetting()、TYISPUpdateDevice() 3个API。
调试说明
连接一台 FM851-E2 相机,运行 {Camport4 SDK下载路径}/camport4/sample/sample_v1 路径下的示例程序。
SimpleView_FetchFrame:该示例含软件 isp 功能,输出的 RGB 图像较为接近物体色彩。
SimpleView_TriggerMode1:该示例不含软件 isp 功能,RGB 图像呈绿色。
注解
启用 auto isp 后,TY_INT_ANALOG_GAIN 会被设置为 1。
IR组件下的属性
TY_INT_EXPOSURE_TIME
用于设置左右 IR 曝光时间。
设置方法
int32_t value = 100;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_INT_EXPOSURE_TIME, value));
调试说明
值越大,IR 图像越亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_FLOAT_EXPOSURE_TIME_US
用于设置左右IR曝光时间的绝对真值,单位:us。
设置方法
float value = 23000.0;
ASSERT_OK(TYSetFloat(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_FLOAT_EXPOSURE_TIME_US, value));
调试说明
值越大,IR 图像越亮。
注解
该项与TY_INT_EXPOSURE_TIME有计算转换关系,具体转换关系请参考fetch_config.xml文件。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_ANALOG_GAIN
用于设置左右 IR 模拟增益。
设置方法
int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_INT_ANALOG_GAIN, value));
调试说明
值越大,IR 图像越亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_INT_GAIN
用于设置左右IR增益。
设置方法
int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_INT_GAIN, value));
调试说明
值越大,IR 图像越亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_BOOL_UNDISTORTION
左右 IR 畸变校正开关,开启则表示进行校正,默认为不开启状态。
设置方法
bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BOOL_UNDISTORTION, value));
生命周期: start-stop
注解
左右 IR 为绑定状态,需同步启用或禁用。其最终状态由最后一次设置的参数为准。
TY_BOOL_HDR
左右 IR HDR 开关。
设置方法
bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BOOL_HDR, value));
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_BYTEARRAY_HDR_PARAMETER
HDR曝光比参数。
设置方法
1.读取HDR数组的大小
uint32_t hdr_size;
ASSERT_OK(TYGetByteArraySize(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BYTEARRAY_HDR_PARAMETER, &hdr_size));
printf("hdr_size %d\n", hdr_size);
2.读取默认的HDR参数
uint32_t hdr_param[8];
hdr_param[0] = -1;
hdr_param[1] = -1;
ASSERT_OK(TYGetByteArray(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BYTEARRAY_HDR_PARAMETER, (uint8_t*)&hdr_param[0], hdr_size));
printf("default %d %d\n", hdr_param[0], hdr_param[1]);
3.设置HDR参数
hdr_param[0] = 0;
hdr_param[1] = 0;
ASSERT_OK(TYSetByteArray(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BYTEARRAY_HDR_PARAMETER, (uint8_t*)&hdr_param[0], hdr_size));
调试说明
HDR参数范围[0,2],开启HDR后,参数越小,图像越亮。
生命周期: 写入后一直生效,直到断电重启或者重新配置其他参数。
TY_STRUCT_CAM_RECTIFIED_ROTATION
用来获取新的config中IR的旋转,目前主要是V的基于IR的标定;
读取方法
TY_CAMERA_ROTATION rotation;
ASSERT_OK(TYGetStruct(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_STRUCT_CAM_RECTIFIED_ROTATION, &rotation, sizeof(rotation)));
LOGD("===%23s%f %f %f", "", rotation.data[0], rotation.data[1], rotation.data[2]);
LOGD("===%23s%f %f %f", "", rotation.data[3], rotation.data[4], rotation.data[5]);
LOGD("===%23s%f %f %f", "", rotation.data[6], rotation.data[7], rotation.data[8]);
Storage组件下的属性
操作存储空间的方法请见DeviceStorage示例程序或SimpleView_SaveLoadConfig或SaveLoadConfig_v2
注解
操作存储空间,请使用API进行操作,切勿进入相机底层,通过echo的方式写入内容。
TY_BYTEARRAY_CUSTOM_BLOCK
用于获取 custom_block.bin 存储空间大小。
读取方法
uint32_t block_size;
ASSERT_OK( TYGetByteArraySize(hDevice, TY_COMPONENT_STORAGE, TY_BYTEARRAY_CUSTOM_BLOCK, &block_size) );
LOGD("custom block bin size %d", block_size);
关于更详细的示例,请参见示例程序 {Camport4 SDK下载路径}/camport4/sample/sample_v1/DeviceStorage。
注解
结构光相机文件内容一般为0xFF,ToF相机的内容一般为NUL。 对于结构光相机,自 R3.13.81 版本开始,custom_block.bin文件位置由/mnt/.cali/迁移至/home/percipio/下(隐藏文件),大小由原来的4kb变更为64kb。
TY_BYTEARRAY_ISP_BLOCK
用于获取 isp_block.bin 存储空间大小。
读取方法
uint32_t block_size;
ASSERT_OK(TYGetByteArraySize(hDevice, TY_COMPONENT_STORAGE, TY_BYTEARRAY_ISP_BLOCK, &block_size));
LOGD("isp block bin size %d", block_size);
关于更详细的示例,请参见示例程序 {Camport4 SDK下载路径}/camport4/sample/sample_v1/DeviceStorage。