最新日志

发表于:2008-9-4 21:10:36
标签:连续路径识别  实现方法  

2

连续路径识别的实现方法


                 连续路径识别的实现方法

     对于电光组来说,横向的路径检测精度是比较低的。我们有必要想方设法提高其检测精度。现对常用的连续路径识别方法做一说明:

     普通的数字量只有10,当我们用数字量进行检测时,其出现的组合是比较少的。假如有14个传感器,25cm宽的传感阵列。假如最多同时有2个检测到路径,那么可能出现的组合有27种,精度是250/27=9.259mm。这时,我们很容易就能发现转向时的阶梯现象,那个死区是很容易看出来的。这就导致的转向的不灵敏。

现 在我们把一个传感器的输出当作模拟量。其实传感器的感应区应该是一个圆盘,半径越小,返回的有效值应该越大。这样就可以用返回的有效值的大小来确定道路与 传感器的距离。应该指出,现在的距离是个绝对值,我们没法确定是正的还是负的(一个有效值实际上对应着两个实际距离)。那么,我们就必须借助于别的传感 器。找到次有效值最大的传感器,比较它们的位置关系,这样就可以确定其正负了。为了保险,在运用时通常是找出最大有效和次最大有效,求两个距离,再求平 均。

理论上说,我们有必要测出每个传感器的特性曲线,以便进行有效值与距离的转换。但我用的时候,只是大概测了一下,然后用理想的感触三角模型处理,效果基本可以。

现在我们算一下用这种方法达到的精度。设14个传感器,25cm宽,两两之间的交叉方式如下所示:

点击看大图

我用数字量时对每个传感器进行了编号,以便于线性化处理。编号分别为:-13-11-9-75-3-1135791113。很明显,当两个同时有效时取两个的平均,共27级。精度是9.259mm

当使用模拟量时,理论上是无级的,是平滑的。但为了计算方便,我们把它也分为若干级。简单的做法是这样的,把上面的编号扩大N倍,如10倍。这时,它的级数就是270级,精度为0.9259mm。这个精度是可以达到的。我没有测,因为我的模型就不是精确的,测的数据没有参考价值。但是,通过这样处理得到的效果是很明显的,小车的转向基本上没有了阶梯,是很平滑的。

实际应用时,有必要测一下其特性,以便选取合适的数学模型,使结果更精确,有效。要尽量选取特性好且特性一致的传感器,以便于处理。

编程时要注意尽量避免浮点运算,多用整形,提高处理速度。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(0) | 阅读(30)
发表于:2008-9-2 19:03:27
标签:“飞思卡尔”杯  智能汽车竞赛  总结  

3

关于“飞思卡尔”杯智能汽车竞赛的总结

关于“飞思卡尔”杯智能汽车竞赛的总结

                                                                                                   080901

大三上学期报名参加了“飞思卡尔”杯智能汽车竞赛,从三月份开始,到七月底结束,历时五个月。五个月来,用了不少的课余时间和精力,慢慢地掌握了HC12的基本开发方法,和队友们一起,克服了大量的困难,解决了许多突发的问题,成功地制成了比赛用车,参加了比赛,也取得了一定的成绩。成绩不理想,但也来之不易,更重要的是在制作的过程中学到了许多东西,从制作本身,从队友身上,老师身上。同时也进一步地了解到了自身的不足和缺点,这对于我的成长来说应该是至关重要的。现将制作过程中遇到的问题、相应的解决办法,以及一些需要注意的事项总结如下:

一、概述

成绩的好坏完全是由速度来决定的,所以我们制作的重点应该是很清晰的——尽可能地提高速度。由日常的生活经验我们知道,要想速度快,就应该有好的加、减速性能,这是根本,如果能做到这一点,我们就能保证以比较快的速度跑完任意形状的赛道。但如果只是加、减速比较快,我们也就只是能完成比赛,不大可能取得好成绩。这就要求我们要在另一方面下大工夫——提高转向性能。这应该是制作的重点。

二、车模部分

车模的结构参数对整体性能的影响是不容忽视的。好的物理特性可以让我们事半功倍。这部分内容我不是很了解,也没有对车模本身做过多的改动。一是当时没有想到,二是有条件调的时候基本上没有时间去调整了。需要说明的一点,物理上的结构参数与程序的控制是相关的,我觉得不应该抱有先写好程序,再调车模的想法。我们应该是先用一个简单的程序来调整车模,使其有最优的物理上的加减速性能和转向性能,然后再寻求软件控制的最优。这样的话,我们就可以最大限度的提高其整体性能。

