智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5812|回复: 4
打印 上一主题 下一主题

智能循迹小车硬件设计及路径识别算法

[复制链接]

1

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
127
威望
154
贡献
63
兑换币
0
注册时间
2011-10-4
在线时间
0 小时
跳转到指定楼层
1#
发表于 2011-10-4 11:26:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
智能循迹小车硬件设计及路径识别算法
        摘要:设计用于全国大学生智能汽车竞赛用的循迹小车,摄像头采集黑线引导线的位置,直流电动机驱动小车后轮,舵机作为转向驱动。根据实际应用环境,提出用于循迹的图像处理方法,以排除黑线引导线以外物体的干扰,同时提出一种适应力强的小车循迹策略。实验表明,在这种控制策略下,小车运行稳定,能够排除各种干扰,并且能够使小车维持很高的速度行驶。关键词:循迹;单片机;图像处理
            全国大学生智能汽车竞赛要求在组委会提供统一智能车竞赛车模、单片机MC9S12DG128开发板、开发软件Code Warrior和在线调试工具的基础上,制作一个能够自主识别路线的智能车,它将在专门设计的跑道上自动识别道路行驶。中心目标是,在不违反大赛规则的情况下以最短时间跑完单圈赛道。    本文主要对车模整体设计思路、硬件与软件设计及车模的装配调试过程作简要的说明。
        1 整体设计    系统按照功能划分为:电源模块、单片机控制系统模块、运行调试模块、路径识别模块、直流电机驱动模块、舵机转向模块、速度测量模块等。图1是小车系统硬件模块图。本文重点介绍路径识别模块、直流电机驱动模块、舵机转向模块、速度测量模块。
       
        1.1 路径识别模块    路面信息检测模块要能够实现检测路径参数。将面阵CMOS用于赛道参数检测的方案,充分利用S12单片机内部硬件资源ATD模块,直接采集CMOS输出的模拟信号,可以获得满足参数检测需要的图像,计算出赛道参数,进而完成路面信息检测。检测路径传感器采用CMOS图像传感器。普通CMOS传感器图像分辨率都在300线之上,远大于光电管阵列。    通过镜头,可以将车模前方很远的道路图像映射到CMOS器件中,从而得到车模前方很大范围内的道路信息。对图像中的道路参数进行检测,不仅可以识别道路的中心位置,同时还可以获得道路的方向、曲率等信息。利用CMOS器件,通过图像信息处理的方式得到道路信息,可以有效控制车模运动,提高路径跟踪精度和车模运行速度。1.2 直流电机驱动模块    为了利用单片机实现对主电机的控制,使用Motorola公司的H桥芯片MC33886。该芯片的供电电压在5~40 V之间,MOSFET管的导通电阻为120 mΩ,控制信号的输入兼容TTL/CMOS电平,PWM的最高频率可达10 kHz,同时具有短路保护功能和故障信号的输出。    MC33886的应用示意图如图2所示。图中,V+是为直流电机供电的电源。IN1和IN2两个逻辑电平输入端分别控制输出端OUT1和OUT2。当IN1输入高电平时,OUT1输出也为高电平——即通过H桥与V+导通;当IN1输入低电平时,OUT1输出也为低电平——即通过H桥与GND导通。IN2和UT2的关系与此相同。FS为故障信号开漏极输出,低电平有效。当D1是高电平或者D2是低电平时,同时禁用OUT1和OUT2的输出,使OUT1和OUT2同时变为高阻态。通过控制IN1和IN2的电平,即可控制电机正转、反转、停转。对IN1和IN2的电平信号进行脉宽调制,即可控制电机的转速。
       
