首页 理论教育 智能汽车设计与实践基础:赛道特殊元素处理

智能汽车设计与实践基础:赛道特殊元素处理

时间:2023-09-21 理论教育 版权反馈
【摘要】:赛道十字路口的识别思想是找到十字路口的“拐点”,也就是十字的转折点。图6.32摄像头提取的十字路口图像当车模车头到达十字路口后,两个下拐点已经完全看不见了,此时车模没有经过十字,车头前的边线丢失情况仍然十分严重。在车模行驶距离超过某个阈值时,拐点消失,即可清除十字标志,退出十字处理。

智能汽车设计与实践基础:赛道特殊元素处理

对于边界完整的赛道元素(如直道等),无须特殊处理,只要通过其左右边界值之和除以2即可得到其行进轨迹,即赛道中心线,车模就能稳定地行驶。但是对于急弯、十字、横断、断路和环岛这些元素,若不作特殊处理,车模难以完成行驶目标。

(1)弯道

弯道识别分大弯与小弯。小弯道识别的基本思想是,顶点比短直道稍微大,一般大于37行,单侧丢失边界点偏大,以左小弯道为例,左边界丢失边界行要比右边界丢失边界行要大,通常要满足左边界丢失边界行后五行之内右边界依旧存在,且左边界丢失行对于前几行,左右边界值跳变明显变大,赛道宽度也比直道上测出来的对应行的赛道宽度要窄得多,图像如图6.27所示。

图6.27 摄像头提取的左小弯道图像

对于小弯道,其车头前边界还比较完整,按照正常的左右边界取中值即可,但到后面有一侧边界先丢失,在边界丢失的情况下,该行边界值为默认值,即如该行左边界丢失,即该行左边界值为0,如果该行是右边界丢失,那么该行右边界值为159。如果按照左右边界值之和除以2的话,该中线会因为另一半边界为固定值的影响,其变化趋势不贴合赛道。因此可以考虑以存在边界作为参考,当作中线的延伸。以小左弯道为例,其左边界假设在第60行处丢失边界,那么第61—119行的中线为左右边界值除以2,而在第0—60行的中线值可以用如下公式得到:当前行中线值=上一行中线值-(当前行右边界值-上一行右边界值),其处理后图像如图6.28所示。

图6.28 小弯道中线轨迹图

对于大弯道,其识别思想便是在识别到小弯道,即小弯道标志位为1的基础上再进行判断。判断依据为顶点行靠前,一般要大于某个阈值行(根据摄像头安装高度与角度设定),一侧边界点在非常靠近车头时就开始丢失,甚至看不到,这种情况一般只有在大弯道或者车子极其偏离中心赛道时才存在,其摄像头图像如图6.29所示。

图6.29 摄像头提取的右大弯道图像

大弯道对应的情况是一侧边线几乎从靠近车头开始就逐渐丢失边界了,所以有一半边界是不可用的,对于这种情况,只能使用存在边界较多的那一侧。直接以一侧边界平移赛道半宽,同时给中线值限幅,不得大于159。一般情况下,处于大弯道时小车舵机打角都到了极限值,其处理后的图像如图6.30所示。

图6.30 大弯道中线轨迹图

图6.31 赛道十字处理流程

(2)十字路口

赛道十字路口的处理流程如图6.31所示,其基本流程主要包含识别和处理。赛道十字路口的识别思想是找到十字路口的“拐点”,也就是十字的转折点。将靠近车头的左右两个拐点称为下拐点,远离车头的两个拐点称为上拐点。在实际的十字路口识别过程中,只需要找到下拐点即可。两个下拐点的特征也很明显,以左下拐点为例,左拐点往前的左边界值随着行数变大,边界值逐渐变小。而左拐点往后的几行,左边界会丢失或者左边界值大幅度变小,其类似一个直角斜坡。当同时找到左右两个下拐点时,此处就是十字路口了,如图6.32所示。