三、主电路部分

主电路不是我做的,但是我基本上参与了电路制作的整个环节,从简单的万用板试车到最后板子的改动。这部分给我印象比较深的有以下几点:

1、  基本上不用考虑功耗问题。比赛时可以换电池,一圈也就几十秒,只要瞬时功率不是太大,根本就不用考虑这方面的问题。但是,如果功耗太大,在调试阶段会比较麻烦,除非有三到四块的替换电池。

2、  电源的稳定性是需要注意的。比赛时可能不重要(用的都是新充的电池,电压较高),但在调试时比较棘手,加速时会有一个大的电流,导致电池电压下降较多,很容易引起单片机复位。这个问题应该解决的,但也不是必需的。

3、  重量、重心问题。肯定的,重量越轻真好,重心越低越好。问题是怎样减轻重量,降低重心。

A:精简电路,没必要的东西不要往上面做。

B:可能的话,自己做最小系统。

C:应该照底盘做PCB,降低重心,并且整个板子应该尽量向后移动,以提高转向性能。

4、  多用贴片,以减轻重量,减小板子体积。但对于易坏的,发热严重的器件,应该注意其更换的方便性及散热性。

四、速度传感器部分

速度传感器用于构成速度闭环,以提高速度的可控制性。虽然说速度控制在物理上不可避免的存在滞后(电压大了,但速度要过一会才能提上去),但是我们追求的还是高的速度分辨率,以及高的时实性。因为只有这样,才有可能在细节上有所突破。所以,有许多队采用了现成的速度传感模块。我们采用的是自制的光电盘,精度在0.02m/s左右,但实时性太差,难以使控制更加的平滑。现就速度传感模块和光电盘对比如下:

1、  速度传感模块:

优点:高分辨率,高实时性,高稳定性,高可靠性。

缺点:成本高一点,不可避免地增加了一些重量和功率。

2、  光电盘:

优点:简单,成本低,基本可靠,质量轻

缺点:不易精确制作,分辨率较低,实时性不突出,抗干扰能力稍差。

五、路径传感器部分

此部分是控制算法的基础,其排布方式决定了控制的策略,也决定了控制的最大有效性。总体来说,传感器的排布有以下几种:

1、  传统的“一”字型排布。此排布方案最大的优点是数据容易处理,程序易于编写,对起跑线也比较容易识别。但很明显,这种排布方式没有达到最优,它不可能使控制策略达到最优。

2、  “八”字型排布。这种排布方式,从理论上来说就会有比较好的转弯性能,不易迷失。但对起跑线的识别不容易处理。

3、  双排布局。就这一届比赛来说,基本上没有传统意义上的双排布局。普遍采用的是前瞻+“一”字型布局。后排的“一”字型传感器用于识别起跑线和精确定位,而前瞻则是尽可能地提高探测距离,为转向赢得时间,从而大大地提高入弯速度,提高平均速度。前瞻这部分,将在后文详述。

4、  这次比赛,又出现了矩阵式的布局。矩阵式的布局,就等于像素很低的摄像头。优点是数据比摄像头容易处理,又比其它排布方式一次性得到的信息多(主要是纵向上)。我觉得,其关键是所用传感器的前瞻性,如果前瞻性好,那么这种排布方式的优点是很明显的。

另外,传感器的选型很重要,那是智能车的“眼睛”。千万不要怕花钱,在传感器上花钱是很值得的。传感器的电路最好做成板子,硬度好,一致性好,信号的质量也会好很多。还有一点就是一定要做一个备用的板子,以免出现都不希望看到的情况。

 

六、程序设计部分

程序的设计必须与车模参数相配合,必须与传感器的排布方式相配合,这是最基本的要求。其次,要注意用程序去弥补硬件上的不足。比如说,用程序实现路径的连续检测等。必须要注意的是,要绝对保证程序的稳定性和适应性,避免调整硬件去适应软件。

软件的设计,是小车性能的重要因素,也是整个制作过程中最麻烦的地方。我们不可避免的要多次修改程序,这就要求我们要有好的编程习惯,要做一些文档记录。另外,当修改过多时,我们就应该考虑重新写程序了。

