1 前言

今年参加了十五届研电赛,前天刚提交了作品,还有几天就答辩了,趁这几天总结一下这一个多月的收获。

本次研电赛作品为汽车行驶防碰撞系统,主要面向大型汽车在低速行驶场景下的防碰撞问题,通过双目相机测量驾驶员视野盲区中主要障碍物与车身之间的最近距离,以及检测盲区视野中是否出现行人,并通过显示屏实时显示检测画面和扬声器语音播放的方式及时警示驾驶员,防止车辆发生碰撞事故。

针对的大型汽车有客运汽车、大货车、校车、公交车、消防车、挖掘机等等,这些车辆的特点就是体积大,体现在车长、车高都比较突出。因为车辆本身的原因,驾驶员的盲区也比较多,在倒车,转弯时,很可能因为盲区的原因而无法看到部分障碍物而造成碰撞事故,如果有行人出现在盲区内,但是驾驶员是注意不到的,那更是一种灾难。

目前,市面上传统的解决方法是安装倒车影像,或者倒车雷达,或者在车辆前后方安装摄像头捕捉实时画面,但是这些方法在功能上都单一,存在一定的不足。比如倒车影像只有倒车引导线和倒车画面,无法测量距离,普通的倒车雷达的测量距离比较短,只有5米左右,且无法做到在盲区全覆盖,实时画面就只是一个单纯的摄像头拍摄,没有任何处理,因此,针对大型汽车存在视野盲区面积大,危险性大,容易给行人带来安全隐患的问题,为改进当前的倒车影像、雷达等传统手段的不足,我们团队开发了汽车行驶防碰撞系统,本系统的的核心技术为双目测距。

2 双目相机制作

双目相机的两个摄像头必须参数一致,型号完全相同,且光心处于同一水平线上,即保持前行平行,可以淘宝直接购买,也可自己购买两个相机,设计好一前一后两块铝板,相机放在两块铝板之间,自己安装双目相机。淘宝直接购买的话两相机之间的距离固定,如果自己制作相机,可以根据自己的需求控制两相机之间的距离,一般来说,在一定范围内,两相机距离越远,双目能探测到的距离也就越长(实际上与相机焦距也有关系)。

3 相机标定

在本系统的设计中,相机是获取外界信息的唯一传感器,系统在车前安装一对双目,车后安装一对双目,在车后最上方还安装有一个广角取景相机(拍摄角度更大,可达到170度,正常人眼的观察视角为120度,鱼眼相机的范围为360度),一共安装有5个USB摄像头。由于相机镜头自身的工艺特性,造成拍摄的图片会存在畸变失真现象,为校正这种失真需要获取相机的特性参数,即内参(焦距、主点、畸变系数)。同时系统需要利用双目对拍摄的图像进行立体匹配和3D重建以获取目标离相机镜头的距离信息,即将像素坐标系映射到世界坐标系,所以还需要获取相机外参(旋转矩阵R,平移矩阵T)。相机标定的目的就是为了获取这些参数。

3.1 图像采集

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2020/7/16 16:42
# @Author : LiShan
# @File : imageCollect.py
# @Software: PyCharm
# @description:通过左右两个相机拍照采集图像并保存到指定目录(用于相机标定前的采集图像工作)
import cv2
import oscv2.namedWindow("left", 0)
cv2.namedWindow("right", 0)
cv2.moveWindow("left", 0, 0)
cv2.moveWindow("right", 801, 0)
cv2.resizeWindow("left", 800, 600)
cv2.resizeWindow("right", 800, 600)
left_camera = cv2.VideoCapture(1)
right_camera = cv2.VideoCapture(2)# 设置左右摄像头的分辨率
left_camera.set(3, 800)
left_camera.set(4, 600)
right_camera.set(3, 800)
right_camera.set(4, 600)# 拍照次数
counter = 1# 棋盘格尺寸
pattern = (7, 5)# 拍照文件目录
folder = 'D:/img/img_back/'
if os.path.exists(folder):pass
else:os.makedirs(folder)def shot(pos, frame):global counterpath = folder + pos + "_" + str(counter) + ".bmp"cv2.imwrite(path, frame)print("snapshot saved into: " + path)while True:ret1, left_frame = left_camera.read()ret2, right_frame = right_camera.read()cv2.imshow("left", left_frame)cv2.imshow("right", right_frame)key = cv2.waitKey(1)if key == ord('q'):break# 按下s键,拍摄当前图像elif key == ord('s'):shot("left", left_frame)shot("right", right_frame)counter += 1left_camera.release()
right_camera.release()
cv2.destroyWindow("left")
cv2.destroyWindow("right")

相机标定目标常用的方法是张正友棋盘标定法,在matlab中已经集成了自动化的标定工具箱和立体校正工具箱

此外还可在官网下载matlab手动标定工具箱

http://www.vision.caltech.edu/bouguetj/calib_doc/download/index.html

手动标定工具箱官方使用说明 http://www.vision.caltech.edu/bouguetj/calib_doc/

自动标定的优点是速度快,但是精度较差,适合大量图片的标定,一键导入图片,点击自动校准按钮即可,再剔除误差较大的图像对,大约5分钟不到

手动标定相反,其优点是精度较好,但比较费时间,标定20对左右相机图片(40张)大概需要30分钟左右

本文采取的思路是两种方法相结合,采集了70对左右相机图片,然后通过自动标定工具箱筛选出20对,再对这20对图像进行手动标定

自动标定流程

点击Stereo Camera..

点击Add Images,选择左右相机采集图片文件夹,填写所用棋盘方格边长(此边长根据自己的实际情况填写)

此自动标定工具箱会自动剔除拍摄效果不好的图片,图中剔除了28对,留下了42对图片