有时候车模并不能正好处于赛道中间,导致其只能看到其中的一个拐点,因此一个拐点也要能单独用于判断十字路口,但是根据单拐点判断十字路口往往容易引起误判,还需要加一些限制条件,如当只识别到左拐点时,说明车头比较偏向左边,导致看不到右拐点,那么右边界应该存在一定行数的丢失边界,且左拐点所处的列应该不会低于30列(根据车模结构设定)。这些条件主要用于避免左大弯和障碍带来的误判。

对于十字路口,比赛规则要求直线通过路口,不能左拐或者右拐。但是由于十字路口存在大量边界的丢失,如果单纯以左右边界值之和得出中线,车模在经过十字路口的时候,车模冲出边界的概率很大。考虑到车模要直线通过路口,因此可以采取补线的方式,即在拐点之后,将丢失的左右边界补齐。由于十字路口前一小段赛道都是直的,可以在十字路口下拐点前的直线上取相隔8行的两点,求出斜率,然后从拐点开始,以点斜式的方法求得拐点后的新边界(“点”指拐点边界值,“斜”指求得的斜率)。如果车头没偏,正常情况下两个下拐点均能被识别到,将左右拐点后的边界补齐,再利用新的左右边界值求出中线,其处理后图像如图6.33(a)所示。在行驶到十字路口前车头偏向一侧导致只能识别到一个下拐点的情况下,按照上述的补线方法补齐有拐点的那一侧边界,然后通过该赛道边界平移赛道半宽的方式求得赛道中线,其处理图像如图6.33(b)所示。这里的赛道半宽是提前测出的一个数组,需要先将小车放在长直道中心位置,测出每一行的左右边界值之差再除以2,最后记录到数组中。

图6.32 摄像头提取的十字路口图像

当车模车头到达十字路口后,两个下拐点已经完全看不见了,此时车模没有经过十字,车头前的边线丢失情况仍然十分严重。在这种情况下,可以考虑找到车头前左右边界完整的几行,分别求这几行左右边界值的平均值。对于车头前丢失的边界,全部按照求出的平均边界值补齐,然后再求其中线,其处理图像如图6.34所示。在车模行驶距离超过某个阈值时,拐点消失,即可清除十字标志,退出十字处理。

图6.33 十字路口处理

图6.34 车头到达路口时的十字补线图

(3)起跑线

起跑线的识别思想是在左右边界均存在的情况下,某几行左赛道宽度(左右边界值之差)对比前一行会突然变小,并且比正常直道测出来的赛道宽度要小很多(可以提前在一条直道上测出每一行的赛道宽度并存于一个数组里)。起跑线通常由8~9条10 cm长的黑胶带组成,中间有一定的间隙,因此在这几行里面会有很多个相邻点为黑点到白点或者白点到黑点的跳变点。满足以上条件,就是起跑线了,采集图像如图6.35所示。比赛过程中,无论预赛还是决赛,都有相当长一段距离才能到达起跑线,因此没有必要一直识别起跑线,可以设置车模行驶一定距离后再对起跑线进行识别,这样既减少误判也减少程序的运算量。当识别完起跑线后,由于起跑线对中线计算的干扰,要对图像重新进行中线偏差的计算:采用起跑线后的赛道进行中线计算,而后利用重新提取的中线进行偏差计算。

图6.35 摄像头提取的起跑线图像

图6.36 环岛处理流程图

(4)环岛

环岛是第十三届竞赛才出现的新元素,其处理方法相对其他元素来说难度较大。比赛的要求是小车遇到环岛必须要进环绕行一圈才能出来,如果没进环,那么就要加罚30 s,而在正常情况下,如果没有识别到环岛,通常是难以取得好成绩的。

