RMVL  2.4.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到
相机设备

相机模块的基本使用,包括初始化、参数设置以及运行示例

作者
赵曦
日期
2023/03/15
版本
1.0

上一篇教程:轻量发布订阅服务 —— LPSS
下一篇教程:光源控制器


相关类

1 如何使用

使用前需安装相机驱动,详情参考:构建并安装 RMVL ,下面以 MvCamera 为例介绍如何使用相机模块,其余相机操作完全一致。

1.1 初始化

创建 MvCamera 对象即可初始化相机:

第 1 个参数为 相机初始化模式 ,包含

  • 相机外部触发通道
  • 相机采集模式
  • 相机句柄创建方式
  • 相机数据处理模式

4 个待配置的数据,见下表

初始化配置模式含义标识符功能
相机外部触发通道通道 0rm::TriggerChannel::Chn0通道 0 生效
通道 1rm::TriggerChannel::Chn1通道 1 生效
通道 2rm::TriggerChannel::Chn2通道 2 生效
通道 3rm::TriggerChannel::Chn3通道 3 生效
采集方式连续采集rm::GrabMode::Continuous连续触发相机,当 grab 方法被执行后,相机将开始连续采集,一般调用 read 或在相机构造之初可自动开启相机 Grabbing。
软触发rm::GrabMode::Software软件触发,需要手动设置触发帧,当相机开始取流(Grabbing)时,只有在被设置触发帧之后的下一次执行有效,否则会阻塞以等待接收到触发帧,RMVL 相机库目前仅支持同步的相机数据处理,在指定时间内如果没有收到触发帧,则会被认为相机读取 read 失败。
硬触发rm::GrabMode::Hardware硬件触发,通过向相机的航空接头等串行通信接口传输高低电平信号来设置触发帧,信号的有效性可通过软件设置,例如设置高电平、低电平、上升边沿、下降边沿的一种为触发方式,有关相机取流的细节同软触发。
相机句柄模式索引号rm::HandleMode::Index相机的索引号 (0, 1, 2 ...)
序列号rm::HandleMode::Key制造商:序列号 S/N
MACrm::HandleMode::MAC相机的 MAC 地址
IP 地址rm::HandleMode::IPIP 地址,形如 192.168.1.100
相机数据处理模式使用 OpenCVrm::RetrieveMode::OpenCVOpenCV 的 imgproc 模块提供了有关数据处理的接口,例如 cv::cvtColor 可以用于色彩空间转换
使用厂商 SDKrm::RetrieveMode::SDKSDK 中提供了有关数据处理的接口,主要用于相机解码、色彩空间转换等操作

详细的触发方式

参见

1.2 光学属性设置

1.2.1 曝光设置

手动/自动设置曝光

设置曝光值

  • C++

    capture.set(rm::CAMERA_EXPOSURE, 600); // 设置曝光值为 600
    @ CAMERA_EXPOSURE
    曝光值
    定义 camutils.hpp:103
  • Python

    capture.set(rm.CAMERA_EXPOSURE, 600) # 设置曝光值为 600

1.2.2 白平衡设置

手动/自动设置白平衡

设置各通道增益,并生效(在手动设置白平衡模式下有效)

  • C++

    capture.set(rm::CAMERA_WB_RGAIN, 102); // 红色通道增益设置为 102
    capture.set(rm::CAMERA_WB_GGAIN, 101); // 绿色通道增益设置为 101
    capture.set(rm::CAMERA_WB_BGAIN, 100); // 蓝色通道增益设置为 100
    @ CAMERA_WB_BGAIN
    白平衡蓝色分量
    定义 camutils.hpp:108
    @ CAMERA_WB_GGAIN
    白平衡绿色分量
    定义 camutils.hpp:107
    @ CAMERA_WB_RGAIN
    白平衡红色分量
    定义 camutils.hpp:106
  • Python

    capture.set(rm.CAMERA_WB_RGAIN, 102) # 红色通道增益设置为 102
    capture.set(rm.CAMERA_WB_GGAIN, 101) # 绿色通道增益设置为 101
    capture.set(rm.CAMERA_WB_BGAIN, 100) # 蓝色通道增益设置为 100

1.2.3 其余光学参数设置

  • C++

    capture.set(rm::CAMERA_GAIN, 64); // 设置模拟增益为 64
    capture.set(rm::CAMERA_GAMMA, 80); // 设置 Gamma 为 80
    capture.set(rm::CAMERA_CONTRAST, 120); // 设置对比度为 120
    capture.set(rm::CAMERA_SATURATION, 100); // 设置饱和度为 100
    capture.set(rm::CAMERA_SHARPNESS, 100); // 设置锐度为 100
    @ CAMERA_SATURATION
    饱和度
    定义 camutils.hpp:110
    @ CAMERA_CONTRAST
    对比度
    定义 camutils.hpp:109
    @ CAMERA_GAMMA
    Gamma 值
    定义 camutils.hpp:105
    @ CAMERA_SHARPNESS
    锐度
    定义 camutils.hpp:111
    @ CAMERA_GAIN
    模拟增益
    定义 camutils.hpp:104
  • Python

    capture.set(rm.CAMERA_GAIN, 64) # 设置模拟增益为 64
    capture.set(rm.CAMERA_GAMMA, 80) # 设置 Gamma 为 80
    capture.set(rm.CAMERA_CONTRAST, 120) # 设置对比度为 120
    capture.set(rm.CAMERA_SATURATION, 100) # 设置饱和度为 100
    capture.set(rm.CAMERA_SHARPNESS, 100) # 设置锐度为 100
