当前位置:   article > 正文

第18届全国大学生智能汽车竞赛四轮车开源讲解【11】--零散的建议

第18届全国大学生智能汽车竞赛四轮车开源讲解【11】--零散的建议

开源汇总写在下面

第18届全国大学生智能汽车竞赛四轮车开源讲解_Joshua.X的博客-CSDN博客

一、软件

1.状态机

状态机机制是很有用的一种软件设计

我在代码中基本每个元素都使用了状态机。比如环岛9个状态的转换;坡道的上坡,坡中,下坡;横断的打角,反打脚,自用控制,回归正常;甚至整车发车过程,出库打角,充电,充电完成后正常寻迹,看到斑马线停车。

整个车模运行过程其实就是一个大状态机,在这个大状态机种又套着元素状态机。

这样有个好处,可以做到元素互斥。我可以清楚的知道当前是什么元素,是什么状态,即将进入什么状态,需要什么条件。也可以根据元素进行特殊的控制方式,比如减速,更换pd系数。

状态机更新条件一般是定时器计时,编码器积分,陀螺仪积分

参考代码在下面。

  1. //横断路障处理区
  2. //下面这段代码位于50ms中断中
  3. if(Barricade_Flag!=0)
  4. {
  5. if(Barricade_Flag==1)
  6. {
  7. count_50ms=0;
  8. encoder_accu=0;//清干净,为后续积分准备
  9. Barricade_Flag=2;
  10. }
  11. else if(Barricade_Flag==2)//2状态向右打角,同时计时
  12. {
  13. count_50ms++;//计算时间
  14. if(count_50ms>=5)//打角计时和积分都可以,看自己选择
  15. {
  16. count_50ms=0;
  17. Barricade_Flag=3;
  18. }
  19. }
  20. else if(Barricade_Flag==3)
  21. {
  22. count_50ms++;
  23. //encoder_accu+=Speed_Right_Real;
  24. if(count_50ms>=10)
  25. {
  26. count_50ms=0;
  27. Barricade_Flag=4;
  28. }
  29. }
  30. else if(Barricade_Flag==4)//4自由寻迹归正
  31. {
  32. encoder_accu+=Speed_Right_Real;
  33. if(encoder_accu>=1500)
  34. {
  35. encoder_accu=0;
  36. Barricade_Flag=0;
  37. }
  38. }

2.代码规范

做智能车是写代码,写代码就需要有良好的编程习惯。

我现在也上班了,在公司做开发,写代码都需要遵循代码规范的。包括命名规范,函数层次要求,注释规范等。

不然你的代码传下去别人无从下手,看不懂,后人就会在背后骂你(狗头)。

这里我建议各种变量尽量用结构体。建议每个元素开一个元素结构体,结构体里面再放各种使用变量,如状态,计时,积分,角点位置等,这样就不用每个.c文件开头50行全是密密麻麻的全集变量。

注释,注释更是必须的。虽然有说法说:优雅的代码不需要注释。显然大部分人没有这么优雅的能力。那就老老实实写注释,每个函数的作用,参数传递要求,包括函数数组等数据越界保护,都写清楚,能想到的问题都做个处理,mcu不差你那一点算力。不要等到出问题了,找半天找不出来bug。

3.图传

这里建议调摄像头车的各位朋友尽量记录车子跑车时候的图片,可以使用图传,sd卡等。实时记录车子的图像,有些时候靠手推车不能很好的还原当时的问题,使用图传,sd卡就可以知道车子在那时看见了什么。

要是能有pc平台能够运行车子里的代码,在电脑上查看各种变量信息就更好了。

可惜找了许多上位机,没有完全满足我要求的。各位要是有能力的话自己写一个,这对调车非常有帮助。写出来代码在仿真环境里面跑一遍,再上车跑。车上出现的问题找出实际的图像,在放回仿真里面解决问题,这对图像处理用处非常之大。

4.UI

由于18届比赛不设置试车时间,初赛直接开始跑,如果下代码的话会比较浪费时间。

建议写个ui,将发车方向,各种速度,横断方向,pd系数,电感参数都显示在屏幕上,根据实际情况调整各种参数。把参数存到flash中,掉电不丢失。

5.程序架构层次

想好车子要实现那些功能,中断放什么东西,while放什么东西。

图像判断里面谁在前,谁在后;控制里面,谁先处理,谁在后面,前期规划的好,后期修改代码可以省很多心。

6.Debug

上班之后发现debug是真的好用,在一些地方打上断点,单步运行,分析程序情况,查看相关变量,简直不要太舒服。

大家在遇到问题的时候,可以尝试用debug试一下。看看变量都是什么情况,走了哪个if,或者进到了哪些地方。debug可以直接看代码跑到哪里去了,这里非常推荐debug。

二、硬件

因为我是做软件的,对硬件的要求就行希望软硬两个人可以相互交流。

主要交流接口位置,引脚情况,以及使用过程中各种问题。

最后就是硬件越早出板越好,这样有更长的时间进行测试。测试的越多,肯定稳定性越高。

三、赛道

1.设计规范

这里分享下我收集到的这几年的官方赛道设计图。

另外据我观察,智能车几大赛区省赛的赛道都是一样的,区别不会太大。

所以大家可以打个时间差,看看哪个赛区最早开赛,看看他们的赛道,参考价值极高。

十五届车赛

十五届赛道设计图
十五届赛道修改图
十五届赛道实际图
十五届决赛图

参考资料如下:

第十五届全国大学生智能汽车竞赛赛道拼装图_-CSDN博客

2020年智能车竞赛由预赛赛道拼接成决赛赛道的方案_智能车赛道拼接图-CSDN博客

卓大微信公众号

十六届车赛

十六届赛道设计图
十六届实际赛道
十六届实际赛道

十六届车赛华南赛区省赛无决赛。

由于种种原因的影响,十六届车赛国赛从线下赛改为线上赛。

赛道变成各个国赛学校赛点自行设计,无统一设计。

十七届车赛

又是因为众所周知的原因,十七届省赛改成抱团组队线上赛。

组委会公布赛道,多所高校抱团组成赛点,共同使用一套场地进行比赛。

十七届赛道设计图

十七届实际赛道

十七届智能车竞赛线上比赛赛道长度是多少?-CSDN博客

十七届省赛线上赛赛道卓大说27.1米,某商家说27.8米,各位自行计算吧。

十七届国赛分为线上赛和线下赛,线上赛还是跑的上面的赛道,多跑一圈而已。

线下赛在南京工程大学,赛道设计如下:

十七届国赛设计赛道

第十七届全国大学生智能车竞赛总决赛线下赛道设计-CSDN博客

实际图我手头没存,各位去b站搜索吧。(但据我肉眼观测实际图和设计图貌似不太一样)

十八届车赛

华南是最早比赛的一个,其他赛区赛道和华南略有区别。

由于线下赛的惨烈性,完赛率极低。据我所知,各个赛区没有设置单独的决赛赛道,大家还是预赛赛道稍微修跑改一下再一次。

十八届实际赛道

十八届华南赛区决赛赛道是将横断去掉,换成一个坡道。

也就是说十八届华南决赛是有两个坡道,没有路障。

十八届国赛初赛
十八届国赛决赛

十八届国赛初赛和决赛赛道见上,看起来就就很难。

2.铺设规范

建议按照标准铺设规范来,某飞家铺设规范在下面,大家参考。

智能汽车竞赛室内赛道铺设方法演示视频z

这里做一个提示,在铺设电磁线时候,白色绝缘胶不要绷的太死,不然第二天会全部崩开的。

轻轻的放在电磁线上,用手压紧就好。

反例见下图。

四、交流

智能车比赛是个很复杂的比赛,涉及到方方面面,一个学校能做到的其实有限,我希望大家合作交流。

我们在备赛期间也向附近学校进行了交流,他们也热情的接待了我们。就是这样的相互交流,互换赛道跑车可以更好的检验车子的稳定性,有问题大家可以简单的交流分析,交流设计方案设计想法。

赛场上我们是对手,赛场下我们是朋友。

五、技术报告

下面是我收集到的从第14届智能车比赛,一直到18届智能车比赛的技术报告。

大家可以自由下载,链接失效在评论区和我说即可,我看到后会及时更新的。

链接:https://pan.baidu.com/s/1cdCDR3GE7Jvanw2i0-P0Qw?pwd=n1pm
提取码:n1pm

希望能够帮助到一些人。

本人菜鸡一只,各位大佬发现问题欢迎留言指出。

qq:2296449414

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/420582
推荐阅读
相关标签
  

闽ICP备14008679号