第十八届全国大学生智能车竞赛已经落下帷幕,作为今年完全模型的参赛选手,我将对我们队Edgeboard中的代码进行浅析并开源,希望对以后的参赛选手有所帮助。
一、基础循迹
智能车基础组别大多需要在特定赛道上完成循迹任务。我们队采用的循迹方式是“上交迷宫法”。因为图方便省事并未对其进行大量修改,详细可看知乎文章https://zhuanlan.zhihu.com/p/391252945
二、AI任务
本届完全模型组场地为智慧农业场景,模拟智能车辆在收货季节的运行和作业,车辆不但需要自主驶过常规道路,还要驶入特殊区域,如车辆维护区、农田区、动物出没区、坡道、粮仓区。农业场景下智能车辆会出现穿过农田区、驶过动物出没区、经过上下坡道等动作。农用车辆处于长时间高负荷工作状态,需要频繁的进行维护和保养,通过车辆维护区时要求车辆停入指定区域,并有片刻的停车动作,完成车辆维护过程。满载丰收粮食的智能车辆需驶入粮仓,根据入口处的指示,到达粮仓内部,并从指定的出口驶出。
1.车辆维护区
车辆完成维护过程,如图所示,车辆维护区具有车辆维护标志的一侧设置有锥桶摆放成的停车区域,车辆识别识别路旁的实体标志,完全驶入锥桶区域且停车片刻后启动。不停车罚时15秒,未完全停在区域内罚时10秒。
对于该元素我们的处理方式比较简单粗暴,即看见红色拖拉机后,进行锥桶检测,得出离黑色边线距离最近的左右两个锥桶的坐标,再取图像中两个点的坐标,用这几个点拟合成线,即车辆所循中线,即平常所说的补线操作。车模移动一定距离后,目标速度设定为0,停车。然后反向倒车找到边线后开始进行基础循迹(详细可看代码)
2.农田区
车辆通过农田非铺装道路,如图所示,农田赛道上缺失一段常规道路,锥桶外侧为农田,不可驶入。车辆识别农田实体标志,驶入农田区,依据锥桶的指示驶出农田区,重新回到常规道路上行驶。农田区布置在直路上或者小于90度弯角道路,锥桶围成的道路宽度45cm±10cm。
对于农田区的处理,我们采用的是单边巡线,即只看左侧或只看右侧的锥桶并拟合成线,拟合的方式采用的是贝塞尔曲线拟合。 由于左方和右方的锥桶可能会不好区分会需要添加一些限制条件(区分方式具体可看代码)。
3.动物出没区
车辆通过动物出没路段,区域内设置减速带,需要减速慢行,需要减速慢行以减小颠簸对于车身姿态和传感器的影响。如图所示,车辆识别减速带前路旁的动物出没实体标志,自主判断形势策略。
处理该区域我们采用的方式是固定舵机打角即设置固定偏差,不过该方法存在一定的问题(可能车身不正固定偏差后会冲出赛道)还有一种方法就是不进行任何识别,,单纯地进行扫线,提取到赛道边界后正常循迹。
4.坡道
场地中设置有坡道,需要谨慎行驶,如图所示,坡道前路旁摆放实体坡道标志,车辆识别标志便于提前预知坡道,从而自主判断形势策略。
该元素较为简单,识别到坡道标志后进行加减速控制即可
5.粮仓区
赛道中设置有粮仓区域,粮仓区域由黄色的锥桶围成,分为1个入口和2个出口。2个出口距入口更近的为1号出口,远的为2号出口。粮仓区入口处前路旁的实体粮仓标志数量代表出口号,1个粮仓标志则从1号出口驶出,2个粮仓标志则从2号出口驶出即可。在车模出发后,由现场裁判员随机确定粮仓标志的数量,车模运行两圈,两圈的数量不相同,第一圈当车模离开粮仓区之后,再由裁判员将调整粮仓标志数量。粮仓区元素仅在全国赛上使用。
我们将粮仓区分为几个状态进行处理,入粮仓,粮仓区中,出粮仓等。由于未能进入国赛,后面也没有继续调试粮仓区了。上位机代码会开源(包含粮仓区)注意:开源代码可能有些许bug,仅供参考,也欢迎与我交流,QQ:2270895083
以下是为数不多的调试视频
开源代码链接如下