这篇文章主要讲信标灯识别。

提及这个,不得不说那坑爹的神眼摄像头,明明用的是同样的例程,在俱乐部其他人的板子上就能够显示图像,在自己的板子上就是不能,搞来搞去只有NG(表示无法读取摄像头)在OLED上显示。
一怒之下改例程,从基本通信方式看起,到它的行中断,场中断,终于,在删删改改一番我自己也不知道的地方后这摄像头终于显露出图像来了。然而拿这程序到其他人的板子上后
他们的摄像头图像显示不出来了…

咳!言归正传,有关信标灯识别这东西由于俱乐部前辈们并没有留下经验,一切只能够从头开始,于是乎,我发奋图强,利用高超的数学功底模仿大津法动态阈值写出了动态图像处理函数。然后很快发现由于复杂度太高车子卡的一帧一帧的。再然后就没有然后了…

之前我考虑的方案一直是如何从周围的杂光中把信标灯的光找出来,后来才发现大道至简,与其考虑这么多,不如直接下场看看信标灯在摄像头下到底是什么样子的,结果惊奇的发现在OLED上(我们把摄像头采集得到的图像放在OLED上显示)居然只有一个米粒大小一闪一闪的光点,压根不需要什么处理,滤波函数,经过仔细推衍,层层研究终于发现这是由于在摄像头上加上了滤镜,所以就把非红外线以外的光全部滤掉了,管它什么白炽灯光,墙面反射,我只认信标灯的红外光。但这是夜晚!这是夜晚!这是夜晚!重要的事情说三遍,因为白天这车就跪了!
之后的事情就简单了,从摄像头里采集得到的是灰度图像,经过一番例程处理函数的大津法动态阈值处理后二值化,成为一个64行128列的二维数组,你喜欢也可以叫矩阵,我一般把行数看作纵坐标,列数看作横坐标。我的方案是找到所有非0的点,其实也就是为1的点,取它们对应坐标的平均值作为对应灯光的坐标值,一般来讲这个值是对应信标灯的坐标。
经过测验,纵坐标值意义不大,因为我们把车子从远处一直推到信标灯近处,图像从一个小点变成一个大圆,它的y值没什么明显变化,毕竟从图像读取实际位置本就不怎么靠谱。
而它的横坐标值则就有大用了,虽然不能够正确表示与车子的横向距离偏差,却能够表示出信标灯中心点与车摄像头中心点之间的角度偏差。
而车子走什么路径能够最快到达信标灯,当然是直线了。于是就需要通过它的横坐标进行控制使得车子正对着信标灯以直线向它跑去。

还记得第一篇文章里讲的速度合成吗

好吧,还是上一幅图

这里只考虑y方向或者说前进方向速度,并在前进中通过车身角速度w来调控车的角度使之对准信标灯,好比你开车要到左上方一个点,一方面你要踩油门,另一方面要打方向盘,当然麦克纳姆轮是靠差速调控需要转换一下。

//注意!这里的代码只做示范,不符合任何语言规则,当伪代码看看就好了//预先定义比例值,调节角度应该没谁会用积分量
kp = 4;
......
//通过摄像头图像获取信标灯光点坐标与中线(中线当然是在中间位置x = 64处喽)差值deltax = -20;//得到插值,即说明灯在左边,x小于中线当然在左//这里就用封装好的函数直接输入给各个电机的pwm值,这里500是直线速度
motor1.setvalue = 500 + kp*deltax;
motor2.setvalue = 500 - kp*deltax;
motor3.setvalue = 500 - kp*deltax;
motor4.setvalue = 500 + kp*deltax;
//直线分量与对应的角速度分量直接相加,就是速度合成了
//这里具体的正负号要根据你的轮子顺序来选取,这里我选的是以左上角为motor1,然后顺时针往上加

这样就基本实现往灯跑的能力,然而前提是,你必须要在看到灯的情况才能按程序跑。

那,要是看不到灯呢?

这里,当然要再加一部分程序了,当看不到灯时原地旋转,转个一圈肯定能到灯的正面,这时候,就可以开车了。

大体框架是这样,但细节性的东西还有许多问题,这将在第四篇文章里讲道。

