2020电赛C题解析:99分坡道小车的实现过程
[复制链接]
本帖最后由 qwqwqw2088 于 2020-10-30 08:59 编辑
白天训练,熬夜做题,在TI杯比赛中拿到99分(满分120分),来自西安某工程大学某学院的C题参赛队伍(党旭东 谢斌 李文齐)分享了他们的参赛过程、C题的总结,以及他们小车的代码。
我们的小车在测试过程中,得分99分,很遗憾因为扣了一分所以没法继续进行剩下20分的附加题。我们的小车设计加了一个旋翼上用的螺旋桨,结果听说有个大佬更绝,直接用涵道做了可以吸顶的车,属实佩服。
01
先给大家说说我们作品的实现过程:
硬件部分:小车使用MSP430F149作为主控核心,由其输出两路PWM波分别控制左右两个后轮的减速电机,同时进行前轮编码器的正交解码、车顶下压风扇的控制、三个前置光电对管的采样、与车前OPENMV进行通讯(备选方案未使用)。
前轮被动差速与2048线编码器
小车使用恩智浦杯比赛车队用过的B车模和两个减速电机制成的底盘,整车投影短而宽,我们认为这样能够更加稳地抓地和转向,同时B车模自带被动差速连接编码器可使得小车测速精准不受转向和打滑的影响。车中部是一组3S3300mah的航模动力电池作为整车电源,其输出分别接入双路H桥电机驱动模块、DC-DC稳压模块、无刷电机电调(串继电器),其中DC-DC稳压模块输出5V分别向MSP430、OPENMV、继电器、编码器、光电对管供电。在车的前部装了100g的配重块,因为我们在最后一天联调时发现小车爬50度坡时会翘头,所以加装配重块并控制在了1.49kg(要求不超过1.5kg)。
软件部分:由于我一直用的都是STM32+HAL库+freeRTOS做一些小项目,这个MSP430F149是之前一时兴起买来玩的(没有stm32香所以就吃灰了,结果比赛又翻出来)。之前刚入手的时候就是尝试了定时器中断控制流水灯,所以比赛第一天我都拿来学MSP430了,在三天内逐步实现了GPIO控制、编码器正交解码、PWM输出、定时器中断主程序循环、串口通信、SPI屏幕显示等等。
第二天,做硬件的队友也制作出了差速模型和阿克曼舵机转向单电机模型,我们选定了差速模型后便开始调速度PID,因为我们的编码器装在前轮所以测速精确,于是打算使用控制速度的方式来控制最终的到达时间,为了方便调试我写了一个简单的界面,利用MSP430上自带的两个按钮和前轮编码器进行调参,在调好了速度PID后小车已经可以在各种平面保持匀速了,并且通过PID中积分项还可以达到很好的打滑后的补偿效果。
在前期版本中,老师建议我们使用openmv,所以我写了openmv的巡线程序并且通过串口和MSP430通信,实测效果良好,就是可惜位置太靠前导致转向过于提前,所以后来我们换了三个光电对管的方案。在算法的优化以及PI控制下,可以实现平滑巡线和出线的自恢复效果,可以稳定完成45度不压线爬坡和50度压线爬坡,在发车两秒左右启动无刷风扇进行下压,风压力大概在200g,完成比赛的时间误差控制在0.1s左右。
蜂鸣器和三个光电对管循迹模块
如何启动下压增强无刷风扇?
使用航模电调,需要在第一次使用时完成油门校准,其后每次启动需要保证其在上电前输入5%占空比的PWM波,所以我们使用单片机控制5v继电器控制12v继电器来启动电调,实测效果良好,启动延时和警示可以提醒我们在电调带电时远离螺旋桨。下压风力大约200g还是略微令人失望的,不过在风扇开启后能明显发现小车在爬45度的坡时不打滑了。
前轮编码器的使用:在研究了题目后,发现其时间控制精度要求在1s内,所以我们设计了后轮差速驱动,前轮测速的方案,并且使用了2048线高精度AB相编码器,为精确控制速度打下了良好的基础。
在测试了5组时间后,进行4参数曲线拟合发现拟合度在0.998,可以说PID发挥了重要的作用。程序在上电后默认是设置调参界面,按下第一项后才是运行模式,所以我把设置模式时的编码器用来调参,发现效果十分好,在此强烈向大家推荐这种小车调参方法!
光电对管算法:和我们一起做c题的另外一组一开始就使用了光电对管方案,但是他们用了九个光电对管,十分有排面,但是我考虑了一下(懒),还是使用了3个光电对管的方案。
在程序中虚拟了一个offset变量,中间检测到线时赋0,左边-100,右边100,然后用这个当作误差来进行PI转向控制,实测P参数可以将车保持居中,I参数可以在小车出线后加速回转来重新找到线,效果比OPENMV方案要好很多。
|