本博客使用的图像是188*120的大津法二值化图像。摄像头安装高度为25cm(离地),前瞻长度约1m。

前面已经讲过了十字的识别思路,现在来说一下三岔。

三岔的图像特征

在编写程序时,以下各行条件是层层递进进行判定的,一旦有一个条件判定不满足就退出此次判定。

三岔是三个120°V形拼在一起的构象,在几何上对称,所以出入三岔的识别基本一致,但是在斜对三岔时需要特殊处理,减少误判。

预识别条件:

  1. 图像中线上存在很长的黑色部分(三岔中间的黑色尖);
  2. (可选)赛道宽度上大下小的行数达到阈值(满足1且赛道宽度倒置,是三岔的特有现象);
  3. (可选)赛道边界横坐标变化趋势连续数行发生倒置(从上到下离中线越来越近,而不是越来越远)。

决定识别条件:

​ 三岔的三个120°V形拐点中,中间V拐点存在,左右V拐点至少存在一个。

示意图

(1)远端情况

以下示意图情况我称之为远端情况,左/右侧V拐点在图像中是可见的,这种情况使用最基本的远端条件,找拐点就可以轻松完成判定;

正入三岔示意图:

斜入三岔示意图:

这种情况多发生在即将出三岔、过急弯后入三岔时。入三岔时机的前后,也会导致图像有巨大的差异。

(2)近端情况

在过急弯后进入三岔,可能出现图像处理跟不上车速的情况,这时候进入三岔,视野内只会剩下中间V拐点,这种情况我称之为近端情况,这时候需要引入一个近端条件进行辅助判断:两条参考线的至少一侧均丢边


近端实拍:


三岔的各个状态

以下状态按照时间顺序排列,且在识别程序的状态切换过程中,进入下一个状态的前提是状态位已经置为上一个状态

  1. 尚未进入三岔:

    (1)远端条件:视野内存在三个(正入)V拐点或者两个(斜入)V拐点,但是中间V拐点一定存在;

    (2)近端条件:中线黑线足够长,中间V拐点存在,近端两条参考线的一侧均丢边;

    三岔标志位置位,三岔状态位置1,入三岔补线开始;

  2. 车头即将拐入三岔:此时视野下方会有很大的白色区域,此时选定的近端某行参考线,至少有一侧会发生丢线(视野内类似斜入三岔的情况),三岔状态位置2(此时编码器积分开始,在积分过程中锁定三岔判断,不进行识别,防止所有三岔状态转换在第一次认到三岔的几帧内直接就全部完成了,三岔标志异常清除);

  3. 车头已经进入三岔:选定的两行参考线两侧均不丢线(这时车头应该在进入三岔很短的那一小段直道内),三岔状态位置3,入三岔补线结束;

  4. 车在三岔内的直道行驶:正常循迹行驶,编码器照常积分;

  5. 车头进入即将出三岔的那个弯道:视野内会出现一侧的尖点,当编码器积分结束,重新使能三岔判定后,这个时候很容易发生误判导致提前清标志位,在这里我临时引入了近端参考线两侧均不发生丢边的条件进行限制,防止在这一段出现提前误判

  6. 车头即将遇到三岔出口,斜对三岔:视野内会出现中间V拐点和一侧V拐点(也可能出现两个V拐点,因为是斜对三岔的,图像也是斜的,此时状态V拐点不是很好认,识别滞后车很容易冲出去,我采用的解决方案是在上一个状态进入后临时减少中线黑线长度阈值,退出三岔时再把这个阈值加回去),此时重新认到三岔,三岔状态位置4,出三岔补线开始;

  7. 即将出三岔:视野内认不到左右侧V拐点了,三岔状态位置5;

  8. 出了三岔:两条参考线两侧均不丢线,清除三岔状态位和三岔标志位,出三岔补线结束。

具体的示例图片这里也不放了,需要注意的主要就是状态2、状态5和状态6,这三个状态下非常容易发生误判!由于今年省赛赛道的特殊性,我们选择的是车库出来向十字方向发车,在出了三岔之后斜对斑马线也很容易误判三岔(可以通过限制V拐点判定区域、引入参考线判定进行规避,也可以使用CD机制给每个元素的判断都加上CD),这些状态分组可能做的不是很好,使用的时候肯定是需要微调的!

识别程序编写思路

  1. 需要提前设置的一些阈值

    • 三岔中线黑线长检测行数,只有在图像上方的这些行内检测黑色部分长(防止与十字误判)
    • 三岔远/近端识别中线黑线长阈值,分别指定远端和近端进入三岔条件,远端进入的数值要比近端小,调整这个数值可以调节识别前瞻,低了容易误判高了识别较晚来不及打弯进入三岔,需要自行把握
    • 已在三岔中,二次判定三岔中线黑线长阈值减少值,用于帮助出三岔二次判断,但我最后没有使用
    • (可选)三岔赛道宽度倒置阈值,我最后并没有使用
    • (可选)三岔赛道宽度倒置改变阈值,我最后并没有使用
  2. 思路

    注意:三岔在使用全图进行判定的时候很容易在弯道、斑马线或是已经进入三岔、但是还没有出三岔的那个弯道内发生误判,所以这里对V拐点的判定需要截取一部分图像进行,以此限制V拐点在图像中的有效坐标,可降低误判率并方便补线。

