硬件+软件+控制算法=自动驾驶

raceon, ming hsieh, electrical engineering

来自冯佩泽,杜航和孙山林


这是一个我们三个(佩泽,航,和山林)如何在没有经验的情况下赢得一场自动驾驶小车竞速赛的故事。你们也可以做到。

上个学期,我们的一位PhD学生Valeriu Balaban在学院以及Ming Hsieh Institute的支持下,组织了这个名为Race On的比赛。目的是给硕士和本科的学生们提供一个实践计算机视觉、控制和车辆自动驾驶领域相关算法的机会。这些领域对于学生来说非常重要,因为今天的很多工作要求我们在这个领域有一些经验。所以我们决定参加。

每一个队伍都会得到一个自动驾驶模型小车工具箱(由Ming Hsieh Institute赞助)和一些关于怎样搭建小车的基本指导。我们要做的是想出最好的算法以及寻找到最合适的参数让我们的小车运行在一个轨道上。在数个月的努力之后我们赢了整场比赛。所以我们是如何做到的,并且我们在这个过程中又学到了什么呢?

组装自动驾驶小车

在我们能够开始有技术含量的工作之前,我们得先组装小车——这是一个比我们预期中更加艰难的任务。我们使用了各种各样的工具:锤子、钳子、螺丝刀——甚至是电烙铁!在这个过程中,我们不小心把胶水洒在了轮胎上,毁掉了第一套轮胎;在第一次测试运行中,小车撞在了墙上,折断了前护盖。


代码和算法

克服重重困难后,我们组装好了小车。在Valeriu的赛前车间中,我们学会了控制照相机和控制小车的移动。借助学习到的知识,我们初步写成了通过照相机图像来识别路径的算法。我们编写了一个可以通过键盘手动控制小车的程序来测试算法。手动控制的过程中,我们可以观察到真实的图像并将它与我们算法的输出比对。赛道识别算法调试完成后,我们为它配备了一个简单的PID控制器保证小车始终行进在赛道的中心。

关于高速行驶状态下如何保证小车识别赛道的可靠性,我们小组讨论良久。我们测试了很多不同的配置,每次测试后,分析小车的表现并据此设置小车下一次测试的配置。当发现我们可能已经达到这种方法的最优效果时,我们不得不找一个新的解决办法进一步提升小车的表现。


更多的调整和新的算法

于是我们实现了一个改进版本的PID控制器,可以在不同速度下自动调整PID值。同样地,每一次新的测试带来了新的问题。这是关于工程最好同时又是最具有挑战性的问题之一:学到的越多,遇到的挑战越多。

我们必须换掉原本的算法,让小车可以在高速下保持检测到轨道。我们还需要添加更多代码来解决不停涌出的问题。最后,我们创造了一个更具有鲁棒性的机制来检测轨道。就最后的细节上来说,为了让小车忽略小的轨道偏离误差但是对大的偏离误差进行快速反应,我们设计了一个基于偏移距离的二次方的代价函数,这样控制器就能够快速减小误差至0,然后精确地按预定轨道行进。


决赛

看见小车每一圈的用时一点点减少,我们被激励着不断前进。在决赛前夜,我们没睡。我们相信小车可以跑得更快。我们一遍又一遍地改算法,调参数,直到觉得再也没什么可以做的。

比赛开始了,十几只队伍都来到了房间。我们有三次记录最快时间的机会。第一次:14.7秒。不错但是还没有快到可以赢的地步。调整了一下参数,第二次跑:15.26秒。和我们预期的有点不一样!我们又一次改变了算法和参数,自动驾驶小车完成了比赛,就像我们期待的那样,13.72秒——比赛中的最快时间。我们所有的付出有了回报。好几年都没这么兴奋过了!


最重要的……我们学到了什么呢??

我们在树莓派上编过程,并且得到了很多硬件方面的经验——这些对于ECE学生来说真的有用。更重要地,我们学到了怎样才可以成功。第一,有一个好队伍多么重要。当我们其中一个陷入僵局,其他人可以启发和激励他。共同合作,让我们超越自我。

我们也学到了作为一个队伍如何交流和编程。人们有时会认为编程是一个人的事,但是团队一起编程给了我们一些对未来有用的实际技能。

最后,我们学到了从实际出发。这个是什么意思呢?在学校我们通常学到的是解决事情的最好方法。但是现实生活中,你通常被一些事情,比如时间和资源,所限制。有时你得选择一个最适合当前场景的方法,即使不是理论上最好的方法。我们不是因为比别人聪明而赢得了这次比赛,而是因为我们团结合作,从不满足于一开始的结果,用信心和实事求是来面对挑战。这是我们能给未来工程师的最好的建议,不管你的挑战是什么!



航,佩泽和山林于2019年春季从Ming Hsieh Department of Electrical and Computer Engineering毕业. 山林目前是一家位于尔湾的医疗人工智能公司的科研人员,他准备申请计算机视觉或机器学习相关的Ph.D项目。航将于下个月入职成为一名软件工程师。

Share this Post