Zhejiang University RoboMaster Vision

工业相机使用、参数说明、MVS配置与SDK

工业相机与镜头的硬件基础、相机关键参数、MVS 连接操作,以及 SDK 是什么、拿到 SDK 后怎么调用。

Cicada约 18 分钟
#工业相机#MVS#SDK#镜头#RoboMaster

本文面向第一次接触工业相机的视觉组成员,重点是相机参数的调节,以及 MVS 和 SDK 的使用


0. 整体认识

在 RoboMaster 视觉系统里,相机处于整条数据链的最上游:

工业相机 → 图像 → 目标检测 → 位姿解算 → 目标状态估计 → 弹道解算 → 云台控制

相机输出的图像质量决定了下游算法能拿到什么。本文讲清这一段的”相机侧”:

镜头 → CMOS 感光 → 相机电路 → 数据接口 → 上位机(USB3.0) → SDK → 你的代码 → cv::Mat

第一部分:工业相机与镜头的硬件基础

1. 工业相机和普通相机的区别

对比项手机摄像头工业相机
参数可控性曝光/白平衡/增益由算法自动决定,随时在变所有参数可手动锁定,设定后长期不变
最大帧率一般偏低中端相机即可达到 200~800+ FPS(与分辨率和接口也有关)
快门方式多数为卷帘快门常见全局快门
触发方式无外触发支持外触发/软触发/连续采集
数据接口内部接口,直接进手机 SoC标准化的 GigE / USB3.0 等接口,直接进电脑
数据格式通常被压缩处理过可直接输出裸数据(Mono8 / RGB8 / Bayer)

其中最要紧的一条是参数可控且固定

  • 可控:曝光时间、增益、白平衡都可以由你精确指定;
  • 固定:设定之后不会因为环境明暗变化而自动改变。

对比手机就能看出差别:从暗房间走到亮处,手机画面会先突然变亮,再慢慢压暗,这是它在自动调曝光和感光度。这对拍照很方便,对视觉算法却是麻烦——同一个装甲板,上一帧过曝、下一帧欠曝,算法阈值怎么写都稳不住。

工业相机把光圈、焦距、曝光、增益全部锁死后,图像就变得确定:同样的光照下,同一时刻的曝光与响应保持一致。相机内参(焦距、光心、畸变)也随之稳定,这是后续相机标定和位姿解算能成立的前提。

2. 硬件结构介绍

广义上的”相机”由两部分组成,可以分开选型、更换:

flowchart LR
    A["镜头 Lens<br/>决定看到多大、多清晰"] -->|"把光汇聚到靶面"| B["相机头 Camera Head<br/>CMOS/CCD + 电路 + 接口"]
    B -->|"图像数据"| C["上位机电脑"]
  • 相机头(Camera Head):核心是 CMOS / CCD 感光元件。光落在感光元件上,转换为电荷,经电路放大、模数转换,最终通过数据接口发送给电脑。我们平时说的”相机参数”,大部分是这一部分的参数。
  • 镜头(Lens):一组光学镜片,负责把远处物体的光正确汇聚到感光元件上。它决定你看得到多远、看多大范围、看得多清楚。

两者的搭配关系很关键:镜头的光学像面必须覆盖相机头传感器的靶面(传感器尺寸),且法兰距要与接口匹配,否则画面会有暗角或无法对焦。

3. 相机头:把光信号转换为数字信号

相机头内部的信号流大致是:

光 → CMOS 感光元件(光子→电荷) → 模拟放大 → ADC(模数转换) → ISP(可选) → 数据接口 → 电脑
  • 感光元件:目前主流是 CMOS。每个像素是一个感光单元,光子照在上面产生电荷,电荷量对应光的强度。
  • 数据接口:决定传输带宽和连接方式,常见的如下:
接口带宽特点备注
GigE(千兆网)1 Gbps传输距离长、易组网RM 中很常见,需设置 IP
USB 3.0~5 Gbps即插即用、带宽大线长受限(一般 <3m)
Camera Link可达数 Gbps高带宽高稳定需专用采集卡
CoaXPress更高工业高端成本高

