**相机无推流**

1、确保狗控制正常,只是单纯无画面 2、确保sw2摇杆回到居中位置 3、105后台输入v4l2-ctl --list-formats-ext --device /dev/video0 *检查是否跟图中配置一样,如果有出入,低于30帧 判定相机损坏 *

4、105后台输入lsusb -t *检查是否跟图中配置一样,如果有出入,低于30帧 判定相机损坏 * 5、105后台输入ll /dev/video* 确保读出来的设备是 video0和video1 如果不是,说明线接触不良 6、105后台输入 netstat -anp |grep 8554 确保是有服务在监听,并且拉流设备数量不能超过三个,因为服务本身只支持三路推流

机器狗相机不出图 / 无30fps 故障排查树 (MJPEG)

  • 阶段一:物理与链路层诊断 (底层)

    • 执行 lsusb 找不到设备
      • 结论:物理断连、线束完全损坏或主板端口未供电。
      • 动作:排查线束、接口和供电板。
    • 执行 lsusb -t 显示 Speed=480M 或更低
      • 结论:USB高速线断裂发生降级。
      • 动作:重新插拔清理接口,若无效则需更换线束。
    • 执行 dmesg 报 No space left 或 uvc timeout
      • 结论:USB带宽不足、供电掉压或固件崩溃。
      • 动作:检查同 Hub 下设备数量,或重启相机电源。
  • 阶段二:系统与资源层排查 (系统层)

    • 执行 ls -l /dev/video* 检查节点
      • 结论:确认是否找错了 video 节点(重启后节点序号可能漂移)。
      • 动作:通过 udev 规则绑定固定名称。
    • 执行 lsof /dev/video0 检查占用
      • 结论:节点被其他后台程序(如ROS节点、图传服务、僵尸进程)暗中占用。
      • 动作:kill 掉占用进程后重试。
    • 执行 groups 检查用户组
      • 结论:当前用户无权限读取相机数据。
      • 动作:将当前用户加入 video 组 (sudo usermod -aG video $USER)。
  • 阶段三:应用与软件层剥离 (应用层)

    • 执行 v4l2-ctl --stream-mmap 抓帧无输出
      • 结论:UVC驱动层拿不到数据,底层崩溃。
    • 执行 ffmpeg 抓取单帧图像,结果为全黑
      • 结论:相机 ISP 损坏或内部传感器排线脱落。
    • 底层抓帧命令出图正常,但业务代码不出图
      • 结论:纯业务代码 BUG。
      • 动作:检查 OpenCV、ROS 驱动等上层代码的解码和分辨率配置。
  • 阶段四:动态与边界条件复现 (机器狗特有)

    • 开启其他传感器(如雷达、多相机)时该相机掉线
      • 结论:内部 USB Hub 总带宽超载。
    • 电机发力原地踏步或运动时,相机瞬间断流
      • 结论:线束屏蔽层受损导致 EMI 电磁干扰,或峰值电流导致主板瞬态掉压。