模块化设计思想应该运用一下,把基本的硬件操作写好,以后就不用写了,只用包含文件就行了,比较方便。其它的就只用写高层的控制文件了,要改的话也只用改它们。

最后要说的是,程序的设计必须注意操作上的便利性。上海大学给我们的教训应该是很深刻的。

  七、赛前试车部分

赛前的试车是我们发现问题的最后机会,抓住这次调试机会是很重要的。试车时的调试与在学校时的不同,这时,我们应该尽量避免大的改动,除非是真的没办法了,或者你的信心比较足。

试车时主要关注的,应该是光线、材料、赛道制作的精细度。光线问题很重要的,如果传感器被干扰了,那就什么都没有了。材料问题主要是指小车过弯的能力,找那些急弯试试。赛道制作的精细度指赛道接缝的处理,如果接缝比较宽,或者什么别的问题,那就很容易识别错误。

最后,我们设定的参数要比试车时低一点,速度要慢一些,因为试车的赛道是比较短的,速度不会充分加上去,但正式比赛时就不一样了。这点要注意。

 八、赛时注意事项

     这时最重要的是心态要稳,不要慌,有了这一点,其它的就不用说了。

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 原创

评论(0) | 阅读(41)
发表于:2008-7-2 20:08:57
标签:考完了  

1

考试完了,大学也要完了

考试考完了,大三下的考试。。。
大四还有四门课,很简单。到此,大学也就基本上上完了。心里有种说不出来的感觉,觉得很快,时间过的真快。
现在不打算考研,要准备点什么了,好好在自己的兴趣上发展发展,电子、单片机、英语。好好努力啊!

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 原创

评论(0) | 阅读(67)
发表于:2008-6-16 0:42:47
标签:51  用_at_定义  

1

用_at_绝对寻址

用_at_定义后一直不能用,找了好些资料,一直没有答案。我可是把原句弄上去的啊!现在也没想清楚是为什么,再想!

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(0) | 阅读(114)
发表于:2008-6-16 0:38:48
标签:“飞思卡尔”杯  全国大学生智能汽车竞赛  

2

关于“飞思卡尔”杯全国大学生智能汽车竞赛的小结

上学期放假的时候,报名参加了“飞思卡尔”杯全国大学生智能汽车竞赛。当时的情形,那真的是热血沸腾啊!学校的电子类比赛本来就少,又基本上不参加全国的比赛,这次还是第一次。
过完年就赶紧来了,按老师的要求,提前一周。但来了一周,玩了一周,没有一个老师来辅导,也没有任何关于比赛的指示。
开学后,就开始了准备工作,第一件是翻译资料,分头翻译。忙了一个多星期,十几个人,良莠不齐的,翻译的东西很难传着看。然后我就上网查了一下,有现成的,翻译的教程,就买了一本,回来后复印了十几本。这才不用再去费那事了。
接下来,老师让学习这个单片机怎么用的,要求是会用每个功能模块,给了一个最小系统,上面带了八个LED,在B口上接着。就这么着,学PWM,AD,SCI,IO口控制,有一个月左右吧,时间全耗上面了,刚开始接触这种机子,还没学51,进展缓慢。每个组都有研究生的(现在的感觉是有没有都一个样),但那些个研究生什么也没做,基本上,到目前也是这样。
整个三月,都在研究每个模块的功能和使用方法,同时学习51的内容,基本上把手上的两本资料翻了一遍。也学了不少东西,把编程的平台基本上也搞明白了。
四月,要了一台示波器,开始调PWM。说到PWM我就气,四月初的时候就写了一个简单的流水灯程序,用定时中断实现的。老师看了说,好,不错。然后问下一步做什么,我说写PWM的,就问他要示波器。他说,用不着示波器,把PWM波再从B口(外面有LED)输出来就行了,原理是能改变其亮度。我一听就晕了.......后来还是要了一台,不容易啊
到这个时候,原本十几人的队伍只剩下几个人了,都没积极性了,这是个大问题,下面在详述。
终于,终于见到车模了。等死我们了呀!本来见不到的,多亏了比赛前的交流会,老师们才急了,把车模给了我们,问题是只有一个车模,电机,舵机。我又犯难了,这怎么办呢?还好,翻了一遍实验室,终于发现了一台用了不知道多少年的直流稳压电源。就这样,演练了PWM控制舵机,进一步的有了车的转向,老师们也都挺高兴的。
接下来我们就要传感器,N次后,有了一个现成的,八个管子,一字型,中间间距3cm,其它1.5cm。这时与一个老师也熟了一点,他直接给了我们一块33886,驱动用的。就这样,在四月底的时候,我们几个让第一代车动了起来,在1.25cm的引导线上,速度在1m/s左右。赛道是用胶带做的,直接粘在地板上了。15m左右,有S型,180,十字,弯太多了,现在想想。
就这样,五一前开了次会,布置五一的工作,我们也提了许多要的东西,答复是五一买。四天的假(一天没课),什么也没买回来,我们用两天的时间测了舵机的性能参数,包括车模的转弯极限。用MATLAB做了些数据处理,画了些图。那两天没做什么,看专业了,想看看老师什么时候把东西买回来。
这一等,就是一个月啊,整整一个五月,基本上没什么进展。最后又要块万用板,把电路重搭了一下,主要是驱动,电源,接口。电源用的是7805啊,电池才7.2V,晕......
在下面,我们也只有做仿真了,说起仿真,那可有的说了,下次了,要睡了,唉!

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 原创

