前言:作为一名准大三的软件工程学生,刚刚结束了他的为期十几天的智能车之旅,学习了很多,受益匪浅。


1. 什么是智能车?

印象里面好像就是一个车在赛道上跑,然后一群人在哪里看着它跑,就像遥控车那样简单,然而我接触后完全颠覆了我小时候的认知,车:日常中更多是小汽车,或者电动车,或者小孩子手里的玩具车,然而智能车就是:(百度百科)

智能车  (Intelligent Car)是电子计算机等最新科技成果与现代汽车工业相结合的产物,因而“善解人意”。通常具有自动驾驶,自动变速,甚至具有自动识别道路的功能。另外,车内的各种辅助设施也一应电脑化,常常给人以新奇感。

  (smart car)全国大学生智能汽车竞赛

2.什么是信标组?

比赛官方介绍:

我的理解

由于每年的信标不同,今年是信标的是灯光,通俗点说就是你造出来的小车车面对场地上有四个灯,每次只会亮一个,然后你的车要跑到灯上面用加在车上的磁铁灭掉信标的灯,同时下一个灯亮起,你的车要去找下一个灯并过去灭了它,最后灭完就完赛了,都完赛的再看时间谁最短。

3.我的车

我们组的车极其“潦草”,照片就不贴了。

大概描述一下整体,也就是硬件部分,由于硬件部分由其他组员完成,我了解不是很多,导致这部分耽误了很长时间,虽然很早就开始了。

按照组委会的规则:我们的车是自制车模(其实我们更多是拼接怪)

1.传感器(摄像头):总钻风摄像头MT9V034X  1个

2.微处理器:TC264  1个

3.电池:超级法拉电容 50F*2.7 4个(节能信标组不用电池,用充放电的电容,为了突出节能,每个灯下都有电磁感应装置,来给车充电,所以你的车也得有电磁感应)

4.车模电路板个数:3个,主板、无线充电的板子、电容稳压的板子。

5.俩轮子和一个调试用的屏幕。

6.八个灭灯磁铁。

写到这里我还是觉得把车贴出来吧。哈哈哈(丢人)

俯视图:

前视图:

右视图:

还有PCB主板的图和原理图应该不能随意发出来吧,呱呱呱。

这部分是我的组员制作部分,当然搭车过程异常辛苦,十几天硬是花掉了十天,留给我写控制代码只有两天。

4.我的代码

因为时间仓促写的代码很简单,说明一下思路:

当车到场地后,因为是节能,所以要在第一个灯上充一会电,然后车达到一定电量开始启动。由于时间问题,我们组决定多给车一些时间充电,一口气跑完(当然我们的参与奖告诉我们不可行),所以识别充电这块我们组是尝试写了的但是,最后没写出来,就不贴了。下面我来讲讲识别到灯并找到他然后过去灭掉,然后寻找下个灯的代码思路。

第一步:

摄像头会拍到一个画面,在整个画面里面会出现一个闪烁的灯,ok记住这个闪烁,由于反馈是灰白的,所以涉及到灰度值,灯会导致摄像头反馈的那部分值偏高。

第二步:

