You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20.04.5树莓派4B获取Lepton3.5 Y16数据时uvc启动失败

解决Pure Thermal 2 + Lepton 3.5 Y16流启动失败(uvc_start_streaming failed: -2)的问题

核心问题分析

错误码-2对应libuvc的UVC_ERROR_IO,本质是格式枚举不匹配或帧参数与设备能力冲突,结合你的输出来看,存在两个关键矛盾:

  • 固件版本显示v1.2.2,但你声称刷了v1.3.0,说明固件更新未生效
  • Y16格式存在两个帧尺寸(160x120/160x122),脚本可能默认选择了设备不支持的160x122尺寸

分步解决方案

1. 重新确认并更新固件到v1.3.0

你的运行输出显示固件版本为fw:v1.2.2,和你所说的v1.3.0不符,这是Y16模式异常的根源之一:

  • 按住PT2上的复位按钮不放,插入USB连接树莓派,进入DFU模式
  • 使用dfu-util刷入v1.3.0固件:
    sudo dfu-util -D purethermal2-firmware-v1.3.0.dfu
    
  • 刷完后重启设备,再次运行脚本确认固件版本显示为v1.3.0

2. 修改脚本,匹配设备实际的Y16格式与帧尺寸

原脚本可能依赖硬编码的UVC_FRAME_FORMAT_Y16枚举值,与当前libuvc版本不兼容,改为通过格式名称和帧尺寸动态匹配:
打开uvc-radiometry.py,找到格式选择相关代码,替换为以下逻辑:

# 遍历所有支持的格式,找到Y16格式
desired_format = None
format_list = uvc.get_format_list(uvc_ctx, dev_handle)
for fmt in format_list:
    if fmt['fourcc'] == b'Y16 ':
        desired_format = fmt
        print(f"Found Y16 format with ID: {desired_format['format_id']}")
        break

if not desired_format:
    print("Error: Y16 format not supported by device")
    uvc.uvc_close(dev_handle)
    uvc.uvc_exit(uvc_ctx)
    exit(1)

# 选择160x120的有效帧尺寸(排除160x122的元数据帧)
desired_frame = None
for frame in desired_format['frame_descriptors']:
    if frame['width'] == 160 and frame['height'] == 120:
        desired_frame = frame
        print(f"Selected Y16 frame: {frame['width']}x{frame['height']} @ {frame['fps']}fps")
        break

if not desired_frame:
    print("Error: 160x120 Y16 frame not found")
    uvc.uvc_close(dev_handle)
    uvc.uvc_exit(uvc_ctx)
    exit(1)

# 启动流时使用动态获取的格式ID和帧ID
ret = uvc.uvc_start_streaming(
    uvc_ctx,
    dev_handle,
    desired_format['format_id'],
    desired_frame['frame_id'],
    uvc.UVC_FRAME_FORMAT_Y16,
    5,
    frame_callback,
    None
)

3. 修复libuvc枚举值不兼容问题

如果使用的是master+libuvc-upstream分支,确保libuvc的绑定已正确更新:

  • 重新编译安装libuvc:
    cd libuvc
    mkdir build && cd build
    cmake ..
    make && sudo make install
    sudo ldconfig
    
  • 确认Python绑定中的UVC_FRAME_FORMAT_Y16值与libuvc源码一致(当前正确值为0x06,旧版本为0x10)

4. 确保USB设备权限与稳定性

  • 将当前用户加入plugdev组,避免权限问题:
    sudo usermod -aG plugdev $USER
    newgrp plugdev  # 无需重启,临时生效
    
  • 使用高质量USB线,避免供电不足或信号干扰;如果树莓派USB端口供电不稳定,尝试使用外接电源供电

验证步骤

修改完成后重新运行脚本,若成功启动Y16流,会输出类似:

Found Y16 format with ID: 2
Selected Y16 frame: 160x120 @ 9fps
Streaming started successfully

此时获取的Y16数据可直接转换为温度值(转换公式:温度 = (Y16值 / 65535) * 150 + (-40),对应Lepton 3.5的基础测温范围,若需扩展到200℃需确认设备是否支持高温模式)

内容的提问来源于stack exchange,提问作者boydy33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:30:50