Self-Balancing-Car

这些东西有些是从师兄&学长&师傅说的,其实很多技术的东西都是传承下来的,就是这样一步一步地慢慢推进,才有现在技术深度,想当初,,,还是要感谢我的师傅,我的Team,还有“老队员”,啊西巴,不能矫情,开始^_^

1,我个人感觉,一定有要早点让车跑起来,车跑起来感觉就完全不同了,兴趣也会更多,那时候恨不得天天泡在这里调车。我觉得如果你坐车前期能一直领先,做到后期疲惫的时候也更能坚持到底。

2,一定要把心态放正,避免不了有些人进来的目的是为了得奖加分啊什么的,但是我并不认为以这种功利心态在这的能够走长久,最好是为了兴趣,希望大家都是志同道合相聚到这来,在努力的做自己感兴趣的事情,想一想大学以后这样的机会真的不会多,

3,刚到这的时候不要怕什么都不会,我到这的时候也啥都不会,好多人都是这样的,但是让大家学的那点东西不是天书,用用心的话真的很简单,只要有信心,耐心,决心,没有啥是学不明白的,到中后期决定胜负的不是你会的多少,而是心态,和解决问题的能力。

4,做车的同时一定要安排好自己的时间,不建议为了做车熬夜逃课不按时吃饭,能安排好自己时间才会事半功倍,不要拖拖拉拉,有什么新的想法,就实践尝试尝试,尽量正常作息,保护好自己的身体,身体是革命的本钱!! 这句话越到后期越有深刻的体会因为后期忙起来熬一些夜都是避免不了的,那时候如果你能常常精力充沛,就很有优势,所以建议安排一些锻炼身体的时间,这样就算你不是为了做车,对你自己也是有益处的。

5,心态,尽量让自己的心态平和,遇到问题不要急躁,冷静思考,一一解决,一一攻破,本来这个过程就是充满各种坑爹、蛋疼的问题的,我们做车的乐趣就在于把美一个遇到的问题尽量完美的解决掉,这就是能力,这就是进步。

6.进行程序的模块化和工程代码的管理,包括备份,代码修改日志记录(如果使用直立框架,代码量大一点的,,有时都会出现忘记修改了哪里的代码把车搞砸了),提高代码的执行速度,合理运用编译指令,解决代码冗余,这样有助于多人合作,推动代码的开发,和错误的排查

7.再出现代码错误是,应该对程序编译错误进行定位,正常情况下鼠标双击错误就会出现错误行,仔细查看错误提示就可以解决问题,若是出现双击无反应,编译文件出现错误(.o文件)则可能是#define变量出现重复,头文件出错比较查找不到文件,则是文件编译相对编译路径出错,需要手动添加相对编译路径,还有一种是链接出错,需要修改配置选项,还有一种是排查算法的逻辑错误,这个要用到IAR的debug的功能和watch功能,用单步调试查看出现错误的地方,和出现数据处理错误的地方。

8.在调PID要学会去观察小车的震动,和小车的行驶路径,比如我把小车速度参数往上调,小车过弯是不是切外车道过去,这时就要注意入弯的时候是从哪里入弯的,出弯的时候是从哪里出弯的,一般调参数的时候只改动一个参数,然后跑一下,观察这个参数在控制小车的那些状态,包括的对行驶路径的影响,是切内弯明显了还是转向力度变大(转向力度不能太大也不能太小,要适度),同时也要注意小车硬件的的机械结构稳定,当速度快一点小车的共振现象会明显,原因是硬件和软件都会加大共振,还有螺丝松紧,齿轮咬和,跑动时候的声音,轮胎的松软和粘度,小车跑出赛道的特征。

9.算法的开发与想法的验证,有时间可以通过MATLAB或者是labview进行代码验证与算法开,在平常调试的时候要学会通过上位机来验证数据的准确,和查看小车pid的图形,并着在小车运行很好的时候采集数据,为后面做小车代码开发做支持。可以把ccd的数据保存下来,在matlab中尝试新的方案。

10.前期基本软硬件知识都要学,然后找好队友!!切记找好队友,这是最重要的一环,这一环也基本上就决定了你最终的成绩吧。团队之间。还是那句话,沟通。在实验室的时候一个组的队员所有人都应该在。。。

11.注重团队合作,在团队合作中,组员间如果有一些新的想法,一定要先自己思考过,初步验证可行性。

12.所谓“参与项目”,并不一定是参与开发,任何跟项目有关的,包括代码打包,维护,或者写文档,甚至单方面的宣传,都可以说是参与吧。 所以每个人都是主力哦

下面两个想法我希望大家在中期或后期看,因为前期可能用不上或者体会不到。有的想法也是上上届的师兄和我说的,我觉得很有道理,对我调车也很有帮助,所以我你希望对你们有所帮助

我对调车的想法: 稳定!车不稳不提速,车都是由慢到快,一点一点调的,我的建议就是,要是你的车现在让它在赛道上跑了10圈,有一次跑出了赛道,那我建议你不要提速度,直到你能调的在这个速度下跑20圈都不出赛道的时候再提加速,车跑不稳,别谈速度,我对车整体程序的慨括:可以把程序分成两部分,一部分是循迹,一部分是控制,而我举得循迹算法是跑好的前提,我打个比喻车就像一个人,让它走路,循迹部分就是眼睛看到,控制就是走,如果这个人是个瞎子或者眼神不好,走路不撞墙才怪啊。如果把车看出一个系统,那么循迹部分是一个系统的输入,我觉得你应该把调车的重心放到这里,控制都是很简单的,而保证车看到的赛道信息是准确无误是复制的困难的,这是需要硬件和程序共同协调的,比如摄像头,一定把它的角度调好,如果太高,摄像头都看天上去了,那能跑好才怪,如果太低,就行一个人低头走路,前边来颗数来不及躲就撞上了,而具体调到什么角度,那是需要尝试的,再说循迹的算法,你必须在摄像头固定到现在的角度下,写一个程序,你的算法应该保证不论把车放在赛道里任何什么地方他都可以拐一个角度使车是沿着赛道里走的而不会走到外边去。如果你发现在某些弯道中,本来是左弯,但是车又转,这就是你程序的bug,应该把这些细小的错误一个一个地修正,直到你的车能稳定的跑在赛道上。我觉得包括在中期后期,就是在调控制部分的时候,也应该捎带着调循迹部分,因为可能会有好多小bug,什么时候遇到就什么时候把它们消灭。