对 RM 而言,GigE 和 USB 3.0 是主流。本文后续以海康 USB3.0相机 为例介绍连接流程。

4. 镜头

4.1 焦距与视场角

镜头最重要的参数是焦距(Focal Length,单位 mm)。

  • 焦距长 → 看得远、看得清远处细节,但视野窄;
  • 焦距短 → 视野广,但远处的目标占的像素少。

视野大小用视场角(FOV, Field of View) 描述。已知传感器宽度 W 和焦距 f 时,水平视场角为:

α = 2 × arctan( W / (2f) )

其中 W 是传感器宽度。传感器高度 对应垂直视场角 VFOV,传感器对角线 对应对角视场角 DFOV。

选镜头时,视野不是越大越好:视野过大,目标占的像素少,远处装甲板特征不足;视野过小,目标又可能出画。选多大焦距,就是在这两者之间权衡。

4.2 光圈

光圈控制进光量,用 F 值表示(如 F1.4、F2.0、F8.0)。

F 值数字越小,光圈开得越大,进光越多。

镜头上的光圈环 就是用来手动转动、调节进光量的。光圈还影响景深:大光圈景深浅(背景容易虚化),小光圈景深大。

在 RM 里,曝光时间往往调得很短(几千微秒),为了保证图像足够亮,实车上一般把光圈开得比较大,让光线尽量在短时间内打满感光元件。

4.3 对焦环、光圈环与变焦环

一颗典型的工业定焦镜头上通常有两个环:

作用
对焦环调节镜组位置,让成像平面恰好落在感光元件上(画面清晰)。焦距固定的镜头也需要对焦
光圈环调节进光量大小

变焦镜头(如单反 18-55mm 这类)还会多一个变焦环,用于改变焦距。变焦之后成像平面位置会变,因此每变一次焦都要重新对焦

对焦是拿到相机后要先做的一步:对着算法针对的目标距离,拧对焦环直到图像最锐利,再用胶带或锁紧螺丝固定,之后尽量不要再动它。

4.4 镜头接口:C 口与 CS 口

镜头和相机头之间的机械接口要匹配,最常见的是:

  • C 口:法兰距 17.526 mm;
  • CS 口:法兰距 12.526 mm,相差一个 5 mm 转接环。

CS 口相机装 C 口镜头时需要加转接环,否则无法在无穷远合焦。


第二部分:相机参数说明

了解这些参数,一方面是为了读懂相机数据手册完成选型,另一方面是连接上相机后知道”该调什么、为什么这么调”。

5. 传感器相关参数

5.1 分辨率

分辨率 = 传感器水平 × 垂直方向的像素个数,例如 1280×1024。

  • 分辨率越高,图像越清晰、能看到的细节越多;
  • 但分辨率也不是越高越好:数据量大,算法处理负担重,帧率通常更低。

选型时,分辨率满足”目标在算法要求的最远距离上仍保留足够像素”即可,不必一味追高。例如自瞄主相机往往用 1280×1024 左右,优先保证帧率。

5.2 传感器尺寸

传感器靶面尺寸,常见规格如下(有效面积):

型号有效面积 宽×高(mm)
1/4″3.2 × 2.4
1/3″4.8 × 3.6
1/2″6.4 × 4.8
2/3″8.8 × 6.6
1″12.8 × 9.6

传感器尺寸决定镜头像面要覆盖多大。同一分辨率下,传感器越大、像元通常越大、感光越好。

5.3 像元尺寸

单个像素的物理尺寸(如 3.45 μm、4.8 μm)。

  • 像元小 → 单位面积像素多、分辨率高,利于检测细小缺陷;
  • 但像元越小,满阱容量越小(能存的电荷少),动态范围随之降低,暗光下噪声也更容易显现。

5.4 像素深度

每个像素用多少 bit 表示亮度。8 bit 表示 0~255 共 256 级灰度;16 bit 能表示 65536 级。bit 数越多,亮度分级越细,图像越细腻,但数据量翻倍。

注意:像素深度 ≠ 分辨率。它描述的是”每个像素的明暗分级精度”。