按图中所示,选择3个径向畸变系数,计算偏差和切向畸变系数,最后点击菜单栏中绿色的三角形,校准相机参数

根据误差计算结果,选中误差最大的图像对,鼠标右键,逐渐移除误差较大的图像对,当移除到只剩20对图像时,选中菜单栏右侧的导出摄像机参数图标(绿色的√),并记下剩下的图像对编号,将剩下的图像重新放入一个文件夹,开始下一步的手动标定。

手动标定流程

未完待续

研电赛项目之双目测距,涉及matlab相机标定,opencv多线程编程,摄像头读取,行人检测、BM立体匹配等等相关推荐

  1. 2018研电赛项目介绍

    背景 2018年4月份我们准备研电赛的参赛内容,在经过广泛的查阅资料,并结合自己的研究课题,我提出了两个idea: 做一个家庭音响系统,每个房间可以独立的播放歌曲,歌曲的控制通过语音交互,有一个树莓派 ...

  2. 【2022研电赛】兆易创新杯全国二等奖:自动驾驶汽车路面目标智能检测系统

    本文为2022年第十七届中国研究生电子设计竞赛兆易创新杯全国二等奖作品分享,参加极术社区的[有奖活动]分享2022研电赛作品扩大影响力,更有丰富电子礼品等你来领! 团队介绍 参赛单位:Guangxi ...

  3. 研电赛项目之罗氏线圈设计

    初识罗氏线圈 罗氏线圈是一个均匀缠绕在非磁性材料上的环形线圈,绕中心点旋转一圈后回到起点,连接到一条线缆上固定. 图1. 罗氏线圈 罗氏线圈工作原理 根据法拉第感应定律和楞次定律,交变的电流产生交变的 ...

  4. 【2022研电赛】商业计划书赛道华南区二等奖:基于机器视觉的智能驾驶辅助系统

    本文为2022年第十七届中国研究生电子设计竞赛商业计划赛道华南赛区二等奖作品分享,参加极术社区的[有奖活动]分享2022研电赛作品扩大影响力,更有丰富电子礼品等你来领! 团队介绍 参赛单位:广西科技大 ...

  5. 2022年第十七届研电赛报名|安谋科技(Arm China)命题:基于特定开发平台的理性智能体设计

    "兆易创新杯"第十七届中国研究生电子设计竞赛(以下简称"研电赛")现已正式开赛,企业命题已在官网发布,现官网已启动报名啦~ 安谋科技作为研电赛多年的合作单位及& ...

  6. 2021研电赛获奖作品合集

    2021"兆易创新杯"第十六届研究生电子设计竞赛(以下简称"研电赛")已经结束,在比赛中出现了很多优秀作品,特作为整理 1.Arm命题:基于EAIDK-310的 ...

  7. 【2022研电赛】商业计划书赛道上海市一等奖:基于多目标排序预测控制的SL-qZSI光伏储能系统

    本文为2022年第十七届中国研究生电子设计竞赛商业计划赛道上海赛区一等奖作品兼全国三等奖分享,参加极术社区的[有奖活动]分享2022研电赛作品扩大影响力,更有丰富电子礼品等你来领! 团队介绍 参赛单位 ...

  8. matlab杜芬振子,研电赛2018准备记录

    研电赛2018准备记录 20180423 周一 首先是确定题目 经过晚上和秋哥的讨论,初步确定为,利用蒋师兄"盲解调"论文,提取其中的个别点,进行基于FPGA的设计实现.大致有三个 ...

  9. 第15届研电赛圆满落幕,RT-Thread企业专项奖花落谁家?

    第十五届中国研究生电子设计竞赛全国总决赛(简称"研电赛")暨颁奖典礼日前在南京信息工程大学圆满落幕.本届研电赛,共有402支队伍角逐进入总决赛,共有3支队伍夺得了RT-Thread ...

最新文章

  1. 基于Spring Boot Profile的日志记录示例样本
  2. 深度技术win11旗舰稳定版v2021.07
  3. 基于 FFMPEG 的音频编解码(三):音频编码
  4. JAVA线程1 - 基本概念
  5. 电够动力足——认识主板上的CPU供电模块
  6. Kubernetes Eviction Manager源码分析
  7. Python算法学习教程
  8. GitHub新手使用教学(从安装到使用)
  9. 【盘点】最受欢迎十大中国风歌曲
  10. Java 获取、删除Word文本框中的表格
  11. 如何让BERT拥有视觉感知能力?两种方式将视频信息注入BERT
  12. 笔记:Linux系统调用在文件中的分布情况
  13. Latex 表格内换行
  14. STM32中DMA、TCM(ITCM和DTCM)、CaChe的区别
  15. bupt信通院上机第一学期实验四(30-37) 指针
  16. 在苹果MAC OS X Lion系统上访问Windows共享文件夹
  17. 搞笑文章|如何瘫痪你的电脑
  18. RK3228H开发之准备、编译烧写整理
  19. 匡威react是什么意思_CONVERSE 的那些「老家伙」们,早晚都会回来的
  20. 秒变黑科技的高效电脑软件,请低调收藏!

热门文章

  1. [Excel]rank函数实现自动排序
  2. linux watch 查看文件,linux watch肿么退出
  3. (二)随处可见的LED广告屏是怎么工作的呢?代码实现
  4. SDRAM中数据掩码的作用(DQM)
  5. 基于51单片机的数字时钟(万年历)
  6. Filter 过滤器的使用
  7. 基于Node.js的3DTiles三维倾斜摄影模型爬虫
  8. (转)一位资深程序员大牛给予Java初学者的学习路线建议
  9. 算法分析与设计实验报告——实现汽车加油问题
  10. 看看乔帮主留下的世界