环岛的处理流程如图6.36所示,首先是识别,环岛的识别是在到达出环口之前进行的,以左环岛为例,其左边界值发生很大的突变,若干行的左边界值突然变小,甚至丢失左边界,其对应的赛道宽度也有明显的突变,左边界的突变点存在与十字路口的拐点十分相似的特征,但与十字路口不同的是,这里的右边界不存在边界突变或者丢失边界的情况,而是一条直道,因此即可进行环岛识别,识别图像如图6.37所示。

图6.37 摄像头提取的左环岛图像及识别图示

在对环岛进行处理的过程中,不仅要用图像信息,还要借助编码器信息来判断。利用编码计算距离,辅助识别环,避免误判。以左环岛为例,在识别到环岛之后,环岛标志位置1,同时不再识别其余的赛道元素,因为环岛里面不存在其他的赛道元素。在进环之前,应让小车保持直线行驶,但是左边边界的不规则变化,会使中线也发生不规则变化,车模行驶过程中不免会发生抖动。为了避免这种情况的出现,直接以右边界值减去赛道半宽取中线,开始入环前循线,如图6.38所示。

图6.38 识别到环岛时的中线轨迹图

车模行驶过程中在不同位置要检测不同的图像特征,为了降低误判和减少程序的运算量,采用分步检测的方法。设置一个步骤标志位,当车模沿直线行驶时到出环口时,车头的前几十行左边界都存在丢线的情况,如图6.39所示。这时候可以设定这个步骤标志位为1,在步骤标志为1的情况下,开始计算距离,当距离大于阈值时,说明车模已经行驶过出环口,这时可以开始进行下一步检测。

图6.39 车头到达到环岛出口时的中线轨迹图

当车模行驶过出环口之后,最明显的变化便是车头的前几十行不再丢失边界,而是出现环岛中间圆的一半弧线,这时候车模要准备进环了。小车不再以右边界值减去赛道半宽的形式取中线,而是以左边界值加上赛道半宽的形式取中线,如图6.40所示。当然这里的左边界还要稍作处理,因为正常循线方式会寻找到进环口一个类似拐点后的左边界,出现这种情况,会使进环口后的左边界值从零跳变到很大的值,中线也会随之发生跳变,这种情况可能会引起车模不能正常入环,如图6.41所示。因此,对于丢失边界的那一行后的左边界值,全部默认为零,这样得出的中线便是一条向环内拐的曲线。此时令步骤标志位为2,开始入环循线处理。

图6.40 车头到达到环岛底部时的中线轨迹图

(www.xing528.com)

图6.41 车头到达到环岛底部时的中线轨迹图

车模进环时,车头逐渐偏向环内,这时候车头右边界会开始丢失,大约前40行即79~119行的右边界全部丢失,如图6.42所示。此时令步骤标志位为3,其取中线方式与步骤2一样,同时清空之前的距离计数,重新累计距离,当距离大于45 cm后,小车应该已经进入环岛,为避免小车出现打滑等情况导致计距不准,可以再次检测车头的右边界,判读是否还存在着大量丢失边界,在满足距离阈值和图像边界的条件下,可以判断小车已经进入环岛。此时令步骤标志位为4,清空当前累计距离,重新计算距离。

图6.42 小车进环时的中线轨迹图

车模进入环岛内部,开始环内循线处理。内部的图像处理方法与弯道处理方法一致,唯一不同的是对中线加上了限制,即要求当前行的中线值只能小于或等于上一行的中线值,如果当前行中线值大于上一行中线值,那么便把当前行中线值改为上一行中线值减去1。该限制的原因是正常的左环弯道弧度是向左弯曲的,因此期望得到的中线向左弯曲,即中线值逐渐减少。但是由于出环口处类似T形的独特构造,得到的左边界可能并不符合期望值。所以要加上中线的限制条件,否则车模在出环口往后的中线会向右边拐,如图6.43所示。加上中线限制之后,能避免由于循线出错使小车往反方向出环的情况,如图6.44所示。同时,由于比赛规则规定了最小环的半径为50 cm,所以从入环口到出环口最少也有近2 m的距离,车模进环之后,也就是环岛的步骤标志位为4时,按照正常的弯道行驶,在累计距离没有达到1 m的情况下,不用识别环岛出口。

