晚上闲来无事,便仔细阅读了上交大的开源代码讲解,在其中一篇文章中得到了一个很好的元素处理方法,思来想去觉得算法可行性应该可以,便记录下来。

在开源讲解的第四篇中,他们提出了单独左(右)边线进行跟踪从而得出中线的方式。觉得该方法可以使用在一些特殊的元素中。下面给出我自己的一些想法,思路或许不完整,如有错误,希望各位能够指出。

我们对赛道进行普通的巡线时,先是往左扫线,得出左边赛道的边界,后对右边界扫线,得出有边界,通常这两步我们都封装在一个函数中,并紧接其后对它得出赛道的中线和宽度。

基于文章提出的思想,我们可以将这一步拆解成三个函数:左边界扫线,右边界扫线,得出赛道中线及宽度。

我们把车放在长直道中,记录车身在直道上的赛道宽度并记录下来。以此赛道宽度为例,我们通过扫到的左边界加上直道赛道宽度的一半,其实也就是我们中线所在的位置。同理,右边界也是同样的道理。

以此我们提出基于双边线的中线方式,处理一些特殊的元素,以16届的三岔为例,当我们判断出三岔时,切换至左边界得中线方式,三岔左边界相对于直道而言,一定是往左偏的,那么此时得到的中线偏差也一定是左偏,舵机或车轮也就会往左打脚。同理,出三岔时也一样,出三岔后关闭左边界得中线,转换为普通巡线得中线。

在圆环部分,以左圆环为例,首先我们可以判断左拐点得到车身即将进入圆环,此时切换为右边界得中线,再车身进入圆环中间,此时摄像头采集的靠近车体的部分几行不会出现丢线的情况,至标志位,此时切换为左边界得中线,车便可向左打脚进入圆环。出环时也一样,通过切换左右边界得出中线来完成遇到特殊元素时的路径规划。

用此想法,或许在后续路径优化上,可以缩短过弯过环的路线以减少比赛时间。

该方式如果采用八邻域的边线跟踪算法,或许能够有更好的效果,出库入库时,便可根据一边扫到的边界来实现。通过双边得中线的方法前,可以对图像进行逆透视处理以边更好的处理元素。本想法仅是我晚上一时兴起时想到,或许有不足,希望有大佬指正