问题定位
恭喜找到根因!旧板子硬件问题导致帧获取失败。但现在有两个新问题需要解决:
- CPU 高温 (80℃) + 画面闪烁 + 识别功能挂掉
- 网络服务崩溃(SSH/VNC 断开,ping 不通网关)
这两个问题很可能相关——系统资源耗尽导致网络栈异常。
立即排查步骤
1. 检查系统资源状态
网络断开时,在新终端(或串口)执行:
# 查看内存使用
free -h
# 查看进程资源占用
top -bn1 | head -20
# 查看网络接口状态
ip addr show
ip route show
# 查看网络服务状态
systemctl status ssh
systemctl status NetworkManager
# 查看系统日志中的网络错误
journalctl -xe | grep -i "network\|wifi\|ssh" | tail -50
2. 检查 MIPI/ISP 资源泄漏
# 查看 VIN/ISP 缓冲区状态
cat /sys/kernel/debug/vin/vin0/status 2>/dev/null
# 查看是否有 MIPI 错误
dmesg | grep -iE "mipi|vin|isp|error" | tail -30
# 查看 DMA 缓冲区
cat /sys/kernel/debug/dma_buf/bufinfo 2>/dev/null | head -50
3. 降低 CPU 负载测试
# 查看当前 CPU 频率
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
# 临时降低 CPU 频率(如果支持)
echo powersave | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 监控温度
watch -n 1 'cat /sys/class/thermal/thermal_zone*/temp'
解决方案
方案 1:优化 TROS 相机调用(推荐)
你提到 TROS 调用 640x480@30fps 也会出问题,需要检查是否正确释放资源:
# 确保在程序退出时正确释放相机资源
import rospy
from hobot_camera import Camera
cam = Camera()
cam.open(0, 640, 480, 30)
try:
while not rospy.is_shutdown():
img = cam.get_image()
# 处理图像...
except KeyboardInterrupt:
pass
finally:
# 关键:确保关闭相机
cam.close()
rospy.signal_shutdown("exit")
方案 2:添加看门狗重启网络服务
在程序中添加网络健康检查:
import subprocess
import time
def check_network():
try:
result = subprocess.run(['ping', '-c1', '192.168.1.1'],
timeout=2, capture_output=True)
return result.returncode == 0
except:
return False
def restart_network():
subprocess.run(['sudo', 'systemctl', 'restart', 'NetworkManager'])
time.sleep(2)
# 在主循环中每 30 秒检查一次
if not check_network():
print("Network lost, restarting...")
restart_network()
方案 3:降低系统负载
# 1. 关闭不必要的服务
sudo systemctl stop lightdm # 如果不用桌面
sudo systemctl disable bluetooth
# 2. 限制程序 CPU 使用
taskset -c 0-3 python your_program.py # 限制在前 4 核
# 3. 增加散热
# - 加风扇
# - 降低环境温度
# - 避免阳光直射
方案 4:检查系统版本兼容性
# 查看当前版本
cat /etc/version
# 如果是 3.4.1,考虑升级到 3.5.0(如果有网络)
# 或重新刷写最新镜像
社区类似问题参考
搜索到相关帖子供参考:
需要反馈的信息
请提供以下信息以便进一步定位:
# 1. 网络断开时的系统状态
free -h
top -bn1 | head -10
# 2. 网络接口状态
ip addr show
ip route show
# 3. 系统日志
dmesg | tail -50
# 4. TROS 程序代码片段(相机调用部分)
临时 workaround
如果急需使用,可以:
- 用串口调试代替 SSH/VNC
- 程序运行前备份网络状态,断开后手动重启
- 降低相机分辨率和帧率减少负载(如 320x240@15fps)
# 网络断开后快速恢复
sudo systemctl restart NetworkManager && sudo systemctl restart ssh
先按上述步骤排查,把 free -h、dmesg 日志发出来,可以进一步分析是内存泄漏还是网络栈问题。