5.5 动态范围

传感器能同时分辨的最亮与最暗的比值。动态范围大 → 强光和阴影部分的细节能同时保留;动态范围小 → 亮部/暗部容易”死白/死黑”。

6. 曝光与快门

6.1 曝光时间

曝光时间就是感光元件”开门”接收光的时间,单位通常为微秒(μs),如 2000 μs = 2 ms。

  • 曝光时间越长,进光越多、图像越亮,但运动目标越容易拖影
  • 曝光时间越短,图像越暗,但能”冻结”高速运动。

在 RM 中曝光时间还直接决定了帧率上限:

帧率上限 ≈ 1 / 曝光时间
例如 2000 μs(2 ms)→ 理论上限约 500 FPS

这也是为什么追求高帧率(如 860 FPS)时必须把曝光压到 1000 μs 左右。曝光太短图像会很暗,又得靠大光圈和增益补偿,所以曝光、光圈、增益这几个参数总是要互相权衡。

6.2 全局快门 vs 卷帘快门

这是 RM 选相机必须弄懂的一组概念:

快门方式曝光方式问题
全局快门(Global Shutter)所有像素同一时刻同时曝光无果冻效应,适合高速运动
卷帘快门(Rolling Shutter)逐行依次曝光高速运动时产生”果冻效应”

手机相机大多是卷帘快门。在高铁上拍窗外的电线杆时,电线杆在画面里会显得又斜又弯,因为每一行曝光的时间点不同,而场景在高速运动。

机器人上相机和敌方都在高速运动,图像变形会直接影响检测和测距,因此自瞄相机必须选全局快门。

6.3 增益(Gain)

对感光信号做放大。增益越大图像越亮,但噪声也会被一起放大,图像变”脏”。

调光的一般顺序是:先开大光圈 → 再延长曝光 → 最后才加增益。增益放在最后,能不加就不加,但受场地光照限制,一般还是会加到最大。

6.4 白平衡

彩色相机的三通道(R/G/B)增益系数。白平衡不对,白色物体拍出来会偏色,直接影响颜色分割(灯条提取)。固定光源下应关闭自动白平衡,手动设定一组系数并锁死。

7. 采集模式(触发方式)

工业相机一般支持三种采集模式:

模式工作方式用途
连续采集相机内部持续曝光出图调试、地面站实时预览
软触发软件发指令,相机才曝光一帧按需取帧,但时延较大
外触发(硬件触发)外部 I/O 收到脉冲信号才曝光对齐时间戳

我们当前用的仍然是软触发,相机时间与软件时间的误差在相机节点中被标定。

8. 其他常用概念

  • 伽马曲线 / Gamma:对亮度做非线性映射,让画面更符合人眼观感。工业算法一般用默认值,不建议为了”好看”乱调。
  • 像素格式(Pixel Format):Mono8(灰度)、RGB8(彩色)、BayerRG8(拜耳原始)等。彩色相机输出的是 Bayer 格式时,需要做去马赛克(debayer)转成 RGB,SDK 或 OpenCV 都提供转换。
  • 光谱响应:传感器对不同波长光的敏感度,选灯/选相机时参考,日常开发基本不用管。

9. 一次调参的思路

拿到车上的相机,一套比较合理的初始化流程:

1. 确定场景:白天/晚上、是否开灯条,先决定大致曝光量级
2. 光圈固定到最大(F1.4 附近),不再动
3. 拧对焦环,让目标最清晰,锁死
4. 在 MVS/SDK 里设曝光(比如从 2000 μs 起步),观察画面亮度
5. 曝光不足再加增益,曝光合适就尽量不开增益
6. 关自动白平衡,手动校准白平衡
7. 全部参数确认后,存成配置,每次上电自动加载

核心原则:先把画面调稳定,再去调算法。 画面参数不稳定,后面的特征阈值就没有立足点。


第三部分:MVS —— 连接相机的软件与操作顺序

10. MVS:机器视觉软件

