这是我大学以来第一次接触到智能车比赛。同时由于我们学院也是第一次参加此项比赛,没有以往的车模和代码借鉴。我们作为学院智能车比赛的“开山鼻祖”,从头制作起来可谓是困难重重。好在学院老师对此次比赛格外重视,让我们完全没有资金上的顾虑。
我们组选择的是本届比赛新加入AI电磁组。此项组别是先通过电磁杆巡线收集赛道数据后,通过蓝牙传输到电脑上。然后将数据经过一系列处理,并用神经网络进行训练。最后将训练好的模型再重新烧录到小车中,从而使小车可以依据训练好的模型在赛道上运动。
相关信息可查看卓大大的博客:AI电磁车模
★此组别的难点在于:比赛规定前瞻传感器(电磁传感器)距离前轮中心不得超过5cm。在这种极限距离下,小车的运行速度将受到极大的限制。因为距离短意味着小车只能知晓距离其很近的赛道情况,当速度很快后,小车前轮控制方向的舵机将来不及反应,从而很容易冲出赛道。
在这种苛刻的条件下,便可以用到学习的模型:即一开始用较长的前瞻控制小车运动,收集后方短瞻的数据,用此数据训练出来的模型便可反映出长前瞻跑时的状态。当把长前瞻去掉后,小车便可通过训练的模型和当前短瞻的数据进行匹配,从而还原出长前瞻时的运行状态。从而实现此条件下,小车的高速行驶。
(1).电磁巡线设计
由于是第一届参加,没有往届代码的参考。我们想要实现AI电磁,首先便是要制作出一辆可以用前瞻正常跑起来的车。从头编写代码着实痛苦,需要对各种模块进行调试,并通过网络上别人的经验,参看许多往届的技术报告和论文,学习并尝试各种算法(例如电感值的处理方法、电机PID速度控制和舵机模糊PID转向控制等)。
最终,通过两周的努力,终于实现了小车的正常运动。其中在解决直道抖动的问题上耗时最长(最终通过加入模糊PID控制舵机才得以解决)。
(2).模型训练
其次便是小车的数据采集和训练。据了解,大部分参赛队伍都是采用逐飞科技的训练程序(毕竟自己写神经网络对本科生而言难度有点大)。依据逐飞的教程,将收集好数据一步步处理,经过一段时间的训练,即可得到一个模型,烧录进单片机中即可进行测试。
但是,在这个步骤上便会出现很大的问题。经过多次尝试,我们的小车始终只能朝一个方向转弯,同时极其容易冲出赛道。每收集训练一次就要耗费三四个小时的时间,这种重复性的工作以及不确定性的结果十分打击我们的信心。我们一度想用短瞻PID进行比赛。
最终,在与机电学院的交流中,我们发现了问题所在:电磁线的信号发生器有问题,导致左右两侧的磁场差异较大(更换成比赛指定的龙邱信号发生器)以及数据集采集的方式上需要改进(1.数据量无需太大;2.数据集包含的情况要多)。改进后的效果较为理想。
(3).电感值波动明显
通过将电感值发送到上位机并用波形显示,可以明显发现,后侧的两个电磁传感器受到的干扰很大,几乎无法使用。原本以为是电机转动时的磁场干扰,我们给电机包上锡纸,安装上电容进行电磁屏蔽,发现几乎没有任何改善。最终无意中发现,是由于电池和电源线在电机运转时,通过的电流较大,并且距离电感较近,从而产生的电磁干扰。最终我们对电池和电源线的位置进行了更改(尽可能远离电感),才得以解决这个问题。
1.在小车的制作过程中,我们花费了不少时间在调试短瞻PID(因为当时训练效果很差,无法正常运行一圈)。采用外侧两个电感水平,内侧两个电感内八的排布。通过调试,发现小车也能达到很好的运行效果,不过对摩擦力和环境的要求更为严格,需要反复调节参数。
2.当时通过查找资料,尝试了各种提升车模硬件性能的方法:涂轮胎软化剂、上润滑油、轮胎用硅胶封边等。实际使用中,的确有一定的提升,但并不显著。
3.随着小车跑动次数的增加,车模的机械结构也会发生变化,需要及时进行检查和修正。例如:由于不断过弯,车模前轮会逐渐便为“内八”,后轮可能会左右松动。
4.调试车模的过程中最好添加上出赛道立即停转的程序或者在车模后方绑一条绳子牵着,以免车速过快撞坏电磁杆。
1.在华东赛区比赛中,裁判居然在上场后告知,比赛规则更改小车需在停车线后1米内停车(原先规则为3米),否则加时1秒。这让我们措手不及,因为我们并未添加急停,很容易便超过1米。尽管最后临时添加上了短暂倒转实现急停,但由于没有经过测试,导致程序有bug,小车倒转后居然无法停止。没有办法,只能每次加1秒了。
2.赛场的赛道比我们实验室赛道的摩擦力大,但是电磁线似乎有一些区别。小车放上去后,电感读数很大,只能通过降低信号发生器的电流,勉强达到所需的读数。
在车模调试的过程中,偶尔会出现车模始终无法转弯的情况(PID控制模式下),但是不久又会莫名其妙地恢复正常。这个问题出现过两三次,但一直没有找到问题的原因。初步推测是电池或者主板到电机驱动板的两段电源线造成的。