热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

智能车信标组控制策略_2018第十三届智能车创意组步步为营记录

2018年8月,我参与了第十三届全国大学生智能车竞赛。说是比赛,其实更像是一个完整的工程。规则是2018年3月底出来的,要求我们做出一个无
321a7b16bcad49b5d3b6b0ae6d8fab4b.png

2018年8月,我参与了第十三届全国大学生智能车竞赛。

说是比赛,其实更像是一个完整的工程。规则是2018年3月底出来的,要求我们做出一个无人智能搬运小车,能独立的在4m*4m的共64个方格的大棋盘上,搬运八个随机摆放的棋子使其满足八皇后条件。满足八皇后条件就是在64个格子的棋盘上,每个棋子所在的行和列还有斜线方向上没有棋子。

我们当时花半个月的时间在讨论理论方案,即用什么样的算法规划路径才能让车子走最少的路完成任务。当时我们正向思考,就在想怎么才能把八个棋子摆成八皇后的位置,但算法过于复杂,代码实现十分困难。但后来逆向思考,我们把满足八皇后条件的解先算出来,共92种解。我们就把这92种解一一的与当前随机拜访的棋子计算总距离,也就是让所有棋子和它的目标位置的距离总和最小。这个算出来之后理论部分的路径规划就完成了。期间还有一些别的方案,逻辑简单,但总路程更长。

算法实现到工程上,又是另一个问题。首先是载体,即车子。上面的算法算出来的是直线距离,我们一般了解到的实际中的车子是需要转弯的。最终我们了解到了麦克纳姆轮,全向轮移动平台,它的轮毂是斜着的,可以360度无死角运动,不需要转弯。之后是识别问题,要让车子按照规划的路径跑,这时首先要解决的问题就是车子如何知道自己在哪。棋盘格子上是有数字的,一共64个数字,我们的第一个方案是识别格子中的数字然后计算车体离数字中心的距离,但这样要识别好多数字,还要考虑数字会不会被摆放的棋子盖住,如果视野中没有数字该怎么办。最终我们决定让车子以棋盘格子的线条为参照物,移动方向与视野中的线条数目达成对应关系,视野中始终有足够数目的线条,然后计算车子视野中线条与中心的距离,从而算出车子当前处于哪个区域的哪个具体位置。最后要解决的问题就是检测线条了,用的霍夫变换,问题就这样被一步步分解、解决。但写完程序之后又出现了一些意想不到的难题:摄像头反光,某些区域啥都看不见,全是白光。最后组委会觉得比赛对于本科生来说太难了,就去掉了反光元素。我们车子的摄像头视角比较大,所以反光造成的影响不是特别大,虽然某些区域还是会反光。

最终我们用23s的时间完成了任务,获得了国家二等奖。不足的地方就是交互做的太差了,还有反光问题。汽车上的行车记录仪基本上不反光,可能是因为我们的摄像头太差了把。

收获很大,第一次写出完整的工程代码。我最起初特别自信,把程序全写完才去DEBUG,500多行初始代码,没有注释的DEBUG,后来学乖了,就写了注释,把大部分组件封装起来。收获还有队友与合作,真正的体会到了1+1远大于2的效果。当时我们几个队员全都是大二的,大三没有人参加这个组别,因为他们觉得太难了,做不出来,但我们几个人合力把它做出来了。那段时间我们开会交流特别频繁,基本上三天完成一个阶段性任务。上厕所的时间我们都在交流问题。队友也都特别好,就事论事,代码不好就得改,我们用投票原则修改方案,每个人都可以提出自己的方案然后与大家讨论,也相当于开组会了。

真的很怀念当时做比赛的时光,做自己喜欢做的事情,是多么美好的一件事情。



推荐阅读
  • 在Java开发中,使用BASE64编码通常可以直接利用JDK内置的库。然而,在Android平台上,由于安全性和兼容性的考虑,直接引用JDK中的`sun.misc.BASE64Decoder`会导致错误,因此需要引入第三方库来实现相同的功能。 ... [详细]
  • 本文详细介绍了如何使用 PHP 编程语言输出 99 乘法表,包括使用不同的循环结构如 do-while、for 循环等方法,并提供了具体的代码示例。 ... [详细]
  • C语言入门精选教程与书籍推荐
    本文精选了几本适合不同水平学习者的C语言书籍,从基础入门到进阶提高,帮助读者全面掌握C语言的核心知识和技术。 ... [详细]
  • 本文分析了一个基于ASP代码改编的PHP MD5加密函数,指出其存在的问题,并提供了解决方案。通过对比ASP和PHP在处理相同数据时的不同表现,探讨了两种语言在实现MD5算法上的细微差别。 ... [详细]
  • MPC控制算法代码matlab实现,matlab func实现,自编写matlab function实现MPC算法
    MPC工具箱提供的MPC模块不能实现权重参数的实时修改,有必要自己编写一个实现模型预测控制算法的matlabfunction。主义事项求解QP问题的时候使用哪一个 ... [详细]
  • 本文通过探讨React中Context的使用,解决了在多层级组件间传递状态的难题。我们将详细介绍Context的工作原理,并通过实际案例演示其在项目中的具体应用。 ... [详细]
  • 三大Python学习利器网站推荐
    本文将介绍三个在Python学习过程中极为有用的网站,特别是对于初学者而言,这些资源能提供巨大的帮助。 ... [详细]
  • 精通C++并非易事,为何它比其他语言更难掌握?这主要归因于C++的设计理念,即不强迫用户接受特定的编程风格或限制创新思维。本文探讨了如何有效学习C++,并介绍了几本权威的学习资源。 ... [详细]
  • 本文介绍如何在指定的Module中通过配置build.gradle文件来生成自定义名称和路径的JAR文件,适用于Gradle 2.4及以上版本的Android Studio环境。 ... [详细]
  • 第4章-21判断上三角矩阵分析题目解法分析首先归结出判断上三角的函数的条件,定义为一个函数,以函数阶数和矩阵的列表作为参数。这里注意,列表作为参数的定义方法:defshangsan ... [详细]
  • 本文介绍如何在Ubuntu环境下为OpenWrt系统构建并安装首个'Hello World'应用程序的IPK包。文章不仅涵盖了基本的环境搭建,还详细说明了代码编写、Makefile配置及最终的IPK包生成与安装过程。 ... [详细]
  • 本文探讨了STL迭代器的最佳实践,包括iterator与const_iterator、reverse_iterator及其const版本之间的关系,以及如何高效地转换和使用这些迭代器类型。 ... [详细]
  • Git支持通过自定义钩子来扩展其功能,这些钩子根据触发条件的不同,可以分为客户端和服务器端两种类型。客户端钩子通常与本地操作相关联,如提交代码或合并分支;而服务器端钩子则与远程仓库的交互有关。 ... [详细]
  • addcslashes—以C语言风格使用反斜线转义字符串中的字符addslashes—使用反斜线引用字符串bin2hex—函数把包含数据的二进制字符串转换为十六进制值chop—rt ... [详细]
  • 使用Python爬虫技术从网页中提取图片链接的方法与示例
    本篇文章将详细介绍如何通过Python编程语言来实现从指定网页上抓取图片链接的功能,并提供了一个实用的代码示例。 ... [详细]
author-avatar
女院外语系10级商务英语一班
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有