MVS(Machine Vision Software) 是海康机器视觉出品的工业相机配套软件,也是我们队里使用的相机调试工具。MVS 同时包含两样东西:

  1. MVS 客户端(上位机软件):图形界面,用于连接相机、实时预览、调参数、存图存配置;
  2. MVS SDK:面向开发者的开发包,包含头文件、动态库、示例代码和文档,供我们写 C++/C#/Python 程序调用。

所以流程是:先用 MVS 客户端 把相机连上、把参数调好;再用 SDK 在自己的程序里复现同一套参数并取流。两者用的是同一套参数体系。

不同厂商的同类工具叫法不同(如迈德威视 SDK、大恒 Galaxy 软件),但”客户端调参 + SDK 开发”的思路一致。

11. 安装 MVS

从海康机器人官网的”机器视觉 → 下载中心”下载对应平台的 MVS(Windows / Linux)。安装注意:

  • Windows:一路默认安装即可,安装过程中会为 USB 相机注册 USB3 Vision 驱动
  • Linux:解压后运行 setup.sh,需要 sudo;安装后会自动配置 udev 规则,让普通用户也能访问 USB 相机。

12. 连接相机:USB 3.0 相机的完整操作顺序

12.1 USB 3.0 相机的”即插即用”原理

和 GigE 网口相机不同,USB3.0 相机不需要配置 IP:USB 由主机(Host)直接管理,插上电脑后系统会自动枚举出这个设备,MVS 就能发现它。

但它有两个前提:

  1. 必须插在 USB 3.0 口上:USB 3.0 接口内部是蓝色(或有 SS / SuperSpeed 标志),带宽约 5 Gbps;插到 USB 2.0 口虽然能识别,但带宽掉到 480 Mbps,高分辨率高帧率会直接顶不住;
  2. 驱动/权限必须就绪:Windows 上由 MVS 安装时注册驱动;Linux 上需要 udev 规则(见下)。

12.2 完整连接流程

flowchart TD
    A["① 硬件连接<br/>USB3.0 线 → 相机<br/>另一头插电脑蓝色口"] --> B["② 确认驱动/权限<br/>Windows: MVS 已装<br/>Linux: udev 规则 + 免 sudo"]
    B --> C["③ 打开 MVS<br/>等待设备出现在<br/>USB3 Vision 设备列表"]
    C -->|"看不到设备"| D["换 USB3.0 口 / 换线<br/>查驱动 / 查权限"]
    C -->|"看到设备"| E["④ 选中设备 → 连接"]
    E --> F["⑤ 配置参数<br/>曝光/增益/触发/像素格式"]
    F --> G["⑥ 开始采集<br/>实时预览或单帧保存"]
    G --> H["⑦ 导出/保存配置<br/>后续每次上电加载"]

第 ① 步:确认用的是 USB 3.0 接口

  • 优先插在机箱后面板 的主板原生 USB 3.0 口(蓝色 / SS 标志);
  • 不要经过 USB Hub(尤其无源 Hub),带宽会被共享和削弱。

第 ② 步:Linux 下让普通用户能访问相机

USB 设备默认只有 root 才能访问,不配置权限时跑程序经常报没有权限。MVS 安装脚本一般会自动写入 udev 规则,验证和手动补救的方法如下:

# 查看相机对应的设备
lsusb

# 确认 MVS 生成的 udev 规则是否存在
ls /etc/udev/rules.d/ | grep -i hik

# 如果缺失,给相机所在 vid/pid 放开读写权限
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"' \
    | sudo tee /etc/udev/rules.d/99-hik-usb.rules

# 重载规则并重新插拔相机
sudo udevadm control --reload-rules

快速验证是不是权限问题:sudo ./你的程序。用 sudo 能打开、普通用户打不开,就是 udev 规则的问题。

第 ③ 步:MVS 里看到设备

打开 MVS,左侧”设备列表”会出现 USB3 Vision 设备。插好线却看不到,按优先级排查:

现象排查项
设备列表为空是否插在蓝色 USB3.0 口?换个口试试
设备列表为空换一根 USB3.0 线(线材质量差异很大)
设备列表为空Windows 看”设备管理器”驱动是否正常;Linux 查 udev / 先用 sudo 验证
显示”不可用/被占用”相机已被其他程序(如另一个 MVS 实例)打开,先关闭它
画面卡顿/掉帧确认工作在全速模式,不要经过 USB Hub

