自组双目测距定位系统
硬件结构
- 海康威视工业相机: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 之间,图像暗处亮度下降。
环境配置
SDK下载与安装
MVS SDK 下载链接,NX选ARM架构安装
巨帧与IP
U口相机不用像网口一样配置开启巨帧和设置静态IP
用客户端打开相机
ARM架构打开MVS客户端: 1
2cd /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
26import 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()蓝色杜邦线接GPIO13
在MVS-->数字IO控制中,选择LINE 2;在采集控制一栏,打开触发模式,触发源LINE 2,触发源选高电平
触发源选LINE 2
如此便可以得到双目采集结果
双目显示结果
仍需解决
- SDK二次开发
- 双目采集的以AVI保存视频,如何两个视频之间帧对齐
- 结构件
- 双目标定
- 融合双目测距算法(已有)