主电机驱动电路采用大赛组委会指定的竞赛用电池直接为MC33886及主电机供电。MC33886的所有输入、输出信号均采用TLP521-4光电耦合芯片隔离,以避免驱动电路对单片机的正常工作造成干扰。为了保证MC33886散热良好,该电路板上依据MC33886数据手册的推荐样式设计了散热敷铜并为MC33886安装了散热片。焊接、装配时,将电路板正面的敷铜与MC33886底部的裸露的散热铜焊盘焊接在一起,可大大增强芯片的散热能力。1.3 舵机转向模块    利用汽车转向机构原理,为了保证小车在转弯过程中,既能快速响应,又防止速度过快冲出跑道,把舵机的位置进行了提升,可以增大力矩,使小车快速响应,按照轨迹进行快速转弯。测量出摄像头能够检测到的黑线位置,并量车距离为b,测量车正中间和黑线的横向距离为a,那么转角的正切就等于b/a,如图3所示。可以使用这个方法,把黑线从视野最左端移动到最右端,分别测量出转角。由于舵机连杆加长,可发现转角于舵机的PWM值基本是线性的,所以舵机控制采用P控制即可。再考虑到转弯必须有一定的及时性,所以并不采用PID控制。
       
        1.4 速度测量模块    考虑到成本要求,采用了红外对管和黑白码盘作为测速模块的硬件构成。其中码盘为32格的黑白相间圆盘,如图4所示。
       
            红外传感器安装在正对码盘的前方,虽然这样做精度比编码器要低很多,但是成本低廉制作容易,如果智能车速度较快,可以考虑再减少码盘上黑白色条的数量即可。    当圆盘随着齿轮转动时,光电管接收到的反射光强弱交替变化,由此可以得到一系列高低电脉冲。设置MC9S12DG128的ECT模块,同时捕捉光电管输出的电脉冲的上升沿和下降沿。通过累计一定时间内的脉冲数,或者记录相邻脉冲的间隔时间,可以得到和速度等价的参数值。
        2 图像采集及处理2.1 图像采集    常用的摄像头视频输出信号是PAL电视机制式,它的工作原理与电视机的工作原理相似:在一定分辨率下,每秒扫描25帧图像,每帧图像含有625行信息,分为奇、偶场,进行隔行扫描,总共每秒50场信号,每场有312.5行信息,从奇数行开始扫描,即依次扫描第1、3、5、7、9……行,当扫描完奇数场后,再开始扫描偶数场,构成一帧图像。    对图像的采集即是根据摄像头的行信号和场信号对图像模拟量采集。输出信号包括行同步信号,场同步信号,图像时间,以及各种消隐时间。行同步信号代表一行的图像数据扫描开始,场同步信号代表一帧的图像数据扫描开始。要完成图像的正确采集,必须严格遵守时序的要求:当捕捉到一行信号时,开始对该行各点的模拟量进行采集,当下一行信号发生时表明该行采集完毕,需要对下一行的模拟量进行采集。2.2 图像采集的主要硬件设计    摄像头产品说明上通常会给出有效像素和分辨率,分辨率即为每场信号中真正为视频信号的行的数目。但产品说明上通常不会具体介绍视频信号行的持续时间、它们在每场信号中的位置、行消隐脉冲的持续时间等参数,而这些参数又关系到图像采样的有效实现。因此需要设计软、硬件方法实际测量一下这些参数。    经过测量,所采用的CMOS摄像头每秒能够输出25帧图像信号,每帧分为奇场和偶场,每场包含312线,那么,每条线的扫描时间大约为64 μs。    通常,摄像头横向(行方向)的像素数远多于对单行视频信号A/D采样的点数。真正决定赛车图像采样模块实际横向分辨能力的不是摄像头横向的像素数,而是A/D采样单行视频信号的点数。所以,把摄像头旋转了90°使用,把以前的线信号组合起来,变成行信号,所以在一行的赛道信息上最多采集到312个点,这样就可以满足路径识别的需要了。    摄像头使用12 V的电源供电,所以设计了升压电路,如图5所示。
       
         在方案中,使用LM1881视频分离芯片来辅助采样视频。LM1881提取摄像头信号的行同步脉冲、消隐脉冲和场同步脉冲,并将它们转换成数字电平直接输给单片机的I/O口,可以使用S12单片机I/O口的中断功能来接收这些信号。图6为LM1881的电路图。
       
            引脚1为行同步信号输出端,它输出的信号波形只是输入的摄像头信号在黑屏电位之下的波形的简单复制。引脚2为视频信号输入端,摄像头信号即由此输入LM1881。引脚3为场同步信号输出端,当摄像头信号的场同步脉冲到来时,该端将变为低电平,一般维持230μs,然后重新变回高电平。引脚7为场同步信号输出端,当摄像头信号处于奇场时,该端为高电平,当处于偶场时为低电平。奇偶场的交替处与场同步信号的下降沿同步,也就是和场同步脉冲后的上升沿同步。
        3 视频信号的采样和滤波3.1 视频信号的采样    摄像头每场信号包括312行,即每场会扫描产生312行的视频信号。也就是说,摄像头在纵向上有312像素的分辨能力,这对于本智能车定位系统设计所要求的图像传感精度来说远远够用。为方便设计,忽略奇场和偶场在扫描位置上的细微差别,认为奇、偶场的扫描位置相同。当然,在测试中发现,312行信号并不能够全部使用,其两侧信号并不是有效的视频信号,而312个点显然数量巨大且占用太多的计算时间。所以,每隔4行扫描一次,而排除首尾无效的信号点。一共使用了60行作为需要处理的视频信号,显然对于路径检测来说,已经足够了。而在采样过程中发现,如果不对ATD模块进行超频,则很难采集在有效视野中的多行信号。所以,在把单片机总线频率超频到40 MHz的同时,还需要把ATD模块进行超频,这样可以加快其采样速度,能够在同等的时间内获得更多的行视频信号。视频信号采集后,可以使用单行信号对舵机进行P控制,也可以使用多行信号进行大弯道和S弯的判断。3.2 视频信号的滤波    拿一行视频信号为例,采集到的60个数据逐个转换为0和1存储到一个一维数组中,这个数组是一个0和1组成的序列,“1”代表白色,“0”代表黑色。通常,由于各种原因,视频信号里会带有杂波,如果不滤除的话,会对路径的判断带来麻烦。所以,编写了滤波函数对视频信号进行滤波,事实证明,这样的滤波函数在时间上完全满足要求,并且滤波很可靠。滤波函数的主要原理是,滤波函数1主要负责把数组中异常的单个杂波信号滤除,如果有一个序列如下:     1 1 1 1 1 1 1 0 1 1 1 1 1 1 1    则程序会检测到0所在的位置,并且把它的值取反,而对于只有一个杂波1的序列,此方法同样有效。在函数中一共作了60次循环,如果检测到第i个元素与第i-1个和i+1个都不相同的话,则把第i个元素进行取反操作。这样,使用此函数对行视频信号进行扫描,可以有效地滤除单个杂波信号。    滤波函数2主要负责把数组中异常的两个杂波信号滤除,如果有一个序列如下:    1 1 1 1 1 1 0 0 1 1 1 1 1 1 1    则程序会检测到0 0所在的位置,并且把它们的值取反,而对于只有两个杂波11的序列,此方法同样有效。在函数中一共作了58次循环,如果检测到第i个元素与第i-1个和i+2个都不相同而与第i+1个相同的话,则把第i个和i+1个元素进行取反操作。这样,使用此函数对行视频信号进行扫描,可以有效地滤除两个杂波信号。
        4 结论    在实验中得到了测试结果,当检测到路径信息时,数组中0的个数一般不会低于3个。所以,滤除一个和两个杂波数据并不会影响到正常的路径识别,而同时出现3个杂波数据而且又处于相临的位置,这样的可能非常微小,可以忽略不计。事实证明,这个方法既可以滤除赛道上的杂波信号,也可以滤除路径上的杂波信号,效果非常显著。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

1

主题

64

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1734
QQ
威望
842
贡献
394
兑换币
6
注册时间
2011-11-20
在线时间
249 小时
2#
发表于 2012-2-16 20:27:27 | 只看该作者
顶楼主
回复 支持 反对

使用道具 举报

45

主题

897

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4570

热心会员奖章推广达人奖章优秀会员奖章活跃会员奖章

QQ
威望
2734
贡献
1368
兑换币
803
注册时间
2011-11-30
在线时间
234 小时
3#
发表于 2012-3-5 09:46:41 | 只看该作者
回复 支持 反对

使用道具 举报

10

主题

162

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
威望
662
贡献
227
兑换币
7
注册时间
2012-2-23
在线时间
77 小时
4#
发表于 2012-4-3 15:43:39 | 只看该作者
回复 支持 反对

使用道具 举报

6

主题

37

帖子

0

精华

高级会员

Rank: 4

积分
565
QQ
威望
273
贡献
150
兑换币
172
注册时间
2015-9-9
在线时间
71 小时
毕业学校
蓝翔技工
5#
发表于 2016-1-27 15:54:25 | 只看该作者
滤波方法mark,这种方法128运行起来吃力吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-25 15:33 , Processed in 0.095081 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表