不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我
今天来分享的是山东大学(威海)的H题参赛队伍ZLC电赛小组(李志坚 陈昊然 周天宇)。在今年的TI杯全国大学生电子设计竞赛中,他们获得山东省一等奖,其中H题任务四的完赛时间是19s!
今年是我们第3年参赛,目标比以往都更加明确一些。早在暑假前期,我们便讨论了即将到来的电赛的备赛思路,并提前总结了往年的参赛经验,计划在控制题和信号题之间进行选择,同时根据官方给出的电赛清单,准备了一些常用模块。由于每年会有至少一道题目指定使用TI的MCU作为主控,我们还对TI MSP432系列单片机进行学习,配置运行环境并熟悉了该单片机的使用,并且提前编写了一些常用的外设驱动代码。早上八点,赛题公示。我们大致浏览了一遍所有题目后,默契地选择了最为熟悉的控制题。
然而控制题有好几道,D题-立体货架盘点无人机系统、E题-三子棋游戏装置、F题-磁悬浮实验装置、H题-自动行驶小车。经过一上午的讨论,我们三个一致认为,本次比赛将是我们在本科阶段最后一次参加电子设计竞赛,必须冲刺最高奖,小车题是我们比较擅长的题目(队伍里的队员都有做智能车比赛的经历),最终我们选择了H题。
锁定题目后,我们开始认真的分析题目考察的指标和难点,H题的难点在于如何在短期内移植不同系列单片机的代码以及如何完成精度较高的惯性导航任务。
图2:TI System Configuration Tool界面
难点一:H题限定使用TI MSPM0系列MCU完成任务,过去我们队控制小车使用的主控主要是MSP432系列,赛前准备的外驱动库也是针对这个系列单片机的。我们虽然在前期了解过如何使用MSPM0 系列芯片,但是短时间内将编码器、姿态传感器等驱动代码移植到MSPM0芯片上对我们来说仍然是个严峻的挑战。早期代码移植的进展还是比较顺利的,但是在移植SPI协议的惯性测量单元(IMU)时,我们遇到了主循环卡死的问题。这是个棘手的问题,经过讨论和查阅大量的相关资料,才发现是因为工程设置的栈大小不够大,导致爆栈。后来,我们在配置文件中修改了栈的大小,问题解决。至此为止,基本的驱动代码移植工作接近尾声!根据赛后讨论,我们一致认为:高效、流畅的代码移植离不开我们本次比赛使用的TI System Configuration Tool图形化配置工具。难点二:除了上述提到的代码移植,如何进行精确的惯性导航也是本题的难点。惯性导航的一个很重要的要求就是准确的姿态解算。我们也充分讨论了姿态传感器的的选择,由于题目不允许使用带有自解算装置的IMU,所以我们只能使用输出原始数据的IMU传感器,自己进行姿态解算。常见的传感器分为六轴传感器和九轴传感器,经过我们的讨论,我们最终选择六轴传感器去解算姿态,主要原因如下:a)题目要求惯性导航的时间不太长、距离不太远,没有对地理导航坐标系对准的需求,使用载体坐标系足够满足题目要求。对于本题,六轴数据(三轴加速度、三轴角速度)就已经足够了。b)评测场地的磁场情况、电机产生的磁场影响并不确定。使用九轴数据(相比增加了磁力计数据)完全没有必要,还会增加单片机计算的负担。c)六轴姿态传感器整体的陀螺仪零点漂移数值要更小,性能更出色,有利于后续姿态解算。要想获得准确的姿态解算结果,就必须用IMU进行标定(加速度计还好,陀螺仪必须标定)。我们采用的是系统级去零飘的方法,统计小车在静止状态下的三轴角速度1000次的平均数据,作为零飘值。然后在每次获取新的时进行校正。结合简单的定时积分算法,我们可以获得短期内比较精确的欧拉角姿态。但是仅仅限于静止状态下,在小车的高速运动过程中,积分噪声还是大到不可接受。而且我们也没法保证评测场地一定是与重力垂直的平面,所以简单的定时积分算法,是不可以满足我们冲击最高奖的要求的。
姿态解算的准确度直接决定着小车成绩的上限,这一点我们一直很清楚。几经探讨之后,我们决定挑战更有难度的做法,采用互补滤波的思想,基于Mahony姿态解算方法,使用四元数表示小车姿态,计算理论加速度与实际加速度的偏差,并构建PI补偿器,对角速度测量值进行补偿。经过大量调参和测试,即使在小车高速剧烈的运动状态下,我们的算法也可以得到一个比较稳定的姿态解算结果。虽然理论上来讲,六轴姿态传感器解算的航向角是不可能绝对精确的,但是对于我们的比赛要求,完全绰绰有余!
对于本题来讲,有了精确的航向角度信息,配合里程计(数据可以来源于编码器),就可以随心所欲地完成相应的惯性导航任务了(如图8所示)。
至此为止,H题的两大难题都被我们一一攻破了。工程师应该具有不畏困难、勇于创新的精神,这种精神也一直激励着我们在比赛中一步步克服难关!在小车搭建的硬件层面,基于之前的参赛经验,我们注意到了H题的一些具体要求,如车模大小尺寸要求、不能使用摄像头等。早期我们使用的车模是搭万向轮的三轮小车,拥有比较好的转向性能。我们使用TPS5450稳压模块将2s电池的7.4V稳压到5V,给TI
LaunchPad MSPM0G3507开发板进行供电,通过杜邦线将外设连接到LaunchPad开发板上。在电机的选择方面,我们最初使用的是2路减速电机,此方案虽然比较稳定,但是上限较低。此外,我们使用洞洞板自制了一个声光模块。不巧的是,在测试外设的时候,我们发现之前准备的灰度传感器坏掉了,氛围一下变得紧张起来,我们只能紧急购买新的灰度传感器。经过两天加一夜的奋斗,我们已经完全搭建好了三轮小车,稳定地完成题目要求的所有任务(除了灰度循迹,因为灰度模块还没到)。
现在我们要做的是等待封箱,睡觉休息吗?当然不是!
我们很快发现目前采取的硬件上限无法支撑任务四的竞速要求,因为我们的目标始终是最高奖。但是现在购买其他车模肯定时间来不及了,就在我们为此感到沮丧的时候,我们无意间发现了实验室角落孤单待着的四轮车模。我们拿过来一量尺寸(投影面积为23.1cmx14cm,小车高度小于15cm),符合题目要求,我们看到了希望!
图9:中途方案更新
于是我们紧急更换方案,将原来的电机速度控制方案,更换为性能更加强力DRV8701+180电机的方案。将原来的差速转向方案,更换为阿克曼转向方案,极大地提高了我们小车的上限!第三天上午,灰度传感器送到,终于松了一口气。然后我们兵分两路,软件同学继续调试参数,硬件同学开始着手写技术报告。我们参考经典的四轮控制方案,电机速度环使用经典的增量式PI控制,舵机方向环使用PD控制。为了追求极致的速度,我们车模采用了以惯性导航为主,以灰度循迹为辅的方案(灰度传感器仅仅保证高速下车模的投影在黑线上)。然后就开始大量的调节参数。然而参数调节可不是一件容易的事情,在调参的过程中,我们也遇到了一系列的问题:1)在小车的高速运行的过程中,我们发现后轮发生乱颤现象,我们根据以往的经验,这个问题可能由多种原因造成,比如速度环过紧、车模过轻、轮胎过滑等。于是我们依次做了调节参数、增加配重、更换轮胎等措施,发现问题仍然存在。经过大量的测试,最终我们在上位机上发现了猫腻,测量右轮速度的正交编码器的数值在很大范围内跳动,原来是右侧编码器坏了。于是我们紧急更换编码器,问题解决!2)在调试的过程中,我们发现,同样的代码,运行两遍,效果竟然差距很大。我们陷入了沉思,难道是程序鲁棒性太差了?经过观察,我们发现问题在于赛道和轮胎是否干净。轮胎打滑,对车模转向能力和里程计(编码器积分)数值的影响都是致命的。常见的解决方法主要有两个,第一种是对轮胎进行软化特殊处理,第二种是准备毛巾,始终保持赛道干净。因为时间紧急,我们果断选择后者。以上只是代表性的问题,调参中我们遇到的很多问题都是致命的,如果我们没有及时发现并解决的话,后果不堪设想。比赛完后,每次回想参赛经历时,我们都感到非常幸运。时间很快来到最后一天的下午,考虑到晚上就要封箱,我们寻找了大小合适的箱子和缓冲海绵。下午五点,我们将小车性能调试至稳定,并决定冻结代码。我们根据最后一版代码对赛题进行了测试,并完善我们的报告。在封箱之前,我们对小车的电池进行了充电,保证其在几天之后的评测中能够发挥应有的水平。晚上八点,我们对小车进行了封箱,并使用缓冲海绵填充在小车周围保护小车,四天三夜的奋斗就此告一段落。8月5号,虽然下起了小雨,也丝毫不会影响我们的热情。我们前往淄博进行评测,功夫不负有心人,我们顺利拿下省级一等奖,为三年电赛经历画上了圆满的句号。在三年的电赛的备赛和比赛过程中,我们从大一刚入学的小白成长为了有能力完成电赛题目所有要求的“老选手”,在参与电赛的过程中我们学到了很多东西,我们的动手能力也提升了很多。在此我们总结了一下在电赛过程中需要注意的几个点,希望对大家的备赛有帮助:1)提前准备相应的模块。可以根据备赛清单提前准备一些电源模块、舵机云台、三轮/四轮小车、无人机、各种电机及其驱动板、无线传输交互模块(蓝牙或WIFI都可以)、视觉模块(边缘智能方向)等等;2)在比赛前的备赛阶段中,要完成两或三个(或者更多)往年题目;3)认真阅读赛题,最好打印下来阅读,对细节要十分注意,如22年E题的角度、23年E题的顺时针逆时针,往年都有同学因为没有注意细节而遗憾失分;4)合理分工,争取软件和硬件进度同时推进,并及时撰写报告;5)合理安排时间,提前完成报告撰写,避免最后时间紧张;6)提前准备好封箱的箱子和缓冲海绵,防止装置封箱之后在运输的过程中受到损坏;7)在封箱之前确保设备有足够的电量,防止评测时出现电量不足设备无法发挥正常性能的情况;8)每年会有至少一道题目指定使用TI的MCU作为主控,最好提前学习使用TI的MCU,并且准备相应的外设驱动代码。为了便于以后大家使用MSPM0系列单片机进行备赛,我们赛后整理了程序代码,并配套设计了一块MSPM0G3507 Launch Pad拓展板,分别开源到了github平台和立创开源平台,开源地址如下,欢迎大家交流学习:ZLC基于MSPM0的四轮阿克曼小车外设驱动库及完赛代码:https://github.com/ZhijianLi2003/ZLC_MSPM0_Peripheral_LibraryMSPM0G3507 Launch Pad拓展板:https://oshwhub.com/hurricanchen/zlc_-dian-sai-mspm0g3507-launchpad-kuo-zhan-ban不管我们走到哪里,我们都不会忘记这段难忘的电赛时光!不畏困难,勇于创新的工程师精神也指引着我们为祖国的事业奋斗终身!我们有个共同的名字:电子人!最后,祝大家备赛顺利,在比赛中享受乐趣,提升能力,续写电子人的新篇章!
我们是妮mo,达尔闻创始人,只讲技术不撩汉的小姐姐。达尔闻在线教育平台旨在服务电子行业专业人士,提供技能培训视频,覆盖各细分领域热门话题,比如嵌入式,FPGA,人工智能等。并针对不同人群量身定制分层级学习内容,例如常用知识点,拆解评测,电赛/智能车/考研等,欢迎关注。