13. 在 MVS 里完成一次典型采集

连接成功后的常用操作顺序:

  1. 连接设备:设备列表里双击或右键 →“连接”;
  2. 看实时画面:点击”开始采集”,此时是连续采集模式,画面实时刷新;
  3. 调参数:在”相机参数”面板设置曝光时间、增益、触发模式、像素格式等,画面会即时反馈;
  4. 存单帧/录像:抓拍当前帧保存为图片,或录制视频用于离线调试;
  5. 保存配置:把调好的参数存为用户配置,之后程序或 MVS 可直接加载。这一步很关键,能保证每次上电画面一致。

调好的参数尽量用 SDK 在代码里显式设置一遍,不要依赖 MVS 客户端记忆配置。这样换电脑、换相机、换环境后,程序行为依然一致。

14. 常见问题速查

  • MVS 枚举不到相机:先确认插的是蓝色 USB3.0 口;换一根 USB3.0 线;重启 MVS;Linux 下检查 udev 规则,或先用 sudo 验证是不是权限问题。
  • 触发模式切到外触发后画面不动了:这是正常的,外部没有脉冲信号相机就不曝光。调试时先切回”连续采集”。
  • 画面暗:加大曝光 → 加增益 → 开大光圈,按这个优先级调。
  • 画面亮但有拖影:曝光太长,缩短曝光时间(必要时补光圈/增益)。

第四部分:SDK

15. SDK 的概念

SDK = Software Development Kit,软件开发工具包。

字面拆解:

  • Software:针对某个硬件(比如相机)或平台;
  • Development Kit:帮助”开发”这件事的一组”工具”。

厂商为什么要给你 SDK?因为工业相机底层涉及 USB/网口协议、寄存器读写、图像缓冲管理,这些不该让每个用户自己写。厂商把底层封装好,对外暴露一组函数(API),再附上文档示例代码,就组成了一个 SDK。

关键认识

  1. 头文件(Include) 告诉你有哪些函数可以调、参数是什么;
  2. 库(Libraries) 才是函数真正的实现,编译和运行时必须链接到它;
  3. 示例(Samples) 是官方写好的最小可用代码,学习顺序是先跑通示例,再改示例,最后才自己写
  4. SDK 和 OpenCV 一样,本质是”头文件 + 库 + 文档 + 示例”四件套,你的工作就是按它的调用规则把这些接口组合起来。

16. 小结

MVS 客户端:连相机、调参数、存配置(人机交互)
MVS SDK:在你的代码里复现同一套参数并持续取流
调用:跑通 Sample → 改 Sample → 按生命周期封装 → 异常处理
  • 硬件与参数部分,帮你看懂相机在做什么;
  • MVS 部分,教你把相机连上、调好;
  • SDK 部分,教你把相机搬进自己的代码里。

拿到图像之后,就进入 OpenCV 的处理环节(见文档 09);相机能成像、能取流之后,下一步是相机标定,用标定得到的内参把像素坐标和三维空间联系起来(见文档 11 的成像模型)。


学习参考:文档与视频

本文内容综合自以下资料,建议配合文章和视频一起阅读,加深理解:

类型名称链接覆盖内容
文章工业相机常见参数(AomanHao · CSDN)https://blog.csdn.net/Aoman_Hao/article/details/105170139分辨率、传感器尺寸、像元尺寸、像素深度、动态范围、帧率、曝光方式、采集模式、增益等相机参数的系统讲解
文章RM 教程 4 —— 相机(Harry’s Blog)https://harry-hhj.github.io/posts/RM-Tutorial-4-Camera/相机与镜头结构、成像模型、畸变、相机标定,以及 FOV 计算
视频火锅战队 2023 视觉培训 4:工业相机 & SLAM 基础https://www.bilibili.com/video/BV1gc411N7QB/工业相机参数、硬件与使用思路的实战讲解,比较直观
返回入组培训
|