赞
踩
状态机机制是很有用的一种软件设计。
我在代码中基本每个元素都使用了状态机。比如环岛9个状态的转换;坡道的上坡,坡中,下坡;横断的打角,反打脚,自用控制,回归正常;甚至整车发车过程,出库打角,充电,充电完成后正常寻迹,看到斑马线停车。
整个车模运行过程其实就是一个大状态机,在这个大状态机种又套着元素状态机。
这样有个好处,可以做到元素互斥。我可以清楚的知道当前是什么元素,是什么状态,即将进入什么状态,需要什么条件。也可以根据元素进行特殊的控制方式,比如减速,更换pd系数。
状态机更新条件一般是定时器计时,编码器积分,陀螺仪积分
参考代码在下面。
- //横断路障处理区
- //下面这段代码位于50ms中断中
- if(Barricade_Flag!=0)
- {
- if(Barricade_Flag==1)
- {
- count_50ms=0;
- encoder_accu=0;//清干净,为后续积分准备
- Barricade_Flag=2;
- }
- else if(Barricade_Flag==2)//2状态向右打角,同时计时
- {
- count_50ms++;//计算时间
- if(count_50ms>=5)//打角计时和积分都可以,看自己选择
- {
- count_50ms=0;
- Barricade_Flag=3;
- }
- }
- else if(Barricade_Flag==3)
- {
- count_50ms++;
- //encoder_accu+=Speed_Right_Real;
- if(count_50ms>=10)
- {
- count_50ms=0;
- Barricade_Flag=4;
- }
- }
- else if(Barricade_Flag==4)//4自由寻迹归正
- {
- encoder_accu+=Speed_Right_Real;
- if(encoder_accu>=1500)
- {
- encoder_accu=0;
- Barricade_Flag=0;
- }
- }

做智能车是写代码,写代码就需要有良好的编程习惯。
我现在也上班了,在公司做开发,写代码都需要遵循代码规范的。包括命名规范,函数层次要求,注释规范等。
不然你的代码传下去别人无从下手,看不懂,后人就会在背后骂你(狗头)。
这里我建议各种变量尽量用结构体。建议每个元素开一个元素结构体,结构体里面再放各种使用变量,如状态,计时,积分,角点位置等,这样就不用每个.c文件开头50行全是密密麻麻的全集变量。
注释,注释更是必须的。虽然有说法说:优雅的代码不需要注释。显然大部分人没有这么优雅的能力。那就老老实实写注释,每个函数的作用,参数传递要求,包括函数数组等数据越界保护,都写清楚,能想到的问题都做个处理,mcu不差你那一点算力。不要等到出问题了,找半天找不出来bug。
这里建议调摄像头车的各位朋友尽量记录车子跑车时候的图片,可以使用图传,sd卡等。实时记录车子的图像,有些时候靠手推车不能很好的还原当时的问题,使用图传,sd卡就可以知道车子在那时看见了什么。
要是能有pc平台能够运行车子里的代码,在电脑上查看各种变量信息就更好了。
可惜找了许多上位机,没有完全满足我要求的。各位要是有能力的话自己写一个,这对调车非常有帮助。写出来代码在仿真环境里面跑一遍,再上车跑。车上出现的问题找出实际的图像,在放回仿真里面解决问题,这对图像处理用处非常之大。
由于18届比赛不设置试车时间,初赛直接开始跑,如果下代码的话会比较浪费时间。
建议写个ui,将发车方向,各种速度,横断方向,pd系数,电感参数都显示在屏幕上,根据实际情况调整各种参数。把参数存到flash中,掉电不丢失。
想好车子要实现那些功能,中断放什么东西,while放什么东西。
图像判断里面谁在前,谁在后;控制里面,谁先处理,谁在后面,前期规划的好,后期修改代码可以省很多心。
上班之后发现debug是真的好用,在一些地方打上断点,单步运行,分析程序情况,查看相关变量,简直不要太舒服。
大家在遇到问题的时候,可以尝试用debug试一下。看看变量都是什么情况,走了哪个if,或者进到了哪些地方。debug可以直接看代码跑到哪里去了,这里非常推荐debug。
因为我是做软件的,对硬件的要求就行希望软硬两个人可以相互交流。
主要交流接口位置,引脚情况,以及使用过程中各种问题。
最后就是硬件越早出板越好,这样有更长的时间进行测试。测试的越多,肯定稳定性越高。
这里分享下我收集到的这几年的官方赛道设计图。
另外据我观察,智能车几大赛区省赛的赛道都是一样的,区别不会太大。
所以大家可以打个时间差,看看哪个赛区最早开赛,看看他们的赛道,参考价值极高。
参考资料如下:
2020年智能车竞赛由预赛赛道拼接成决赛赛道的方案_智能车赛道拼接图-CSDN博客
十六届车赛华南赛区省赛无决赛。
由于种种原因的影响,十六届车赛国赛从线下赛改为线上赛。
赛道变成各个国赛学校赛点自行设计,无统一设计。
又是因为众所周知的原因,十七届省赛改成抱团组队线上赛。
组委会公布赛道,多所高校抱团组成赛点,共同使用一套场地进行比赛。
十七届省赛线上赛赛道卓大说27.1米,某商家说27.8米,各位自行计算吧。
十七届国赛分为线上赛和线下赛,线上赛还是跑的上面的赛道,多跑一圈而已。
线下赛在南京工程大学,赛道设计如下:
第十七届全国大学生智能车竞赛总决赛线下赛道设计-CSDN博客
实际图我手头没存,各位去b站搜索吧。(但据我肉眼观测实际图和设计图貌似不太一样)
华南是最早比赛的一个,其他赛区赛道和华南略有区别。
由于线下赛的惨烈性,完赛率极低。据我所知,各个赛区没有设置单独的决赛赛道,大家还是预赛赛道稍微修跑改一下再一次。
十八届华南赛区决赛赛道是将横断去掉,换成一个坡道。
也就是说十八届华南决赛是有两个坡道,没有路障。
十八届国赛初赛和决赛赛道见上,看起来就就很难。
建议按照标准铺设规范来,某飞家铺设规范在下面,大家参考。
这里做一个提示,在铺设电磁线时候,白色绝缘胶不要绷的太死,不然第二天会全部崩开的。
轻轻的放在电磁线上,用手压紧就好。
反例见下图。
智能车比赛是个很复杂的比赛,涉及到方方面面,一个学校能做到的其实有限,我希望大家合作交流。
我们在备赛期间也向附近学校进行了交流,他们也热情的接待了我们。就是这样的相互交流,互换赛道跑车可以更好的检验车子的稳定性,有问题大家可以简单的交流分析,交流设计方案设计想法。
赛场上我们是对手,赛场下我们是朋友。
下面是我收集到的从第14届智能车比赛,一直到18届智能车比赛的技术报告。
大家可以自由下载,链接失效在评论区和我说即可,我看到后会及时更新的。
链接:https://pan.baidu.com/s/1cdCDR3GE7Jvanw2i0-P0Qw?pwd=n1pm
提取码:n1pm
希望能够帮助到一些人。
本人菜鸡一只,各位大佬发现问题欢迎留言指出。
qq:2296449414
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。