2. 镜头焦距与工作距离确定

任务目标

已知相机传感器靶面尺寸、所需视野范围(FOV)以及镜头到被测物的最大允许工作距离(WD),计算所需镜头焦距,并从工业镜头选型表中确定合适型号。

核心计算公式

对于固定焦距镜头,当工作距离远大于镜头焦距时,成像关系近似为:

f = (WD × 传感器尺寸) / FOV

其中传感器尺寸与FOV需取同一方向(通常以水平方向计算)。实际选型时还需考虑镜头接口(C/CS)、靶面尺寸兼容性(镜头靶面≥相机靶面)及畸变要求。

完整实现代码


def calc_focal_length(sensor_mm, fov_mm, wd_mm):
    """
    计算所需镜头焦距
    :param sensor_mm: 相机传感器水平方向尺寸(mm)
    :param fov_mm:    所需水平视野范围(mm)
    :param wd_mm:     镜头前端到被测物的距离(mm)
    :return: 计算焦距(mm)
    """
    if fov_mm <= 0 or wd_mm <= 0 or sensor_mm <= 0:
        raise ValueError("所有输入必须为正数")
    return (wd_mm * sensor_mm) / fov_mm

def select_lens(focal_length, available_lenses):
    """
    从现有镜头中选择最接近且不小于计算焦距的型号
    :param focal_length: 计算所需焦距(mm)
    :param available_lenses: 镜头列表,每项为(型号, 焦距mm, 靶面尺寸mm)
    :return: 推荐镜头(型号, 焦距mm) 或 None
    """
    candidates = [lens for lens in available_lenses
                  if lens[1] >= focal_length and lens[2] >= 8.8]  # 8.8mm为2/3"相机靶面水平尺寸
    if not candidates:
        return None
    return min(candidates, key=lambda x: x[1])

if __name__ == "__main__":
    # 案例参数:2/3" 相机,水平靶面 8.8mm
    SENSOR_H = 8.8  # mm
    # 需求:视野宽度 200mm,安装空间限制工作距离最大 500mm
    FOV_REQUIRED = 200  # mm
    WD_MAX = 500       # mm

    f = calc_focal_length(SENSOR_H, FOV_REQUIRED, WD_MAX)
    print(f"所需焦距: {f:.1f} mm")

    # 可用镜头库(型号, 焦距, 最大兼容靶面水平尺寸mm)
    lens_library = [
        ("M0814-MP2", 8.5, 8.8),
        ("M1224-MP2", 12.5, 8.8),
        ("M1620-MP2", 16.5, 8.8),
        ("M2514-MP2", 25.5, 8.8),
        ("M3520-MP2", 35.5, 8.8),
    ]

    chosen = select_lens(f, lens_library)
    if chosen:
        print(f"推荐镜头: {chosen[0]},焦距 {chosen[1]} mm")
        # 验证实际视野
        actual_fov = (WD_MAX * SENSOR_H) / chosen[1]
        print(f"该镜头在500mm工作距离下实际视野: {actual_fov:.1f} mm")
    else:
        print("现有镜头库中无合适型号,需定制或调整工作距离")

运行与验证

运行方式:将代码保存为 lens_selection.py,执行 python lens_selection.py。

预期输出:


所需焦距: 22.0 mm
推荐镜头: M2514-MP2,焦距 25.5 mm
该镜头在500mm工作距离下实际视野: 172.5 mm

验证判定:

  • 计算焦距22.0mm与手算一致(500×8.8/200=22)。
  • 镜头库中25.5mm是大于22mm的最小焦距,选型逻辑正确。
  • 实际视野172.5mm小于需求200mm,说明该镜头在500mm处视野不足——此时应缩短工作距离至约580mm(25.5×200/8.8),或重新选择更短焦距镜头。此结果提示选型需结合工作距离约束迭代确认。

选型注意事项

  • 若计算焦距介于两个定焦镜头之间,优先选择较短焦距以获得更大视野余量,但需重新核算工作距离是否满足安装空间。
  • 镜头靶面尺寸必须不小于相机靶面,否则画面边缘会出现暗角。
  • 实际镜头出厂焦距与标称值存在±5%公差,选型后建议通过实测标定确认。
镜头焦距-工作距离-视野关系示意 相机 镜头 工作距离 WD = 500 mm 视野 FOV = 200 mm 传感器 8.8mm f = (WD × 传感器尺寸) / FOV = (500 × 8.8) / 200 = 22 mm 计算焦距22mm → 选型25.5mm镜头 → 实际视野172.5mm(需缩短WD至580mm)