(1)统计中线上黑色线段长度;

(2)(可选)判定赛道宽度上大下小行数是否达到阈值,赛道边界横坐标“上外下里”倒置行数是否达到阈值;

(3)V拐点的判定:

①左右侧V拐点的判定

左右侧V拐点判定相对简单,只需要从下至上判定边线的斜率是否发生突变即可。图像的坐标原点在左上角,正常直道情况下,左边线斜率为-1.5左右,右边线斜率为+1.5左右。而在三岔,边线发生了外拐的情况,这时候势必可以造成边线斜率的正负变化,通过每间隔10行取一个边线上的点计算该段斜率并存储至一个数组中,遍历这个数组即可轻易发现边线斜率是否存在突变。同时,可以限制对V拐点坐标的检出范围,以降低误判概率。

②中间V拐点的判定

中间V拐点的判定相对复杂,但其实和十字寻找L角点有相似之处。第一步,从全图的最下方开始,逐列、向上扫描黑白交界点,将扫描出来的黑白交界点纵坐标存入一个数组(这一步和十字基本一致)。第二步,根据扫描到的黑白交界点纵坐标数组,分析其中的数据特点,判定是否找到了中间V拐点。由已有的上黑白交界数组为基础,其中的数据大致会呈现“M”型分布(见下方的示意图),中间V拐点即为此M的中间点,寻找其需要分为两步:1.从左向右找到M型上的第一个尖点位置,即数组开始变大的点;2.找到M型上的第二个尖点位置即为所求V拐点坐标,即在数组变大后开始变小的点,这就是所求的中间V拐点。

补线程序编写思路

  1. 传统补线方式

    注意:补线需要直接补进边线数组

    传统补线方式,就是在识别到三岔后,且中间V拐点存在时(这是开始补线的必要条件,中间V拐点也是补线的起点),连接中间V拐点和左/右侧V拐点,或者是直接把中间V拐点与图像左/右下角直接拉死一条线(实测这么拉线也是可以的)。因为后者补线方法可以在视野内有无左右侧V拐点(分别对应即将进入三岔的远端和近端图像)的时候均可实现拉线,不需要再细分情况且误差可以接受,所以就采用了这种方法补线。这种方法在即将进入三岔,但是视野下方还没有完全变为黑色的时候会停止补线,因为车在即将转入三岔的时候,视野内的中间V拐点趋向性已经不是很明显了,V的右半边在图像中几乎是水平的,这时就无法补线了。

但是,传统补线方式有很大的缺陷:补线抖动比较严重,如果直接限制中间V拐点的坐标位置的话,就很容易导致该补线的时候不补线;从不补线到补线,计算出来的中线偏差值在一瞬间会发生较大的突变,在没有滤波的情况下很容易导致舵机打飞,加滤波的话又容易来不及打舵机而导致打不进三岔。

  1. 单边循线

适用条件:在图像中只有一侧边线是存在的,另一侧边线几乎不存在或者大量行是丢边的,就可以引入单边循线的方法进行循线。

实现方法:先在标准的直道上将车模居中摆放,摄像头正对直道前方,记录下此时摄像头视野内每行赛道的宽度(某行赛道宽度=右边线横坐标-左边线横坐标);记录完毕后,在需要使用单边循线的状态下,检测左右边线丢线行数,在丢线少的一侧边线每行横坐标分别加上之前测量的该行直道宽度,在丢线多的一侧的边线数组中把这个边线补出来,中线偏差计算程序根据这个拟合后的边界和已有的边界进行中线偏差计算,即可完成单边循迹。

优点:相比补线,单边循迹的抖动更小,不会像传统补线方式一样造成中线偏差值的突变。这种方法也可以适用于弯道的偏差修正。

缺点:单边循迹法存在系统误差,使用单边循迹的车模在三岔内的直道上行驶时,相比正常循迹抖动会大很多,这个需要仔细调整PID参数,可以有一定程度的缓解,但是由于单边循线固定的系统误差就摆在那里,所以跟直接双边循线比起来。理论上使用进出三岔单边循线+三岔内双边循线的方法的话会有所缓解,但是我实测可能因为没解决好误判的关系,使用这种方法比较容易导致两种循线方式不按规定情况切换,抖动更加严重了。