中线值限制代码:

图6.43 未加中线限制的小车中线轨迹示意图

图6.44 加上中线限制条件的中线轨迹图

在步骤标志位为4同时累计距离达到1m时,开始检测出环口。出环口的判断特征是右边界(以左环为例)存在类似十字拐点的尖点,在尖点前所有行的右边界值都比尖点所在行的右边界值大,但尖点行后若干行,其右边界值会变大。在寻找出环口这个尖点标志时,只在前70行里面寻找,即49~119行。这样做的原因是前70行内的图像畸变小,不容易发生误判。当在前70行内识别到环岛的尖点时,可以判断车模到达了出环口附近。有时候车模在到达出环口附近时,车头过于偏向内侧,导致看不到出环口的尖点。但是,车模靠近出环口时,车头前几十行的右边界会大量丢失,可以以此作为判断条件,当车模车头前50行即69~119行中,如果有超过30行右边界丢失,那么也可以判断小车到达了出环口附近。此时令步骤标志位为5,清空累计距离。同时,以左边界值加上赛道半宽的形式取中线,同时加上中线限制,务必保证中线不往右拐,如图6.45所示。

图6.45 小车接近出环口时中线轨迹示意图

当环岛步骤标志位为5时,开始检测车头前30行右边界,如果车头前30行右边界全部丢失,如图6.46所示,这时候小车车头基本驶出出环口,但车头还未摆正。此时令环岛标志位为6,清空累计距离,重新开始计算距离。

图6.46 小车驶出出环口时中线轨迹示意图

当环岛步骤标志位为6,同时累计距离达到20 cm时,即通过距离直接判断小车已经行驶出了环岛出环口。此时令环岛步骤标志位为7,继续累计距离。这时,改为以右边界值减去赛道半宽的形式取中线,如图6.47所示。

图6.47 小车驶出出环口时中线轨迹示意图

当环岛步骤标志位为7,同时累计距离达到70 cm时,开始检测左右边界,如果车头前40行的左边界全部丢失,而右边界完整,如图6.48所示,那么此时可以判断小车再次到达进环口。此时令步骤标志位为8,此时,车模仍以右边界值减去赛道半宽的形式取中线。

图6.48 小车再次到达进环口时中线轨迹示意图

在环岛步骤标志位为8情况下,当检测到15~40行的左边界丢失,那么认为车模已驶出环岛如图6.49所示,即将所有环岛有关的标志位清除。如果在环岛步骤标志位为8,同时累计距离超过50 cm的情况下,不用进行任何图像识别,直接将所有环岛有关标志位清除。

图6.49 小车驶出环岛时中线轨迹示意图

环岛元素处理按步骤分步完成,在不同的步骤识别不同的图像特征,不用时刻去识别当前不需要识别的特征。如车模还没进环,那么就不必去识别出环口。车模在不同的位置会有一些较为明显的图像特征,通过这些图像特征,确定车模的位置,然后针对车模不同的位置分别做有针对性的中线规划,中间加入距离信息来辅助识别。经过实践检验,可以减少误判,同时也减少程序的运算量。

(5)横断与断路

断路与横断元素是第十四届比赛中新增加的元素类型,横断元素是在赛道上设置长宽高为45 cm×20 cm×20 cm的障碍,不同于往届竞赛只在赛道内一边设置的小型障碍物,其完全占领了赛道,车模只能够绕行。断路元素则是用与场地背景颜色相同的布对赛道的某一段进行遮盖,只留下铺设的电磁线。对于赛道元素断路与横断的识别与处理,由于使用的图像为二值化图像,两者在直道上所传回的图像相似度极高,所以在处理两种元素时采用共同处理。识别思路为,对于直道的横断或者断路,在顶点行前(即赛道消失前5行)中线的偏差较小,其左右边界同时存在较大突变,突变行之间相差不大,并且顶点行上几行黑点增多,同时满足上述条件时,则可进行直道断路还是横断判断。横断是障碍物,因此用测距模块对前方物体进行距离测量,如果距离小于1 m,则可以判定为横断,否则为断路,如图6.50所示。

