智能车摄像头.docx
- 文档编号:7011371
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:23
- 大小:1.22MB
智能车摄像头.docx
《智能车摄像头.docx》由会员分享,可在线阅读,更多相关《智能车摄像头.docx(23页珍藏版)》请在冰豆网上搜索。
智能车摄像头
北京联合大学“启明星”第五届智能汽车竞赛
设计方案
队伍名称:
参赛队员:
带队教师:
摘要:
本文详细介绍了了一种基于摄像头传感的循迹自动行驶小车的方法。
使用了在汽车自动控制中使用较为广泛的一种单片机:
FreescaleMC9S12XS128单片机。
智能车通过模拟摄像头获得黑线信息,再经过一定算法控制舵机和电机,实现转向和速度控制,最终实现循迹的功能。
关键词:
循迹,摄像头,PID
第一章引言
1.总体设计
介于以往的循迹小车大部分都是基于光电传感器控制的,能够“规规矩矩”的在赛道行驶,因此我们这里尝试速度上的突破,采用摄像头控制来获得更高的速度和更好的前瞻性。
小车的基本工作原理为:
以白色跑道为引导,通过mc9s12xs128来调整、控制小车的速度和转向,实现小车在赛道上平稳正确的行驶。
图表1总体工作流程图
其中最关键的部分为:
道路信息采集、处理器对电机和舵机的控制。
道路监测器可有两类:
光电传感器和摄像头传感器。
首先,考虑到道路监测要求的完整性及准确性,我们选择了摄像头.摄像头具有光电传感器无法比拟的前瞻性,能够对弯道提前做出判断,并且能够实现切内道和弯道直冲的效果以最大可能提高速度。
同时摄像头又可分为cmos和ccd两类,ccd相对于cmos来说分辨率及所得图像性噪比好,但耗电多,价格高;此外,跑道为黑白赛道,采集的图像只需要处理成两种信号,并且由于S12的AD转换需要一定的处理时间,以致摄像头的分辨率也不可能太高,因此综合考虑,我们最终选择OV7620作为我们的路径检测传感器,其次,对于速度传感器,可供选择的方案较多,最终我们选用了精度比较高的接触式光电编码器。
对于电机和舵机的控制,我们采取了速度控制中较为常用的PWM宽带脉冲调制的方法,实现转速方向的准确控制。
关于电机的驱动,初步定为采用基于H桥电路的英飞凌bts7960芯片作为电机驱动芯片。
另外,对于系统控制部分的设计,初步定为闭环反馈控制算法PID。
因为循迹小车的制作是一个系统的工作,其中必然会出现很多错误。
为了能够更为方便的调试小车的循迹算法,我们决定通过无线发射器实时将小车运动时的道路信息及小车所处状态发送到PC机上,通过matlab对数据进行读取、分析、仿真,然后对小车的算法和参数作出相应的调整。
第二章机械设计
车模为1/10的Matiz仿真车模,如下图所示。
控制采用前轮转向,后轮驱动方案。
在买到车模以后,我们发现车模还有很多机械上的改进空间。
意识到要获得更高的速度,机械设计必然是基础,任何的控制算法及软件程序都是在一定的机械结构上来执行和实现的,并且这种基础作用在软件程序达到一定高度时显得格外重要。
因此,我们对购得车模的机械部分作了相应的改进。
第一、
对主销后倾角、主销内倾角、前轮外倾角等进行改进。
适合的主销后倾角可以增加小车直线行驶的稳定性。
参考资料,我们将后倾角定在2~3度。
前轮外倾角对汽车的转弯性能有直接影响,它的作用是提高前轮的转向安全性和转向操纵的轻便性,角度大概设为1度。
主销内倾角相对于前两者对车的影响性能不是很大,所以,我们将其略去。
第二、
对舵机的改装。
舵机的作用是实现小车的转向。
原车模的舵机的安置方法是横直式的,舵机转向点不在正中间,连杆长短也不一样,因此,在单片机输出PWM波控制舵机相对于中值不对称,这将会给后面的编程及调试带来麻烦,其次,转向连杆和转向盘交点的距离到转向中心轴的距离较短,尽管如此会使转向力大,但是会使响应延时较大,会造成在高速行驶时转向不灵敏。
为了使这方面的性能更加优化,我们决定将转向盘的半径延长,同时,使转向点在中间。
此外,该种改装能够使转向时两前轮轴线延长线相交于后轮轴线上,使转弯时横向摩擦更少,减小侧滑几率。
具体实现如下图:
第三、
对摄像头的安装。
摄像头的安装位置得选取合适。
安装得低了,会视域不够广阔,影响寻线的有效范围;安装得高了,指引线在图像坐标上会变得过窄而无法被检测到,而且赛车系统会因重心抬高而稳定性变差。
安装位置合适的一个标准就是:
在此位置的拍摄范围大小能满足控制的需要。
控制的策略简单,则所需的拍摄范围就可较小;反之策略复杂,需获得的赛道信息较多,则拍摄范围应大一些。
最后经过计算,我们决定把摄像头的位置初步定为高:
30cm,倾角:
30度,至于具体到哪个位置更好,我们将留给调试部分完成。
第四、
差速器调整。
车模后轮采用RS-380SH-4045电机驱动,为车模自带。
电机轴与后轮轴之间的传动比为9:
38(电机轴齿轮齿数为18,后轮轴传动轮齿数为76)。
齿轮传动机构对车模的驱动能力有很大的影响。
齿轮传动部分安装不恰当,会增大电机驱动后轮的负载;齿轮配合间隙过松则容易打坏齿轮,过紧则会增加传动阻力。
所以在电机安装过程中尽量使得传动齿轮轴保持平行,传动部分轻松、流畅,不存在卡壳或迟滞现象。
差速机构的作用是在车模转弯的时候,降低后轮与地面之间的滑动;并且还可以保证在轮胎抱死的情况下不会损害到电机。
差速器的调整中要注意滚珠轮盘间的间隙,过松过紧都会使差速器性能降低,转弯时阻力小的车轮会打滑,从而影响车模的过弯性能。
好的差速机构,在电机不转的情况下,右轮向前转过的角度与左轮向后转过的角度之间误差很小,不会有迟滞或者过转动情况发生。
第三章硬件设计
以S12为核心的单片机最小系统单片机最小系统板使用MC9S12XS128单片机,80引脚封装,为减少电路板空间,板上仅将本系统所用到的引脚引出,包括两路PWM接口,一路计数器接口,一路外部中断接口,8路普通IO接口。
其他部分还包括电源滤波电路、
时钟电路、复位电路、串行通讯接口、BDM接口。
单片机引脚规划如下:
PORTA:
亮度信号
IRQ:
行同步脉冲输入信号。
PT0:
光电编码器脉冲输入信号。
PWM7:
舵机角度控制信号输出。
PWM4、5:
电机速度控制信号输出。
PS4-7:
SPI通讯信号
按照电路设计设计我们所需要的电压有两种5V,7.2V。
其中,7.2V由电池提供用于后轮电机驱动;5V用于为MC9S12XS128芯片、舵机及光电编码器和摄像头提供电压。
为了实现上述电压的获取,我们总共用到了如下的芯片:
Bts7960(两片):
通过其中的H桥实现电机的正反转。
两片BTS7960构成完整H桥,提高芯片驱动能力。
输入两路PW波,如果IN1有PWM信号,IN2低电平,电机正转,反之,电机反转,如此可以实现反向制动,这对于小车在赛道上行驶最高速度的限制会大大减少。
为了减少编程了复杂程度,我们这里直接将IN2接地,只通过IN1实现PWM控制,不考虑电机反转的情况。
AS1015(一片):
用于5V电压的提取,从7.2V稳压到5V,在实际使用中LM2940在电池只有5.8V依旧可以提供5V供电,提高了电池的效率,节约调试时间,但是供电电流和波纹都不理想,因此换用了功率更大,波纹小的AS1015芯片。
图2BTS7960电路连接图
AS1015稳压电路如下:
图35v稳压电路图
图4光电编码器采集电路
第四章算法设计
阐述循迹控制算法思想。
附程序流程图。
(此部分可以阐述多种循迹算法)。
智能车能否在赛道快而稳地行驶,可以说完全取决于循迹算法,可见其重要性。
算法整体包含两部分:
图象处理算法、控制算法,控制算法又可进一步分为转向控制算法和速度控制算法,以下将从这三个方面逐个详细说明。
4.1图象处理算法
图象处理的主要目的是提取目标引导线,目标指引线有两类比较重要的特征:
中间点和边缘点(如二维数组矩阵中颜色信息为黑色的像素点),由于摄像头采集的点是以相应8位二进制的灰度值表征的,赛道是由黑白两种颜色组成的,理论上所采集点的灰度值应该只有两种值,但于光线、拍摄角度、赛道实际颜色的差异等各方面的原因,所采集到的实际值是0~255之间的任一整数。
因此,首先需要对所采集到的每场图像进行“二值化”处理,其次,仅经过“二值化”处理所提取到的黑线有可能不唯一,还需要“去噪”处理。
4.1.1“二值化”算法
算法思路是:
设定一阈值(根据具体赛道及条件调试设定,根据经验初步设定为140),对于二位数组矩阵中每一行,从左至右逐项作差,具体拿第i+3项和第i项作差,若差大于阀值的绝对值则把i+3的横坐标计下,继续,直到出现下一个差值大于阀值的点,记录下此时i的横坐标,取先后两个值的中点为目标点,依次下去直到所保存矩阵每一行的最后一个点。
以上方法,提取出了每一行中所有可能出现的目标点,依此可以求得所有行的目标点,这样目标线的大概位置就确定了。
4.1.2“去噪”算法
基本思想:
实际赛道的黑线是连续的,那么所得到的引导线也应该是连续的,从最下方的行开始(近处的最精确),如果一行中有多个目标点,则用该行的目标点的横坐标与下一行目标点的横坐标相减,与2比较,若大于2,则舍去该点。
如此可以精确提取出引导线的位置。
上述算法只能准确提取出黑线的位置,对于跑道另外需要的起跑线及窄赛道的识别,我们将其独立出来,将一场图象再扫描一遍即可得到。
具体做法比较简单,这里不作详细介绍。
总体的具体流程图如下:
图6去噪算法流程图
下图显示了去噪前后的效果图:
图7上部分为未去噪的图像,下部分为去噪后的图像
4.2控制算法
4.2.1转向控制
转向控制确定为位置式PID算法,基本表达式为:
其中T是采样时间,
、
、
为三个待调参数。
具体过程如下:
第一、
判断出赛道类型。
赛道有大S弯、小S弯、左(右)转弯、直坡道、直道区共五种。
首先,根据引导线是否为直线可以将弯赛道与直赛道区分开,如果是直赛道,则不需要转向;如果是弯道,根据引导线是否朝一个方向弯区别S弯和左(右)转弯,最后,对于S弯,求出引导线各点横坐标的方差,如果方差小于某值(根据赛道调试绝对),则对应的S弯为小S,舵机也不需要转向,直冲,大于该值时定为大S弯。
第二、
根据赛道类型进行转向控制。
除去大S弯、左(右)转弯道的其余赛道类型都不需要转向,可以直冲。
仔细分析,可以发现大S弯与左(右)弯的控制策略完全一样。
具体由上面所述的位置式PID算法实现:
首先,设定PWM波占空比与左(右)转转角对应的参考关系(具体由调试确定,转角可以用角度的正切脚表征,即横纵坐标的比值),其次,读出引导线左(右)转最远点的横纵坐标,求处比值。
最后,按上述参考关系可查处比值处的参考PWM波占空比,读出S12XS128单片机输出的实际PWM占空比,求出相应的
,即可得到S12XS128应该调成的占空比值
。
具体流程图如下:
图8转向控制流程图
4.2.2速度控制
PID控制是工程实际中应用最为广泛的调节器控制规律。
问世至今70多年来,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。
单位反馈的PID控制原理框图如下图所示。
图9PID控制示意图
单位反馈e代表理想输入与实际输出的误差,这个误差信号被送到控制器,控制器算出误差信号的积分值和微分值,并将它们与原误差信号进行线性组合,得到输出量u。
其中,,,分别称为比例系数、积分系数、微分系数。
u接着被送到了执行机构,这样就获得了新的输出信号u,这个新的输出信号被再次送到感应器以发现新的误差信号,这个过程就这样周而复始地进行。
PID各个参数作用基本介绍:
增大微分项系数可以加快动态系统响应,但容易引起震荡。
一般增大比例系数能够减小上升时间,但不能消除稳态误差。
增大积分系数能够消除稳态误差,但会使瞬时响应变差。
增大微分系数能够增强系统的稳定特性,减小超调,并且改善瞬时响应。
对连续系统中的积分项和微分项在计算机上的实现,是将上式转换成差分
方程,由此实现数字PID调节器。
位置式PID控制算法
用矩形数值积分代替上式中的积分项,对导数项用后向差分逼近,得到数
字PID控制器的基本算式(位置算式)基本表达式为:
、
、
为三个待调参数。
第一、
速度传感器传入适时速度值。
因为每个速度值与传感器单位时间内的转动圈数一一对应,因此我们每隔一具体时间读出相应的圈数来表征速度。
同上述位置式PID算法一样,先必须求出圈数与横纵坐标比值所表征的角度的参考对应关系,不过这里的参考关系有两种,一种是窄道的,一种是非窄道的,具体得到方法,也需要根据具体调试。
第二、
判断赛道类型。
基本方法同上述一样,不过,这里还需要对窄道进行判断,判断方法为检测黑色三角形。
第三、
读出实际速度及参考速度(用圈数表示)。
求出
,进一步求出
并将转速调为
即可。
具体流程图如下:
图10PID控制流程图
第五章调试部分
5.1开发工具
程序的开发是在组委会提供的CodeWarriorIDE下进行的,包括源程序的编写、编译和链接,并最终生成可执行文件。
CodeWarriorforS12是面向以HC1和S12为CPU的单片机嵌入式应用开发软件包。
包括集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、链接器以及调试器。
使用BDM来下载程序,把编译好的程序下载到单片机里运行。
5.2软件调试
软件调试主要通过串口进行,单片机通过串口发送数据到上位机显示,从而获取一些信息。
上位机接受数据主要通过串口精灵进行,如下图所示。
图11串口调试精灵
摄像头获得的模拟信号经过AD后,可以通过单片机发送到上位机上,进行及时的显示,从而判别摄像头的安置等是否正确,也可以知道针对图像的一些处理算法是否正确。
前期调试时采用最原始的办法:
及把采样到的数据直接发送到上位机上,上位机接受后人手工将数据复制粘贴并整理成excel数据,再通过matlab将excel读入,利用MATLAB强大的作图能力将数据画出来。
意识到这种方法的落后以后,我们们决定利用能够及时显示图像的软件来取代原来较为原始的方法。
因此我们们采用了基于Labview的一套上位机图像显示系统。
其运行界面如下
图12上位机显示软件
这样,通过串口通信,模拟摄像头AD后的数据就可以及时的在上位机上显示。
该软件工作流程如下图所示。
图13上位机图像显示软件工作流程图
5.3无线调试模块
在后期调试中,需要将小车行驶时的数据及时的发送出来,通过上位机观看数据,以方便改进。
这时就需要用到无线Zigbee模块。
Zigbee模块工作的原理这里不再复述。
它的一些接口为TTl电平的串口,用来链接到单片机;RS-232电平的串口,用来连接到电脑的串口。
要让其正常工作,只需将单片机的串口TX端连接到zigbee的TTl电平串口RX端,单片机的RX端连接到zigbee的TTl电平串口TX端,然后将com_TX,com_RX和GND连接到RS-232串口线上,再接到电脑上即可。
Zigbee模块的示意图如下图所示。
图14无线zigbee发送模块
第六章主要技术参数
项目
参数
路径检测方法(赛题组)
摄像头组
车模几何尺寸(长、宽、高)(毫米)
335、169、265
车模轴距/轮距(毫米)
轴距197前轮160后轮162
车模平均电流(匀速行驶)(毫安)
1400
电路电容总量(微法)
1600
传感器种类及个数
摄像头(1个)光电编码器(1个)
新增加伺服电机个数
0
赛道信息检测空间精度(毫米)
2
赛道信息检测频率(次/秒)
50
主要集成电路种类/数量
3
车模重量(带有电池)(千克)
1.2
第七章结论
7.1主要性能
总体上,智能车已经实现了加速、减速、转向、刹车的基本功能,能够沿黑色导航线比较平稳、快速地行驶了。
本智能车辆的控制算法部分主要解决如下问题:
车辆直线行驶的稳定性问题,车辆转弯控制问题,车辆行驶速度与转向角度大小的相关性问题,行驶轨迹的跟踪及预测问题等。
PID控制算法就可以解决这些问题。
它有诸多优点:
1)我们采用状态控制。
在每个很小的一段时间内,认为车辆状态不变,因而在这段时间内可将车辆作静态处理。
转向目的就是减小小车所在的中心线与车辆行驶的黑色导航线的静态误差。
状态控制不考虑时间过程,而注重调整前后的状态变化。
实际应用过程中,当时间足够小时,由于执行机构的响应能力远远低于单片机的运行速度,实际控制操作效果就如同连续控制一样,保证了控制的准确性。
2)控制输出不要求最优。
从实际情况可知,在相同的情况下,同一驾驶员两次控制的结果可能不尽相同的,具有一定的随机性,但结果都能完成所要求的任务。
因此,对于本智能车的控制输出的转向角,不要求它在当前位置是最优的,而只要求它满足两个条件,即方向正确,转向角度合理。
3)控制算法交易实现。
比较其他比较复杂的算法,如最优控制必须考虑时间的过程,因而需要了解各执行机构的动态响应特性,以获得准确的传递函数。
而本文提供的算法只需要车辆当前的状态信息,即小车的当前位置(由传感器提供)与小车所应处的位置(由算法提供),即可得到转向控制角。
整个过程不涉及执行机构的动态响应函数,从而降低了难度。
7.2改进方向
本控制算法还存在一些不足:
1)算法的稳定性不够,极其容易受到光照和路面条件的影响,鲁棒性不够。
2)作为辅助输入量的速度并不十分准确,所取的速度是算法赋予小车的速度,并非小车的真实速度。
不同的路面,不同的转向对小车的速度都会产生影响,而这些影响是很难量化的。
3)算法中参数的调整完全依靠实验人工标定,工作量比较大。
这些问题都亟待解决。
参考文献
[1]邵贝贝.嵌入式实时操作系统[LC/OS-Ⅱ(第2版)[M].北京.清华大学出版
社.2004
[2]邵贝贝.单片机嵌入式应用的在线开发方法[M].北京.清华大学出版社.2004
[3]王晓明.电动机的单片机控制[M].北京.北京航空航天大学出版社.2002
[4]臧杰,阎岩.汽车构造[M].北京.机械工业出版社.2005
[5]安鹏,马伟.S12单片机模块应用及程序调试[J].电子产品世界.2006.第211
期.162-163
[6]童诗白,华成英.模拟电子技术基础[M].北京.高等教育出版社.2000
[9]沈长生.常用电子元器件使用一读通[M].北京.人民邮电出版社.2004
[10]宗光华.机器人的创意设计与实践[M].北京.北京航空航天大学出版社.2004
[11]张伟等.ProtelDXP高级应用[M].北京.人民邮电出版社.2002
[12]张文春.汽车理论[M].北京.机械工业出版社.2005
附录
部分程序代码
/**************************************************************************************
功能介绍:
整体算法
特征描述:
所有点的平均值综合控制和远处点综合控制,每场图像56*160有效点数
最高速度
------------------------------------
CodeWarrior4.7
Target:
MC9S12XS128
Crystal:
16.000Mhz
busclock:
80.000MHz
pllclock:
160.000MHz
*****************************************************************************************/
#include"includehfile.h"
//1S延时程序
voidonesecond_delay(void)
{
wordi_num;
wordj_num;
for(i_num=0;i_num<3000;i_num++)
{
for(j_num=0;j_num<10000;j_num++)
{
__asm(NOP);
}
}
}
voidmain(void)
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<系统初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//bytei_num;
system_init();
DisableInterrupts;
//for(i_num=1;i_num<9;i_num++)
//{
onesecond_delay();
PWMDTY0=70;
//PWMDTY67=375+5*i_num;
//PWMDTY67=400;
//onesecond_delay();
//PWMDTY67=375-5*i_num;
//PWMDTY67=350;
//}
EnableInterrupts;
for(;;)
{
}
}
/*-------------------------------------------------------------
中心控制程序,分为两部分:
第一,转向控制
第二,速度控制
----------------------------------------------------------------*/
#include"includehfile.h"
signedintoffset_one;
signedintoffset_two;
signedintpre_control_speed;//当前PWM波需要控制速度的值
signedintrefer_speed;//参考速度,为一个与offset相关的函数,自定义
signedintspeed_error[3];//增量式PID控制速度,需要存储前后三个差值
signedintspeed_kp;
signedintspeed_ki;
signedintspeed_kd;
signedintturn_kp;
signedintturn_kd;
signedintturn_kdd;
signedintpre_turn_angle;//当前PWM波需要控制转角的值
signedintturn_error[2];//位置式PD控制转向,存储前后两个差值
//第一步:
弯曲程度的表示
//以最近10行的中值和采集到最远行值的加权表示弯曲程度
voidcurve_degree(void)
{
wordi_num;
/*
if(getcenter_length>10)
{
for(i_num=0;i_num<10;i_num++)
{
offset_one=mid_line[i_num]+offset_one;
}
offset_two=mid_line[getcenter_length-1]-offset_one/10;
offset_one=offset_one/10-30;
}else
{
//完全丢失时保持上场数据
if(getcenter_length>1)
{
//for(i_num=0;i_num //{ //offset_one=mid_line[i_num]+offset_one; //} //offset_one=offset_one/getcenter_length-30; offset_one=mid_line[getcen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 摄像头