属性设置说明 (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*)&param, 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