十四届全国大学生“恩智浦”杯智能汽车竞赛信标组总结(3)相关推荐

  1. 十四届全国大学生“恩智浦”杯智能汽车竞赛信标组总结(2)

    因为一些事情耽搁了几天,如今总算空出时间续写了.第一篇主要讲运动学分析,接下来讲PID控制与调速. 有关PID的形象描述有很多,最多的就是那个万恶的利用水龙头控制水箱水量,很容易理解,公式也很简单,而 ...

  2. 十四届全国大学生“恩智浦”杯智能汽车竞赛信标组总结(4)

    通过前三篇文章,车子程序的大体框架已经建立起来了.但做车嘛总是会有各种各样的问题. 首当其冲的当然就是信标灯的闪烁问题,按照第三篇文章的思路在看不到灯的时候原地旋转直到看到灯,再按照速度合成将前行速度 ...

  3. 恩智浦智能车大赛2020_我校AI电磁车队荣获2020年全国大学生“恩智浦”杯智能汽车竞赛全国一等奖...

    日前,第十五届"恩智浦"全国大学生智能汽车竞赛线下全国总决赛在南京信息工程大学落幕.我校工程实训中心智能车工作室天职师大AI电磁车队在毛福新老师的指导下,精心准备,沉着应战,一路过 ...

  4. 第十四届全国大学生智能车竞赛竞赛技术报告下载链接

    第十四届智能车竞赛技术报告下载链接 01 下载报告   今天上午,看到有同学询问关于十四届智能车竞赛技术报告下载的询问. 实际上,之前第十四届的技术报告在百度上有, 只是没有能够提供下载链接. 由于第 ...

  5. 第十五届全国大学生智能汽车竞赛 信标组亮灯顺序和次数

    第十五届全国大学生智能汽车竞赛 信标组亮灯顺序和次数 信标位置以及在控制总线上的顺序如下图所示: 比赛亮灯次数和顺序如下图所示:

  6. 2022年第十四届全国大学生数学竞赛

    11.12非延迟地区开赛啦,小编为大家整理了2022年第十四届全国大学生数学竞赛真题加标答 希望帮到大 家   大学竞赛君自做答案90+,延迟地区的小伙伴也可以辅导

  7. 第十四届全国大学生数学竞赛河南赛区(非数学类)决赛试题+参考解答发布

    第十四届全国大学生数学竞赛河南赛区(非数学类)决赛试题+参考解答发布! 竞 赛 试 题: 仅供无偿分享提供给广大学子学习,如有侵权,请联系客服删除! 参 考 答 案: 对于基础薄弱的同学,我们也可以多 ...

  8. 第十四届全国大学生数学竞赛的通知

    竞赛信息    可以辅导,无需基础 各省.市.自治区数学会.军队院校数学教学联席会: 为了激励大学生学习数学的兴趣,培养他们分析问题.解决问题的能力,提升我国高等学校人才培养质量,促进高等学校数学课程 ...

  9. 比赛——第十四届全国大学生软件创新大赛 “基于端云结合的人工智能软件创新”

    示 范 性 软 件 学 院 联 盟 关于举办第十四届全国大学生软件创新大赛 "基于端云结合的人工智能软件创新" 参赛通知 为了进一步提升大学生创新思维,全面推动软件行业发展,促进软 ...

  10. 十四届全国大学生数学竞赛

    加油啊,没有延期的地区在本月12号就要开始十四届数学竞赛了,小编为大家整理了一下十三届的题目提供给各位,希望大家加油.同时了,我们也会辅导十四届的先伙伴,可以联系,无需基础.

最新文章

  1. 【深度学习】解析深度学习的集成方法
  2. (转) 设置sqlplus中的退格键
  3. 深入解析阿里 PouchContainer 如何实现容器原地升级
  4. 五十五、uniapp简单实现Todo项目(慕课网)
  5. WebAPI(part6)--自定义属性操作
  6. 深入并发包-ConcurrentHashMap
  7. python大学什么专业学校_好学校的差专业和一般大学的好专业,该怎么选?我来说真话……...
  8. ds图—最小生成树_Python实现最小生成树
  9. celery-04-操作b-执行人的一方
  10. 解析 | 如何从频域的角度解释CNN(卷积神经网络)?
  11. 可以分屏的软件_Mac上的分屏功能,让你办公更高效
  12. java catch自定义异常_java异常类-java自定义异常-嗨客网
  13. VC程序中实现控件的动态生成与响应
  14. mysql返回李连杰的姓_李连杰:我爷爷不姓李,说出名字后害怕你们没胆量播出去...
  15. java 逃逸_Java 逃逸分析
  16. 合唱队形(c++DP)
  17. 学的java,想问问现在想做电商的项目怎末样?
  18. 干货《周志华机器学习详细公式推导版》发布,南瓜书pumpkin-book
  19. 大漠穷秋:如何快速构建一款SCRM小程序?
  20. pycharm远程连接服务器,同步代码,使用GPU

热门文章

  1. 解决Mac谷歌浏览器问题
  2. qt osg 多点触摸
  3. 银行业务系统数据库设计与实现
  4. Rasa 3.x 学习系列-Rasa 3.1+ ElasticSearch 8.2.0 对话机器人实战六
  5. 计算机类专业学习难度排行,大学最难学的十大专业排名
  6. 2022-2028年全球与中国粮食种植行业市场深度调研及投资预测分析
  7. 5G网络下,怎么打电话?
  8. php关闭notice_php的notice怎么关闭
  9. Spring cloud oauth2搭建OAuth2.0授权服务
  10. 要干翻苹果的魅族,到底输在哪里?