注解
Hik 工业相机暂不支持修改 Gamma

1.3 触发属性设置

  • C++

    // 设置硬触发采集延迟为 1000 μs,仅在硬触发模式下有效
    capture.set(rm::CAMERA_TRIGGER_DELAY, 1000);
    // 设置单次触发时的触发帧数为 5 帧,即一次触发能触发 5 帧画面,仅在触发模式下有效
    capture.set(rm::CAMERA_TRIGGER_COUNT, 5);
    // 设置单次触发时多次采集的周期为 100 μs,即一次触发信号能触发多帧画面,每帧间隔为 100 μs
    capture.set(rm::CAMERA_TRIGGER_PERIOD, 100);
    // 执行一次白平衡操作,仅在手动白平衡模式下有效
    capture.set(rm::CAMERA_ONCE_WB);
    // 执行一次软触发,仅在软触发模式下有效
    @ CAMERA_TRIGGER_SOFT
    执行软触发
    定义 camutils.hpp:119
    @ CAMERA_ONCE_WB
    执行单次白平衡
    定义 camutils.hpp:120
    @ CAMERA_TRIGGER_PERIOD
    单次触发时多次采集的周期(微秒 )
    定义 camutils.hpp:118
    @ CAMERA_TRIGGER_DELAY
    硬触发采集延迟(微秒 )
    定义 camutils.hpp:116
    @ CAMERA_TRIGGER_COUNT
    单次触发时的触发帧数
    定义 camutils.hpp:117
  • Python

    # 设置硬触发采集延迟为 1000 μs,仅在硬触发模式下有效
    capture.set(rm.CAMERA_TRIGGER_DELAY, 1000)
    # 设置单次触发时的触发帧数为 5 帧,即一次触发能触发 5 帧画面,仅在触发模式下有效
    capture.set(rm.CAMERA_TRIGGER_COUNT, 5)
    # 设置单次触发时多次采集的周期为 100 μs,即一次触发信号能触发多帧画面,每帧间隔为 100 μs
    capture.set(rm.CAMERA_TRIGGER_PERIOD, 100)
    # 执行一次白平衡操作,仅在手动白平衡模式下有效
    capture.set(rm.CAMERA_ONCE_WB)
    # 执行一次软触发,仅在软触发模式下有效
    capture.set(rm.CAMERA_TRIGGER_SOFT)

2 para 参数加载

RMVL 提供了全局的相机参数对象: rm::para::camera_param ,详情可参考类 rm::para::CameraParam

3 示例程序

在构建 RMVL 时,需开启 BUILD_EXAMPLES 选项(默认开启)

cmake -DBUILD_EXAMPLES=ON ..
cmake --build . --parallel 4
cd build

3.1 单相机

单相机例程,在 build 文件夹下执行以下命令

bin/rmvl_mv_mono

相机按照连续采样、cvtColor 处理方式运行,程序运行中,cv::waitKey(1) 接受到 s 键被按下时,可将参数保存到 out_para.yml 文件中。

键入一次 Esc 可暂停程序,按其余键可恢复。键入两次 Esc 可退出程序。

3.2 多相机

多相机例程,在 build 文件夹下执行以下命令

bin/rmvl_mv_multi

相机按照连续采样、cvtColor 处理方式运行,程序会枚举所有的相机设备,并可视化的显示出来,指定一个序列号来启动某一相机。

程序运行过程中,相机参数会自动从 out_para.yml 中加载,若没有则会按照默认值运行。

键入一次 Esc 可暂停程序,按其余键可恢复。键入两次 Esc 可退出程序。

3.3 相机录屏

相机录屏例程,在 build 文件夹下执行以下命令

bin/rmvl_mv_writer

相机按照连续采样、cvtColor 处理方式运行,-o 可指定输出文件名,否则默认输出到 ts.avi,例如

bin/rmvl_mv_writer -o=aaa.avi

程序运行过程中,相机参数会自动从 out_para.yml 中加载,若没有则会按照默认值运行。

3.4 相机标定

MvCamera 相机自动标定程序,在 build 文件夹下执行以下命令

bin/rmvl_mv_auto_calib -w=<?> -h=<?> -s=<?> -d=<?> -n=<?>

<?> 表示可调节,具体帮助可直接执行以下命令

bin/rmvl_mv_calibration -help

另外还有相机手动标定程序,可执行以下命令

bin/rmvl_mv_manual_calib

4 使用 Demo

4.1 连续采样

4.2 软触发