图漾相机如何达到最大帧率?

文章目录

  • 前言
  • 1.相机相关设置
    • [1.1 查看相机指示灯](#1.1 查看相机指示灯)
    • [1.2 滤波参数](#1.2 滤波参数)
    • [1.3 图像同步TY_BOOL_CMOS_SYNC](#1.3 图像同步TY_BOOL_CMOS_SYNC)
    • [1.4 SGBM参数影响](#1.4 SGBM参数影响)
    • [1.5 取消相机帧率限制](#1.5 取消相机帧率限制)
    • [1.6 查看相机规格书](#1.6 查看相机规格书)
  • 2.Windows系统环境设置
    • [2.1 检查网络环境](#2.1 检查网络环境)
    • [2.2 设置网卡巨型帧](#2.2 设置网卡巨型帧)
    • [2.3 设置网卡接收与传输缓存区到最大](#2.3 设置网卡接收与传输缓存区到最大)
    • [2.4 关闭中断调整](#2.4 关闭中断调整)
    • [2.5 开启流量控制](#2.5 开启流量控制)
    • [2.6 关闭网卡休眠节能选项](#2.6 关闭网卡休眠节能选项)
    • [2.7 配置系统电源](#2.7 配置系统电源)
    • [2.8 关闭系统防火墙](#2.8 关闭系统防火墙)
  • 3.Linux系统环境配置
    • [3.1 CPU性能模式配置(最关键)](#3.1 CPU性能模式配置(最关键))
    • [3.2 网络传输优化](#3.2 网络传输优化)
      • [3.2.1 加大网络缓冲区(UDP接收)](#3.2.1 加大网络缓冲区(UDP接收))
      • [3.2.2 开启巨型帧&确认网卡速率](#3.2.2 开启巨型帧&确认网卡速率)
      • [3.2.3 使用网络监控工具检查丢包](#3.2.3 使用网络监控工具检查丢包)
    • [3.3 应用层帧处理优化](#3.3 应用层帧处理优化)
      • [3.3.1 打开SDK网络重传](#3.3.1 打开SDK网络重传)
      • [3.3.2 关闭图像解析与渲染(测试用)](#3.3.2 关闭图像解析与渲染(测试用))
      • [3.3.3 增大帧缓冲队列(Frame Buffer)](#3.3.3 增大帧缓冲队列(Frame Buffer))
    • [3.4 其他配置及检查项](#3.4 其他配置及检查项)
    • [3.5 在Linux环境下为达到最大帧率建议的操作流程](#3.5 在Linux环境下为达到最大帧率建议的操作流程)
    • [3.6 通讯异常排查教程](#3.6 通讯异常排查教程)

前言

根据遵循的

   1.图漾新出的GM461/GM465/PMD02/PMD03属于新相机范畴,有帧率控制和包传输控制,以及纹理滤波/饱和度滤波等属性跟相机帧率相关,影响帧率因素较多。

   具体涉及到每个相机的帧率,请打开图漾相机规格书

   下面列举主要影响帧率的因素

1.相机相关设置

1.1 查看相机指示灯

   1.首先查看相机的指示灯,确认相机是否处于千兆网状态。

  如网口指示灯不亮,请仔细检查是否是千兆网络,尤其是是高速运动场景下,建议一定要使用高柔千兆网线。

1.2 滤波参数

   图漾GM46X相机受纹理滤波和饱和度滤波影响。

   开启饱和度滤波(DepthSgbmSaturateFilterEnable)和纹理滤波(DepthSgbmTextureFilterEnable)后,深度图像帧率会减半。

  没有开滤波参数:AcquisitionFrameRate可设置的帧率为 8, 30

  开启滤波参数后:AcquisitionFrameRate可设置的帧率为 4, 15

1.3 图像同步TY_BOOL_CMOS_SYNC

   左右ir异步曝光开关。true:同步曝光;false:异步曝光

   设置方法:

cpp 复制代码
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_CMOS_SYNC, false));

   验证方法:

   比如使用FM851-E2相机,对比开启和关闭TY_BOOL_CMOS_SYNC后,深度图像的帧率, TY_BOOL_CMOS_SYNC =false时帧率比TY_BOOL_CMOS_SYNC = true时高。

1.4 SGBM参数影响

  • 减小视差搜索范围(Disparity Number):
       例如从256减小到128,计算时间减半,帧率提升。
  • 减小用于深度计算的IR图像数量(Image Number):
       例如从3帧减为1帧,帧率提升。
  • 减小视差匹配窗口大小:
       窗口越小,计算量越小,帧率越高。

   原因 :DepthSgbmImageNumber(用于深度计算的IR图像数量)越大,帧率越低。

   操作 :适当减小该值(如从3减为1),可提升帧率,但会降低深度图质量。

cpp

1.5 取消相机帧率限制

   通过SDK或Viewer看图软件设置AcquisitionFrameRateEnable为 true,并设置 AcquisitionFrameRate为目标帧率。

   一般针对GM46X和PMD相机。

1.6 查看相机规格书

   首先需要查看相机规格书上的帧率

   图漾官网相机规格书

   规格书上标注的帧率,都是单独打开某个组件测试的帧率。

   TL460相机帧率测试

   FM851-E2/FM855-E2-7相机帧率测试

   FM854相机帧率测试

   TM461相机帧率测试

   PS800相机帧率测试

   PS802相机帧率测试

   FM855相机帧率测试

   TM26X相机帧率测试

   TM421相机帧率测试

  其他型号的待补充

2.Windows系统环境设置

   推荐使Intel芯片的独立千兆网口,例如intel I350、I210等芯片组网卡。

2.1 检查网络环境

  网卡详细信息中,确认链接速度为1.0Gbps,如速度为100mbps,请检查硬件链接和网卡配置。


图2-1 检查网络带宽

2.2 设置网卡巨型帧


图2-2 设置网卡巨型帧

  不同网卡类型,网卡属性有差异,需灵活参考:


图2-3 设置巨型帧

2.3 设置网卡接收与传输缓存区到最大

  说明:intel网卡一般为2048,realtek一般为512。

2.4 关闭中断调整


图2-4 关闭中断调整

2.5 开启流量控制


图2-5 开启流量控制

2.6 关闭网卡休眠节能选项

  网卡类型1 :网卡属性中,找到电源管理,取消勾选【允许计算机关闭此设备以节约电源】


图2-6 关闭网卡休眠

  网卡类型2:在电源管理中,取消【勾选节能以太网】、【系统闲置时降低链接速度】

2.7 配置系统电源

  电源选型设置为高性能模式:通过"控制面板> 电源选项> 高性能


图2-7 配置系统电源

2.8 关闭系统防火墙


图2-8 关闭防火墙

  关闭Windows防火墙:通过"控制面板> Windows防火墙>打开或关闭 Windows防火墙。

  如安装有 360、赛门铁克等防火墙设置,请关闭其拦截功能。

3.Linux系统环境配置

3.1 CPU性能模式配置(最关键)

  Linux系统默认通常为powersave(节能)模式,会限制CPU频率,导致数据接收和处理速度跟不上。

  操作步骤:

  1. 查看当前CPU性能模式:

    bash 复制代码
    cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

    若为 powersave,则安装切换工具并设为 performance 模式:

    bash 复制代码
    sudo apt-get install indicator-cpufreq
    # 重启后,点击桌面右上角图标,将CPU性能切换到 "performance"

      重启后注意事项:

      重启上位机后会重新回到 powersave 模式,需要手动再次切换。

3.2 网络传输优化

3.2.1 加大网络缓冲区(UDP接收)

  现代GigE相机依赖UDP协议,默认缓冲区不足会导致丢帧。

  临时生效(推荐测试用):

bash 复制代码
sudo sh -c "echo 33554432 > /proc/sys/net/core/rmem_max"

  永久生效(写入配置文件):

bash 复制代码
# 编辑 /etc/sysctl.conf
sudo sh -c "echo 'net.core.rmem_max=33554432' >> /etc/sysctl.conf"
sudo sysctl -p

  也可参考如下sh脚本

bash 复制代码
#!/bin/sh
  
OS_NAME=`uname --`
if [ "$OS_NAME" = "Linux" ]; then
  USER_ID=`id -u`
  # Check required priviledge
  if [ "$USER_ID" != "0" ]; then
 	echo "This script can only be run by root user or sudoer"
    exit 1
  fi
fi

if [ "$1" = "10" ]; then
    SIZE=10485760 
elif [ "$1" = "15" ]; then
    SIZE=15728640 
elif [ "$1" = "20" ]; then
    SIZE=20971520 
elif [ "$1" = "25" ]; then
    SIZE=26214400 
else
    echo "use default mem_max 10MB."
    SIZE=10485760
fi

echo "Setting socket maximum buffer size to $SIZE"

if [ "$OS_NAME" = "Linux" ]; then

  PROC_ROOT=/proc/sys/net/core

  if [ ! -w $PROC_ROOT/wmem_max ]; then
    echo "Cannot write to $PROC_ROOT/wmem_max"
    exit 1
  fi

  if [ ! -w $PROC_ROOT/rmem_max ]; then
    echo "Cannot write to $PROC_ROOT/rmem_max"
    exit 1
  fi

  echo $SIZE > $PROC_ROOT/wmem_max
  echo $SIZE > $PROC_ROOT/rmem_max

  # If net.core.rmem_max present in /etc/sysctl.conf, change value to "$SIZE"
  #	else, add "net.core.rmem_max = $SIZE" to /etc/sysctl.conf
  if grep --silent ^net.core.rmem_max /etc/sysctl.conf; then
    sed -i 's/^net.core.rmem_max.*/net.core.rmem_max = '$SIZE'/g' /etc/sysctl.conf
  else
    echo "" >> /etc/sysctl.conf
    echo "net.core.rmem_max = $SIZE" >> /etc/sysctl.conf
  fi
  
  if grep --silent ^net.core.wmem_max /etc/sysctl.conf; then
    sed -i 's/^net.core.wmem_max.*/net.core.wmem_max = '$SIZE'/g' /etc/sysctl.conf
  else
    echo "" >> /etc/sysctl.conf
    echo "net.core.wmem_max = $SIZE" >> /etc/sysctl.conf
  fi
  
  exit 0
fi

echo "Error: unknown platform: $OS_NAME"
exit 1

3.2.2 开启巨型帧&确认网卡速率

  • 确保相机和电脑均连接在千兆(1000Mbps) 网络上。

  • 检查网卡设置,开启Jumbo Frame(巨型帧) ,设置为90009014 字节,可以提升大帧传输效率。

  • 关闭防火墙,或确认未阻挡相机数据端口:

    bash 复制代码
    sudo ufw disable        # 临时关闭
    sudo ufw status          # 确认状态

3.2.3 使用网络监控工具检查丢包

  如果条件允许,可以使用iperf3Wireshark 评估网络链路质量,确认是否存在UDP丢包。

  图漾相机内置iperf3服务端

  相机的教程,可打开此链接:iperf3学习教程

  第一步,测试时上位机PC为服务端(server),执行:

bash 复制代码
iperf3 -s

  第二步,相机为客户端(client),通过

bash 复制代码
ssh root@cameraIP  密码123456
如ssh root@192.168.2.178

  方式进入相机底层运行,执行

bash 复制代码
iperf3 -c 192.168.2.178 -u -b 1000M -P 2

3.3 应用层帧处理优化

3.3.1 打开SDK网络重传

  在SDK代码中,在TYStartCapture()之前添加以下代码,可以开启网络重传功能,减少因丢包导致的帧率下降。

  C/C++ 示例:

cpp 复制代码
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_GVSP_RESEND, true));

3.3.2 关闭图像解析与渲染(测试用)

  如果测试时需要达到最高帧率,可以临时将代码中的 parseFrame() 以及图像显示/渲染(如 cv::imshow())部分注释掉,避免CPU/GPU负载导致取流阻塞。

3.3.3 增大帧缓冲队列(Frame Buffer)

  驱动内部维护一个缓冲队列(buffer queue)。如果用户取流不及时,队列为空,新帧会被丢弃,导致帧率下降。

  解决办法:

  1. 增加压入队列的framebuffer 数量(例如从2个增加到6~10个),但会增加内存开销。
  2. 取流过程单开线程: 将接收帧数据与图像处理分为两个独立线程,避免图像处理耗时导致取流阻塞。

3.4 其他配置及检查项

排查方向 检查内容 操作建议
电脑休眠 是否开启休眠模式 关闭休眠/睡眠模式
相机电源 是否存在掉电(指示灯) 检查电源适配器功率是否足够
分辨率/后处理 是否启用了HDR/滤波/多帧合成 先关闭这些功能测试纯原始帧率
相机触发模式 是否误开启了触发模式 确保为连续采图模式
链路带宽 多相机或高分辨率下数据量是否超过千兆网线带宽 考虑降低分辨率或使用万兆网卡
相机进入百兆网 检查相机Ethernet灯是否常亮 若常灭,表示处于百兆网,检查网线/交换机/网卡配置
交换机流控 交换机的流控是否打开 开启交换机Web功能中的流控设置

3.5 在Linux环境下为达到最大帧率建议的操作流程

步骤 配置项 一句话操作
1 CPU性能 关闭powersave,切换到performance 模式
2 网络缓冲区 rmem_max 设为33554432
3 网卡配置 检查是否为千兆,并开启巨型帧
4 代码优化 打开网络重传、增加buffer数量、优化数据处理线程
5 测试验证 关闭不必要的图像渲染/滤波,检查帧率是否提升

3.6 通讯异常排查教程

  可打开如下学习链接:Ubuntu系统网络基础

cpp 复制代码
# 查看当前值(临时生效)
cat /proc/sys/net/core/rmem_max
cat /proc/sys/net/core/wmem_max

# 查看持久化配置
grep net.core /etc/sysctl.conf

# 测试重启后是否保留(模拟)
sudo sysctl -p
cpp 复制代码
# 1. 查看当前缓冲区大小(确认25MB已生效)
cat /proc/sys/net/core/rmem_max

# 2. 持续监控丢包是否还在增加
watch -n 1 'ifconfig eth0 | grep RX'

# 3. 查看详细丢包原因(内核层面)
ethtool -S eth0 | grep -i drop

# 4. 查看网卡队列/中断分布
ethtool -l eth0          # 查看队列数
cat /proc/interrupts | grep eth0   # 看是否单核处理

# 5. 查看网卡环缓冲区大小
ethtool -g eth0

  除了socket buffer,还可以调大网卡环缓冲区(Ring Buffer):

cpp 复制代码
# 查看当前
ethtool -g eth0

# 调大(示例,具体最大值看 ethtool -g 的 Pre-set maximums)
sudo ethtool -G eth0 rx 4096 tx 4096
相关推荐
友思特 智能感知2 个月前
友思特案例 | 飞机机舱数字化制造:Ensenso 3D 相机实现高精度定位校准
3d相机·ids·3d工业相机·ids相机·高精度工业相机
sanzk3 个月前
astra pro稠密建图
ubuntu·ros·3d相机
sanzk3 个月前
ASTRA PRO相机
ubuntu·ros·3d相机
爱凤的小光4 个月前
图漾FM851-E2/FM855-E2-7专栏(待完善)
图漾相机
爱凤的小光5 个月前
图漾tycamera示例程序解析
图漾相机
爱凤的小光6 个月前
图漾PS800-E1相机专栏(待完善)
图漾相机
爱凤的小光6 个月前
图漾TM461-E2相机专栏
图漾相机
爱凤的小光7 个月前
解析图漾相机录制的bag视频文件
图漾相机
友思特 智能感知8 个月前
友思特应用 | 基于高精度双目散斑 3D 相机的放射治疗视觉定位应用
3d·机器视觉·3d相机·医疗设备·医疗定位