自组双目测距定位系统

双目相机,自己动手省钱95%

 

硬件结构

  • 海康威视工业相机:MV-CE120-10UM/UC 1/1.7' CMOS + MVL-KF1228M-12MP 12mm 镜头 + 触发线缆
  • 海康威视相机资料,提取码:6666
  • Nvidia Jetson NX 开发板
  • 结构件(横梁用来固定双目基线等)
  • 总体示意图:

 

术语

全局快门

  支持全局快门的相机,每一行同时开始曝光,同时结束曝光,曝光完成后,数据开始逐行读出。相机传感器接受曝光、数据读出的时间长度一致,但结束数据读出的时间不一致。
全局快门

 

卷帘快门

  支持卷帘快门的相机,第一行曝光结束后,立即开始读出数据,数据完全读出后,下一行开始读出数据,每一行与上一行开始曝光的时间差为数据读出时间,如此循环。相机传感器接受曝光、数据读出的时间长度一致,但开始接受曝光的时间不一致。
卷帘快门

 

触发

  • 相机的触发模式分为内触发模式和外触发模式 2 种
  • 内触发模式:相机通过设备内部给出的信号采集图像
  • 外触发模式:相机通过外部给出的信号采集图像。外部信号可以是软件信号,也可以是硬件信号,包含软触发、硬件触发、计数器触发和自由触发4种方式
  • 软触发:触发信号由软件发出,通过千兆网传输给相机进行采图
  • 硬件触发:外部设备通过相机的 I/O 接口与相机进行连接,触发信号由外部设备给到相机进行采图
  • 计数器触发:通过计数器的方式给相机信号进行采图
  • 自由触发:相机可接收软触发或硬件触发信号
  • 触发响应方式,如下图:
    触发响应方式工作原理及参数

 

光耦隔离输入/输出

  光耦的核心应用是隔离作用,常用于输入与输出之间无共地的系统

 

上拉/下拉电阻

  上拉电阻:将一个不确定信号(高或低电平),通过一个电阻与电源VCC相连,固定在高电平;同理下拉电阻就是:将一个不确定信号(高或低电平),通过一个电阻与地GND相连,固定在低电平

 

Binning

  Binning 功能可将多个相邻像素合并为一个像素,降低分辨率的同时提高图像亮度。

  下采样功能是在多个相邻像素中选择一个像素,可以降低输出分辨率。

 

黑电平

  黑电平可以调整输出数据的灰度值偏移量,决定相机传感器不感光时的平均灰度值。

 

Gamma校正

  通常相机芯片的输出与照射在芯片感光面的光子是线性的, Gamma 校正提供了一种输出非线性的映射机制。Gamma 值在 0.5 ~ 1 之间,图像暗处亮度提升;Gamma 值在 1 ~ 4 之间,图像暗处亮度下降。
Gamma曲线图

 

环境配置

SDK下载与安装

  MVS SDK 下载链接,NX选ARM架构安装

 

巨帧与IP

  U口相机不用像网口一样配置开启巨帧和设置静态IP

 

用客户端打开相机

  ARM架构打开MVS客户端:

1
2
cd /opt/MVS/bin
./MVS

 

相机基础

CMOS

  • 相机CMOS索尼IMX226
  • 靶面1/1.7"
  • 1200万像素(40003036) 最大帧率31fps
  • 彩色
  • 9~24V直流供电,支持USB 3.0供电

 

镜头

  • 镜头焦距12mm(等效全画幅下53.52mm
  • 光圈F/2.8-F/16
  • 视场角1.1",HFOV(horizontal field of view) 59.8°, VFOV(vertical field of view) 46.2°, DFOV(display field of view) 70.5°
  • 最近摄距0.1m
  • 白点所在环分别为对焦环和光圈调整环,带有锁紧螺丝
    对焦环与光圈环

 

正确曝光

  由于初始使用原生iso,画面需要数字增益来控制画面正确曝光:在采集控制(Acquisition Control)-->自动曝光(Exposure Auto) 设置为连续,并将模拟控制(Analog Control)-->自动增益(Gain Auto) 设置为连续

 

硬件同步触发

硬件触发需求

  双目相机意味着两台相机要尽可能在一时刻同时采集图像,尽可能减小采集时间差,而软件由于时钟源以及线程时序等问题,难以获得较好的时钟同步结果,故采用硬件触发

 

线缆接法

  • 两个相机PWR对应的6pin线缆中,管脚定义如下
    6pin管脚信号定义
  • 两个相机的红黑色线缆分别于各自的电源适配器相连,蓝色信号线一起连接一根杜邦线
    红色+12V,蓝色I/O input 1, 黄色无连接 ,绿色I/O output 1, 白色 I/O ground, 黑色 GND
  • 连接好后,可以在MVS上同时打开显示两台相机,注意由于NX板载电压不足,两相机的USB应插在不同基座的接口上

 

NX配置固定频率输出信号

  • PWM在此不适用,如果快门时间很短,一个PWM波内可能拍几张

  • GPIO,使用simple/simple_out.py 单峰脉冲信号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import RPi.GPIO as GPIO
    import time

    # Pin Definitions
    output_pin = 18 # BCM pin 18, BOARD pin 12

    def main():
    # Pin Setup:
    GPIO.setmode(GPIO.BCM) # BCM pin-numbering scheme from Raspberry Pi
    # set pin as an output pin with optional initial state of HIGH
    GPIO.setup(output_pin, GPIO.OUT, initial=GPIO.HIGH)

    print("Starting demo now! Press CTRL+C to exit")
    curr_value = GPIO.HIGH
    try:
    while True:
    time.sleep(1)
    # Toggle the output every second
    print("Outputting {} to pin {}".format(curr_value, output_pin))
    GPIO.output(output_pin, curr_value)
    curr_value ^= GPIO.HIGH
    finally:
    GPIO.cleanup()

    if __name__ == '__main__':
    main()

  • NX pin口不等于GPIO口

  • 蓝色杜邦线接GPIO13

  • 在MVS-->数字IO控制中,选择LINE 2;在采集控制一栏,打开触发模式,触发源LINE 2,触发源选高电平

    触发源选LINE 2

  • 如此便可以得到双目采集结果

    双目显示结果

仍需解决

  • SDK二次开发
  • 双目采集的以AVI保存视频,如何两个视频之间帧对齐
  • 结构件
  • 双目标定
  • 融合双目测距算法(已有)