获取到灯图像之后,车要处理这个图像,图像是反馈到屏幕上,那么每一个点都会有一个灰度值,车主要就是从这个上面获取信息从而判断下一部动作,ok贴代码。

 for(int i=1;i<MT9V03X_H;i++){//循环遍历图像for(int j=1;j<MT9V03X_W;j++){colornum=mt9v03x_image[i][j];//获取图像上灰度值并暂存if(colornum>=190)//如果灰度值超过设定的值,则识别为灯{lcd_drawpoint((j)*156/188,(i)*5/6,63488);//把这块标红(调试上面的值)if(j<MT9V03X_W/2)//把图像按中心轴也就是车正前方这条线分为两部分分别计数{colornum1=colornum1+1;}else if(j>MT9V03X_W/2){colornum2=colornum2+1;}num=num+1;//记录满足条件的点的总数}}}if(num==0){//如果没有满足条件的值,说明前面没灯zz();//自转找灯num=0;colornum1=0;colornum2=0;}else if(num>=1){if((colornum1>colornum2)&&abs(colornum1-colornum2)>5){//如果左边满足条件的值数量多,则说明灯在车正前方偏左方向,这时候就要调控后面两个轮子差速,右边的轮子转快一点,这样车就左拐了color=1;lcd_showfloat(30,7,1,3,2);pwm_duty(ATOM0_CH0_P21_2, 3000);//左pwm_duty(ATOM0_CH1_P21_3, 0);pwm_duty(ATOM1_CH2 P21_4, 0);//右pwm_duty(ATOM1_CH3_P21_5, 4000);}else if((colornum1<colornum2)&&abs(colornum2-colornum1)>5){//同理右拐lcd_showfloat(30,7,2,3,2);pwm_duty(ATOM0_CH0_P21_2, 4000);//左pwm_duty(ATOM0_CH1_P21_3, 0);pwm_duty(ATOM1_CH2_P21_4, 0);//右pwm_duty(ATOM1_CH3_P21_5, 3000);}else if(abs(colornum1-colornum2)<=5&&colornum1!=0&&colornum2!=0){//如果左右一样多则说明在正前方,直线就行,但是一般很难达到这个条件,所以设置一个值就说左右的值数量差在一定范围内,则说明灯在车正前方。lcd_showfloat(30,7,3,3,2);pwm_duty(ATOM0_CH0_P21_2, 4000);//左pwm_duty(ATOM0_CH1_P21_3, 0);pwm_duty(ATOM1_CH2_P21_4, 0);//右pwm_duty(ATOM1_CH3_P21_5, 4000);}num=0;colornum1=0;colornum2=0;}

ok,上面是主体代码,后面还有其他未尝试代码,也就是没有搬到赛场上的代码。

第三步:

车到灯上面后灭掉了灯,下个灯开始闪烁,如果摄像头没有获取到头像,则开始自转,找灯。

重复以上动作。

5.我的想法

好了比赛我们貌似大体就实现这么多,其实还有很多问题

由于我们组充电问题,灭了三个灯的倒数好成绩。(丢人)

想法一(识别灯的问题)

前面说到我们在识别灯这块直接获取图像上所有满足灯亮的条件的点都会被考虑在内,

那么场地如果有干扰的话可能会出问题,那么我找到了一篇博主的文章引用了很多好的想法,我觉得可以加以实现,有些太过深奥,xdm认真研究下:

十六届智能车信标组浅析

想法二(灯闪问题)

由于摄像头每一刻(时间很短)都在获取图像,灯闪会导致某一刻摄像头获取的是无灯,所以你要舍掉闪灭时候的图像,所以我在获取图像的函数加了这个:

         if(n%3==0){//当循环的值是三的倍数再获取摄像头的值lcd_displayimage032_zoom(mt9v03x_image[0],188,120,156,100);mt9v03x_finish_flag = 0;if(g==0){yanchiwangqian();g=1;}if(n>100){n=n-100;}n++;}else{if(n>100){n=n-100;}n++;}

当然这个值需要根据很多因素要调的,这个很重要,要么成功获取所有需要图像,要么啥也没有。

想法三(充放电问题)

由于我们组是满电能跑多少是多少的原则,只后我又想了一下,如果我们组ADC,也就是电容电压值获取没有出现意外的话,应该可以实现,就是设置一个电压阈值,车开始充到这个电量多很多时候开始启动,之后灭掉灯时候,如果电量低于这个阈值那么车在灭掉下个灯时候就要停下充电,类似于有个贪心算法的题,汽车加油问题,值也是需要经过测试。

6.总结:

这次比赛让我这个蒟蒻很是难受,看到别的学校获得好成绩,心里也还是很不服气。

但是,也没啥,不知道是不是智能车大佬们都不喜欢写博客比赛前搜了搜往届信标,很少有可以参考的博客。希望入门级的思想可以帮到下届或者下下届同学们,祝大家取得好成绩。加油!

完整代码:

#include "headfile.h"
#include "math.h"#pragma section all "cpu0_dsram"
uint8 test_arry[5];
#pragma section all restore
#pragma section all "cpu0_psram"void delay_tset(void)
{int i;i = 999;while(i--);
}#pragma section all restore
int g=0;
void chongdian(float m){//充电if(m<8.5){pwm_duty(ATOM0_CH0_P21_2, 0);//左pwm_duty(ATOM0_CH1_P21_3, 0);pwm_duty(ATOM1_CH2_P21_4, 0);//右pwm_duty(ATOM1_CH3_P21_5, 0);}else return;
}void yanchi(){//秒while(TRUE){for(int i=1500;i>=0;i--){for(int j=202;j>=0;j--){for(int k=81;k>=0;k--){}}}break;}
}void zz(){lcd_showfloat(30,7,4,3,2);pwm_duty(ATOM0_CH0_P21_2, 0);//左pwm_duty(ATOM0_CH1_P21_3, 2200);pwm_duty(ATOM1_CH2_P21_4, 0);//右pwm_duty(ATOM1_CH3_P21_5, 2200);}int core0_main(void)
{uint16 W=94;uint16 H=60;get_clk();//获取时钟频率  务必保留lcd_init();test_arry[0] = 0;delay_tset();mt9v03x_init();enableInterrupts();adc_init(ADC_1, ADC1_CH5_A21);//ADC初始化gtm_pwm_init(ATOM0_CH0_P21_2, 16000, 0);gtm_pwm_init(ATOM0_CH1_P21_3, 16000, 0);gtm_pwm_init(ATOM1_CH2_P21_4, 16000, 0);gtm_pwm_init(ATOM1_CH3_P21_5, 16000, 0);int color=0;int num=0;int colornum=0;int colornum1=0;int colornum2=0;int n=0;while (TRUE){if(mt9v03x_finish_flag){if(n%3==0){lcd_displayimage032_zoom(mt9v03x_image[0],188,120,156,100);mt9v03x_finish_flag = 0;if(g==0){yanchiwangqian();g=1;}if(n>100){n=n-100;}n++;}else{if(n>100){n=n-100;}n++;}for(int i=1;i<MT9V03X_H;i++){for(int j=1;j<MT9V03X_W;j++){colornum=mt9v03x_image[i][j];if(colornum>=190){lcd_drawpoint((j)*156/188,(i)*5/6,63488);if(j<MT9V03X_W/2){colornum1=colornum1+1;}else if(j>MT9V03X_W/2){colornum2=colornum2+1;}num=num+1;}}}if(num==0){zz();num=0;colornum1=0;colornum2=0;}else if(num>=1){if((colornum1>colornum2)&&abs(colornum1-colornum2)>5){color=1;lcd_showfloat(30,7,1,3,2);pwm_duty(ATOM0_CH0_P21_2, 3000);//左pwm_duty(ATOM0_CH1_P21_3, 0);pwm_duty(ATOM1_CH2_P21_4, 0);//右pwm_duty(ATOM1_CH3_P21_5, 4000);}else if((colornum1<colornum2)&&abs(colornum2-colornum1)>5){lcd_showfloat(30,7,2,3,2);pwm_duty(ATOM0_CH0_P21_2, 4000);//左pwm_duty(ATOM0_CH1_P21_3, 0);pwm_duty(ATOM1_CH2_P21_4, 0);//右pwm_duty(ATOM1_CH3_P21_5, 3000);}else if(abs(colornum1-colornum2)<=5&&colornum1!=0&&colornum2!=0){lcd_showfloat(30,7,3,3,2);pwm_duty(ATOM0_CH0_P21_2, 4000);//左pwm_duty(ATOM0_CH1_P21_3, 0);pwm_duty(ATOM1_CH2_P21_4, 0);//右pwm_duty(ATOM1_CH3_P21_5, 4000);}num=0;colornum1=0;colornum2=0;}}
}
}

第十六届全国大学生智能车竞赛(安徽赛区)信标组蒟蒻的想法相关推荐

  1. 第十六届全国大学生智能车竞赛山东赛区成绩汇总

    简 介: 本文汇集了2021年第十六届全国大学生智能车竞赛山东赛区比赛本科组与专科组比赛成绩. 关键词: 智能车竞赛,山东赛区,2021年 §01 比赛成绩 一.本科组参赛队伍   山东赛区本科组高校 ...

  2. 第十六届全国大学生智能车竞赛广东赛区线上竞赛方案

    简 介: 针对2021年广东省新冠疫情防控要求,针对广东省参加2021年智能车竞赛的高校采用线上比赛的方式.本文给出了线上比赛的实施方案. 关键词: 智能车竞赛,2021年竞赛,广东省线上比赛 §01 ...

  3. 第十六届全国大学生智能汽车竞赛安徽赛区赛事指南

    主办单位:安徽省教育厅 中国自动化学会 承办单位:安徽中医药大学 合肥工业大学 中国 合肥 2021年7月 §01 赛事简介   全国大学生智能汽车竞赛起源于韩国,是韩国汉阳大学汽车控制实验室在飞思卡 ...

  4. 第十六届全国大学生智能车竞赛华南赛区竞赛事宜的通知

    华南赛区竞赛事宜的通知 华南赛区各参赛学校:   为顺利完成第十六届全国大学生智能汽车竞赛华南赛区的组织和竞赛工作,按秘书处要求通知如下: 一.报名   目前各参赛队伍已经完成了分赛区比赛的报名.   ...

  5. 第十六届全国大学生智能车竞赛浙江赛区选拔赛成绩汇总

    简 介: 本文对于第十六届全国大学生智能车浙江赛区比赛成绩进行汇总分析,并对今年四轮组完赛率较低的情况进出初步分析. 关键词: 智能车竞赛,浙江赛区,成绩分析 §01 比赛成绩   第十六届全国大学生 ...

  6. 第十五届全国大学生智能车竞赛安徽赛区比赛报名信息

    ➤ 01普通四轮组 序号 学校名称 队伍名称 带队教师 学生1 学生2 学生3 1 安徽财经大学 追光者 现场确定 李开峰 马天祺 叶凡 2 安徽财经大学 所有题全队 现场确定 张波 孙京 王佳慧 3 ...

  7. 第十六届全国大学生智能车竞赛全国总决赛线上比赛规范

    简 介: 本文给出了第十六届全国大学生智能车竞赛全国总决赛线上比赛要求. 关键词: 智能车竞赛,全国总决赛,线上比赛 §01 线上比赛 一.背景介绍   全国大学生智能车第十六届竞赛在2021年暑期展 ...

  8. 第十六届全国大学生智能车竞赛线上全国总决赛裁判手册

    简 介: 2021年全国大学生智能车竞赛全国总决赛采用线上比赛的形式.本文给出了线上比赛裁判用于控制比赛流程与判罚与得分标准. 关键词: 智能车竞赛,裁判 §01 分工和职责   在进行线上比赛过程, ...

  9. 第十六届全国大学生智能车竞赛全国总决赛名单-公示版

    简 介: 本文给出了参加第十六届全国大学生智能车竞赛竞赛全国总决赛队伍名单产生办法与进入总决赛的队伍名单.此外,还有部分专项创新奖项名单以及三个创意组决赛名单将另行公告.第十六届智能车全国总决赛将采用 ...

  10. 第十六届全国大学智能车竞赛华南赛区成绩汇总

    简 介: 第十六届全国大学生智能车竞赛华南赛区(不包括广东省)在桂林电子科技大学举行,各组别成绩以及奖项内容在本文中给出. 关键词: 智能车竞赛,华南赛区 §01 各组成绩 一.基础四轮组 学校 队伍 ...

最新文章

  1. c语言黑白棋运行结果,黑白棋c语言代码
  2. js中的数组对象排序(方法sort()详细介绍)
  3. C语言课后习题(22)
  4. (132)FPGA面试题-Verilog实现格雷码转二进制
  5. 显示器接口_显示器带全能Type-C接口用起来有多爽?
  6. [VNC] 远程连接 Xfce4 桌面 tab 键不能自动补全
  7. Linux系统性能相关知识学习
  8. LeetCode 357. 计算各个位数不同的数字个数(动态规划)
  9. gentry同态加密算法_IBM同态加密技术重大突破,加解密速度可提升75倍
  10. 如何正确使用开源项目?
  11. JAVA CLASS混淆工具:RetroGuard(已无法下载)
  12. axure sketch 对比_Sketch 画原型比 Axure 好用吗?为什么
  13. 一看就会的ios配置证书及描述文件
  14. 计算机无法打开注册表,Win7注册表编辑器打不开怎么办?注册表编辑器无法打开的解决方法...
  15. java基础代码练习
  16. SpringBoot使用easyexcel打印数据
  17. Kubernetes 之 二进制安装(二) 证书详解
  18. 系统集成项目需求调研日志
  19. 小案例---淘宝轮播图实现
  20. 一文学会注解的正确使用姿势

热门文章

  1. HDU_最大报销额(DP)
  2. mysql slap_mysqlslap 压测工具使用说明
  3. Qt linguist
  4. 【资料】wod地城掉落
  5. AI, AL,我们的未来将驶向何方
  6. java版本的escape和unescape函数
  7. INIC6081(通用PS3111 马甲/固态硬盘)固态U盘 开卡试玩及避坑
  8. BDD100K数据集简单解析以及格式转换成voc格式
  9. 怎样消除公司的信息孤岛
  10. Nginx配置网站适配PC和手机