图6.50 直道横断与断路图

横断识别完后,只能采用绕行的方式,因赛道外没有参考物,车模在绕行回赛道的过程中舵机的控制只能采用开环控制,利用编码器记录距离利用陀螺仪记录角度,可以实现车模拐出赛道与返回赛道时刻的确定。利用三段控制,车模拐出赛道一定角度后直行,行驶一段距离后再转向与赛道平行,再次记录一定距离后转回赛道,其中距离与角度根据平时调试情况可预先确定。

横断的程序处理流程如图6.51所示。

图6.51 横断处理流程图

断路出现的位置没有限定,除了直道接断路外还存在弯道内接断路情况,二值化图像如图6.52所示。对于弯道接断路,其特征相对比较明显,一是在图像中层范围顶点行以下存在明显的赛道宽度变化,变化趋势比正常赛道明显且同时能够搜寻到左右两边界;二是顶点行附近存在极小的赛道宽度并且两边界同时存在,这是其他位置不存在的;三是一个边界内存在边界斜率反向变化。利用上述特征来判断断路。断路识别后,相应的处理流程如图6.53所示。断路内不存在赛道,只有电磁引导线,因此在赛道进入断路前由摄像头循线切换为电磁循线方式,且对于弯道接断路的中线要进行弯道补线处理,防止切换前因赛道缺失对中线偏差计算产生影响。同时,由于赛道与断路采用不同材质的材料,所以采用灰度传感器来检测赛道与断路。在识别断路后,单片机采集灰度传感器的值,当值特别小时,可以判定处于断路内;当值较大时,则说明车模处于赛道中。根据这一特征,可以判断车模是在赛道内行驶还是在断路元素内行驶。断路的程序处理流程如图6.53所示。

图6.52 摄像头采集的弯道断路图

图6.53 断路处理流程图

(6)坡道

对于摄像头四轮车模而言,最主要的信息来源是摄像头采集的赛道图像,而赛道坡道由于具有一定高度,当车模驶上坡道时,摄像头被抬高,视野更广,能够看见的赛道更远。如果不对坡道作处理,当下坡是弯道而不是直道时,单片机所求的赛道偏差会变大,使车模在坡道上转弯,从而驶出赛道。因此坡道也需要进行识别并作相应的处理。根据标准赛道,车模处理坡道的流程如图6.54所示。

图6.54 坡道处理流程图

根据坡道处理流程图可知,坡道的处理主要分为三步,首先是对坡道进行识别,通过计算图像中赛道的宽度明显变宽作为初始条件。当满足条件时,由于坡道具有一定角度,放置在车模上的陀螺仪Z轴角度会明显增大,而其他赛道元素基本不会有这种变化。当判断为坡道时,由于摄像头角度改变,无法看见坡道后的赛道,为了防止舵机摆动不正常,将作为偏差计算标准的前瞻行向车头拉近,同时对赛道中线作限制,保证不发生跳变,开始进行上坡循线。当陀螺仪角度开始减小时,表明车模到达了坡顶,这时为了防止摄像头因高度变化对远处的赛道中线作偏差计算,将上坡的偏差和前瞻行拉近的偏差进行加权计算的结果作为坡上循线的偏差,开始坡顶循线。由于车模下坡的图像不会出现偏差而发生较大改变,只需保证下坡速度不会冲出赛道就可以做到正常下坡,上坡后通过一定的距离阈值后即可清除坡道标准,恢复正常循线。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