尊敬的卓老师:新年好!
此次来信主要汇报春节前由逐飞进行二次验证的“电磁AI组”的一些情况,但因为春节放假再加上新冠肺炎疫情影响,一直拖到今天才整理这部分工作。目前我们也还没法正式复工,办公所在园区建议我们延迟复工,小区实行封闭式管理,为了配合好严防严控,我们也选择在家办公。
这几天从卓老师公众号上得知卓老师还在协调、商讨、筹备第十五届比赛的相关事宜,谁都不能保证和自己接触的人是否携带病毒,望卓老师一定注意防护,健康最重要。
其实早在19年12月5号卓老师就发布了一篇关于电磁AI组的推文。的确,这个方向的尝试我们从19年9月份回到成都后就在配合NXP工程师做相关的平台搭建和测评工作。结合我们对小车特性、小车控制的一些积累和NXP工程师团队在AI领域的丰富开发经验完成了第一阶段的尝试,并且由NXP宋工、张工将初期成果展示给了卓老师。
随后卓老师发布了一篇关于电磁AI组的推文,也是引起了热烈的讨论,其实最终都汇聚成一个质疑和一个期待:
随后NXP梁平老师整理了一篇推文,比较详尽的叙述了关于智能车AI算法的的一些讨论。文中也对之前的诸多疑问进行了回复,并提供了一些解决方向。
我们也相信这个新的方向会给学生带来不同体验,所以在这之后我们在之前提供给NXP工程师的硬件平台的基础上新做了一版硬件整合,也是希望换一个硬件平台,换一个环境来验证这个方向是否可行,主控及扩展板如下图:
主控板即扩展板
本次我们只采用RT1064一块主控,以此为控制中心设计了扩展板。得益于这块主控的资源丰富,我们在一块扩展板上就实现了编写程序让小车自主寻迹运行进行数据采集,将采集到的数据送入网络训练,得出模型,然后将模型加载到同一块RT1064主控中,实现对模型车舵机的控制,本次测试的具体情况如下:
本次测试车模使用新C车模加3010舵机,同时因为AI模型的加入,导致整个程序大小将近1MB左右。一般的M4单片机容量都不是太大,如果自己后期再加入一些其他复杂的程序,代码会更大,所以我们选用了NXP的跨界MCU RT1064来运算AI程序以及车模控制相关的程序,它具有600M的主频,内置4MB的flash,内置1M RAM,使用起来不会那么局限。
所用到的资源及用途列举如下:
16路AD:3-5路用于前期寻迹,模拟真实在赛道上运行的状态,便于车身周围电感采集数据,其余AD预留定位车身位置用,本次测试依旧只用了7组数据采集;
1个QTIMER:用于采集两个迷你编码器的数据;
1个LPSPI:用于驱动IPS液晶屏;
1个串口:用于将采集的数据通过无线模块发送给PC;
4路PWM:用于控制两个电机;
1路PWM;用于控制舵机;
其他外围硬件:运放采用OPA4377;编码器采用逐飞迷你编码器;液晶采用逐飞1.14寸液晶屏;无线模块采用逐飞无线透传模块;电感采用普通的 6 × 8 6 \times 8 6×8工字电感,用于数据采集的一共有7路电感,电感分布如下图:
车模上的电感布局
(1)使用传统的控制方法将车模跑起来,这样可以采集车模在正常运行时的数据。
(2)使用传统的控制方法+随机干扰控制,其中随机引入误差控制方向时的数据不采集,仅仅在正常的控制时采集数据,这样可以采集到车模在偏离赛道的时纠正的数据。
(3)将车模固定在一块很薄的硬纸板上,手动转动硬纸板,以获得更多姿态下的数据,为了保证手动摆动过程中车模的高度不变,我们选择了一个很薄的光滑的底板将车模固定在上面,然后移动底板来采集不同姿态下的数据,如下图所示:
采集数据的方式
在测试时发现距离舵机较近的电感容易受到干扰,数据毛刺较多。下图是车模使用传统方式寻迹,然后采集的电感3数据,再使用excel对电感数据绘制的波形图,数据图形如下图所示:
电感3的采集数据
然而同样的条件下,采集到的电感7的数据就稳定很多,如下图所示:
电感7的采集数据
从上面两张图对比可以看出来,距离舵机近的电感干扰较大。远离舵机的电感7几乎没有什么干扰,波形也很平滑。因此可以将电感的布局改变一下,将电感放置在距离舵机较远一点的位置,这样可以大大的降低干扰。
我们尝试过使用精准配对的电感电容对,也会受到很强烈的干扰,这有可能是舵机本身就会产生一个接近20K的噪声。
在不改变电感布局的情况下,为了提高数据的可靠性,我们尝试了对电感3的数据进行滤波(从之前的波形图可以看出,干扰数据大多都是属于跳变的,因此本次滤波方法为,如果采集到的电感值如果相较于上次变化过大则舍弃,以滤除干扰数据),相较于没有滤波的状态数据确实要好了许多。不过最好的办法还是将电感移动到距离舵机较远的位置这样更加真实的反应数据。滤波之后的波形如下:
滤波后的采集数据
在新的硬件平台,新的车模,新的环境下,从头采集数据,将上诉3种方法采集的数据都送入网络训练模型,再将模型加载到主控MCU,最终仍然能完成沿着赛道运行的任务。
当然也不是一次成功,期间遇到了不少问题,而且这个工作的难点在于不能直观的定位出问题出在哪,解决起来也很麻烦,下面我附上这个过程的关键视频链接:
视频链接:https://www.bilibili.com/video/av88728313
通过前瞻电感寻迹进行数据采集
无视频,当时忘了录这两个部分的视频
视频链接:https://www.bilibili.com/video/av88729345
第一次通过训练但跑出了赛道
视频链接:https://www.bilibili.com/video/av88729955
重新训练后第一次完成 一圈运行
视频链接:https://www.bilibili.com/video/av88730528
最后去掉前瞻 AI运行的情形
关于AI引入的讨论,卓老师,梁老师都在公众号上发过相关推文和讨论,广大的参赛者都有自己的看法。但用在智能车竞赛上目前这种模式确实会有比较多的问题,比如需要使用传统控制方法将车模驱动起来,然后才能采集到有参考意义的数据进行模型的训练。
不具备一定调试经验的新手很难做好第一步。当模型训练完成之后,如果有问题,很难查找具体的问题在哪里,不像传统算法那样,可以分析数据一步一步推倒出具体的问题在哪个环节,使用AI模型后,如果有问题,则大多数时候只能重新采集数据进行训练。
本次训练结果一共采集了3次数据,重新训练了大概有5次模型后才达到的效果。还有一些小问题需要克服,比如车模更换过电感、新做了一辆车、更换过赛道电源、更换场地,之前训练的模型可能就不能使用了,需要重新训练。
当然也可以耍点小聪明。比如将数据采集的工作放到同校其他组别的小车上去;比如学习一下摄像头车的跑法,没准训练出来还跑的不错。当然最终我们还是希望广大参赛者摸索出更多更好的方法将AI应用真正的用到比赛准备的过程中。AI的引入本是为了减少人力调参。
我记得9月份我们到卓老师办公室讨论这个话题时,卓老师表达的原意应该是:为了引入新的学习方法,新的工程训练手段,让学生从之前的从底层到模块到小车还原的方式。这样一点一点拼凑到完成整个小车系统开发的过程变成基于数据的整体设计思路。
从设计开始就区别于之前的模块化思路,让学自动控制这部分学生也接触到AI的开发方式,也是教育的一种探究。让这部分学生对AI开发工具链以及开发手段进行熟悉,不管他们今后是从事科研,学术研究,还是开发,或者读研,都是一种提前学习,将来都可能都会用到,对他们都有帮助。
这个组别考察的重点也有所变化,这个组别的基础工作,板级应用,底层驱动,基本AI模型及开发方法都会直接给出来,底层不用学生来做,起点和其他组的起点不太一样。学生的工作包括AI工具链的应用,学习,使用,AI模型学习和设计,传感器设计,驱动电路设计。
由逐飞这样的第三方和赞助商一起给出一套核心板带底板的硬件+软件模型+AI模型训练手段和方法,参加这个组的学生在这个基础上去学习刚才提到的AI相关知识和基于数据的设计思路去解决控制的问题。
毫无疑问,这是一个好的设想,所以更希望这个好的设想能寻找到一个好的落地方式。以上便是逐飞在19年1月份对于电磁AI组所做的硬件整合和进一步验证。
如果到这里就结束了,感觉自己完成了一篇比较过时的汇报。…众所周知……看了最近的公众号总想问点啥,但又不想让卓老师徒增烦恼,鉴于当下复杂的情况和环境,就表达一下逐飞的意愿吧。
正如上次到卓老师办公室所表达的,我们将激情在倾注小车竞赛中,如今虽换了角色,激情和思考却一直在,希望能为小车竞赛更好发展尽一份力。
这几年我们亲眼看到各路大神通过智能车竞赛得到成长,毕业后去了华为、大疆、国核电力院、NXP、OV、rt-thread、海康威视、大华等各种大厂。当然他们的成长主要因为他们本身就牛,所以干啥都牛,但不可忽视智能车陪伴了他们的成长。
竞赛更好发展必定为社会陪伴更多优秀的大学生,我们没有成为大厂的一员,但我们也陪伴了大厂的一些牛人,吹过牛,希望我们的陪伴能继续有利于竞赛的发展。我们虽从中恰饭,但严格尊重比赛规则,如果今后竞赛需要我们为比赛出力,我们一定不含糊。
别的就没啥了,疫情期间,望卓老师一定注意防护,我们爱你,广大智能车爱好者都爱你,所以请照顾好自己,不管第十五届多晚办,我们都等着规则呢,到最后还是催了一把规则……
最后,祝卓老师一切都好!
永远在奋斗的青年–范兵