【第十七届智能车】智能车图像处理(4)-元素识别(三岔)相关推荐

  1. 第十七届全国大学生智能车竞赛智能视觉组总结

    文章目录 前言 一.本次比赛任务分工 二.OpenArt部分任务 1.地图识别 2.图像识别 1)模型训练 2)图像处理 3)通讯 总结 前言 我参加了第十七届全国大学生智能汽车竞赛智能视觉组的比赛. ...

  2. 第十七届全国大学智能车竞赛:第二波芯片申请向你袭来

    §01 STC单片机 致第十七届全国大学生智能汽车竞赛参赛师生:   第十七届 全国智能车大赛,STC很荣幸再次成为大赛赞助商之一,为了更好的服务于每一位参赛师生,STC现开放多个大赛服务通道,我们会 ...

  3. 第十七届全国大学生智能车竞赛智能视觉组培训第一弹

    简 介: 第十七届全国大学生智能车竞赛竞速比赛中,由NXP赞助的智能视觉组的比赛细则已经公布的.为了帮助同学们能够更好地制作比赛作品,在在此过程中得到更好地锻炼,NXP公司近期举行智能视觉组培训.欢迎 ...

  4. 第十七届全国大学智能车竞赛STC芯片申请方法

      致第十七届全国大学生智能汽车竞赛参赛师生: 第十七届 全国智能车大赛 ,STC很荣幸再次成为大赛赞助商之一,为了更好的服务于每一位参赛师生,STC现开放多个大赛服务通道,我们会有专人负责信息登记. ...

  5. 第十七届全国大学生智能车竞赛开始啦

      第十七 全国大学生智能车竞赛 经过两个多月的筹备,现在正式开始啦!   在这个过程中,竞赛组委会仔细总结了往届比赛中的经验与不足,特别是专门调研了刚刚过去的第十六届同学对于比赛的意见和建议.经过 ...

  6. 与太原工业学院商讨第十七届全国大学生智能车华北赛区承办事宜

    简 介: 确定第十七届全国大学生智能车竞赛华北赛区承办学校. 关键词: 智能车竞赛,华北赛区 §01 提议与商讨 一.公众号提议 卓大大,那个我们学校可以承办华北区赛吗?我们学校是太原工业学院.卓大大 ...

  7. 第十七届全国大学生智能车竞赛 华南赛区竞赛(线上)事宜通知

    第十七届全国大学生智能车竞赛 华南赛区竞赛(线上)事宜通知   为顺利完成第十七届全国大学生智能汽车竞赛华南赛区的组织和竞赛工作,按秘书处要求通知如下: 一.报名   参赛队伍在竞赛官方网站统一报名, ...

  8. 第十七届全国大学生智能车竞赛山东赛区比赛成绩

    §01 本科组成绩 一.电磁四轮 序号 组别 赛题类别 学校 队伍名称 成绩 1 本科组 四轮电磁组 山东大学(威海) 山魂九队 15.523 2 本科组 电磁四轮组 青岛工学院 壬寅虎一队 17.1 ...

  9. 第十七届全国大学生智能车竞赛全国总决赛参赛队伍

    根据 第十七届全国大学智能汽车竞赛全国总决赛名单 ,其中 268 支队伍参加 在8月20 - 22 日 在南京信息工程大学举办的线下总决赛,154 支队伍参加 线上总决赛 . 具体名单如下: §01 ...

  10. 第十七届全国大学生智能车竞赛线上比赛赛道设计

    简 介: 本文给出了第十七届全国大学生智能车竞赛线上比赛赛道部署草案.正式文档将会在竞赛网站进行公布. 关键词: 线上比赛,赛道设计,第十七届 #mermaid-svg-O2kO7tZ5dSyEz65 ...

最新文章

  1. 8GB变3GB Vista操作系统瘦身安装大法
  2. AM335x(TQ335x)学习笔记——使用dtb方式启动内核
  3. 谈论源码_5,000名开发人员谈论他们的薪水
  4. mysql 端口time_wait_linux上大量tcp端口处于TIME_WAIT的问题
  5. 杨振宁讲(经典)数学笑话兼论数学和物理的关系
  6. $dbms=mysql_Oracle dbms
  7. mdb文件取消隐藏_webshellphp隐藏技巧
  8. 一步一步做搜索(一)
  9. linux配置时间服务器(ntp)
  10. Python深度学习:常见优化算法
  11. 经纬度坐标转换成px_(转)经纬度坐标转换为屏幕坐标
  12. ai画面怎么调大小_Adobe Illustrator(Ai)里怎么改变图像大小,快捷键是什么?
  13. poj日记(3295)
  14. (16)全民小视频引流脚本模块化开发10-发送图片私信By飞云脚本学院
  15. 入门教程pythonpython完整教程视频
  16. idea配置有道翻译引擎
  17. matlab 文件操作 写入换行
  18. mysql分片做主从_使用mycat部署mysql集群(分片,读写分离,主从复制)
  19. 【STM32】一次F105 USB OTG驱动填坑记录
  20. HBase(5):HBase进阶

热门文章

  1. BUU Web[21-24]
  2. 【1】vue中的指令与插值表达式
  3. linux应用层之进程间通信学习笔记
  4. 看到一篇非常典雅的《Hotel California》的中文歌词
  5. 程序设计思维与实践 Week8 作业 B 猫猫向前冲
  6. python Numpy 的基础用法以及 matplotlib 基础图形绘制
  7. 河南为互联网贡献了25%的人才,但郑州互联网青黄不接
  8. 【程序】Marvell 88W8686 WiFi模块(WM-G-MR-09)创建或连接热点,并使用lwip2.0.2建立http服务器(20171030版)
  9. 在IDEA中使用preparestatement,使用setdate出错的问题
  10. 什么蓝牙耳机好?强烈推荐这5款蓝牙耳机品牌