文章目录
- 前言
- 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 查看相机规格书
首先需要查看相机规格书上的帧率
规格书上标注的帧率,都是单独打开某个组件测试的帧率。
其他型号的待补充
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频率,导致数据接收和处理速度跟不上。
操作步骤:
-
查看当前CPU性能模式:
bashcat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor若为
powersave,则安装切换工具并设为performance模式:bashsudo 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(巨型帧) ,设置为
9000或9014字节,可以提升大帧传输效率。 -
关闭防火墙,或确认未阻挡相机数据端口:
bashsudo ufw disable # 临时关闭 sudo ufw status # 确认状态
3.2.3 使用网络监控工具检查丢包
如果条件允许,可以使用iperf3 或 Wireshark 评估网络链路质量,确认是否存在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)。如果用户取流不及时,队列为空,新帧会被丢弃,导致帧率下降。
解决办法:
- 增加压入队列的framebuffer 数量(例如从2个增加到6~10个),但会增加内存开销。
- 取流过程单开线程: 将接收帧数据与图像处理分为两个独立线程,避免图像处理耗时导致取流阻塞。
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