评论(2) | 阅读(118)
发表于:2008-6-9 14:31:02
标签:总结,电子学习  

1

这几天的心得

    原先一直认为LCD是比较难的东西,昨天忙了一下午,竟然搞好了,看来以后做什么都不能把它想的太难了,要有勇气去做才成。
    总结一下这几天的东西:学了164的用法,LCD,0832,串口,整体上想想,其实都不难,只要按照时序去做,一般都没什么问题。这些都是比较简单的,难的是怎样组织程序。
    功能好实现,但要实现的好那就不简单了。我们应该对每个程序都想好,留什么接口是最好的,这是很关键的。下面底层的东西弄好了,我们就可以事半功倍,否则就反过来了。
    还有数据结构,以前还不觉得怎么样,现在看来,它的作用是太大了。一个好的数据结构,可以省去好多麻烦,简化很多操作。在以后的学习中,应该好好注重这一方面。
    要考试了,好好复习吧。。。

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 原创

评论(0) | 阅读(122)
发表于:2008-6-5 0:17:27
标签:51,keil,c  

4

关于Keil 51的绝对寻圵

一直不明白怎么用C进行外部总线操作,问了老师,他竟然说用程序去实现总线操作的时序!吓了我一跳。
还好,今天晚上就找到了答案,这还要多谢互联网啊!当然也要谢谢那些把自己的心得写出来的仁兄了!
总的说来,有三种方式:
a:直接定义直接地圵的指针。
   eg:aaa=*((volatile int xdata *) 0x000a);//从0x000a起定义了一个INT型变   量,当然,它是在外部数据区定义的。其中volatile用来说明这个变量是会随时间变的,用之前必须读一次数值。这样做的原因是为了防止编译器优化时出问题。举个例子:XWORD[0x0001]=0x01;XWORD[0x0002]=0x02;这两句编译出来是什么样子的呢?有点多,只写重点了。(XWORD在下面说)
                      mov dptr,#0002h
                      mov a,#00h
                      movx @dptr,a
                      inc dptr
                      mov a,#01h
                      movx @dptr,a
                      inc dptr
                      mov a,#00h
                      movx @dptr,a
                      inc dptr
                      mov a,#02h
                      movx @dptr,a
看出来了吧,第二次并没有往DPTR里写0002H。这也行,但是如果把DPTR换成IO口,那就不行了吧。所以,要加上volatile!
b:通过加入absacc.h。定义方式如上:XWORD[0x0001]=0x01。别的不说了,自己找下吧,里面都很清楚的。对了,要说一下都有什么类型的:XBYTE,PBYTE,CBYTE,DBYTE,XWORD,PWORD,CWORD,DWORD.
c:用_at_定义。
  这个还没弄清楚,总是通不过编译,会了再补充吧。
睡觉了!
再加个链接吧,这个很有用:http://www.guangdongdz.com.cn/special_column/techarticle/20065/610111432244.html

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(2) | 阅读(275)
总共 , 当前 /