智能小车汇报.docx

上传人:b****4 文档编号:6219229 上传时间:2023-05-09 格式:DOCX 页数:17 大小:637.09KB
下载 相关 举报
智能小车汇报.docx_第1页
第1页 / 共17页
智能小车汇报.docx_第2页
第2页 / 共17页
智能小车汇报.docx_第3页
第3页 / 共17页
智能小车汇报.docx_第4页
第4页 / 共17页
智能小车汇报.docx_第5页
第5页 / 共17页
智能小车汇报.docx_第6页
第6页 / 共17页
智能小车汇报.docx_第7页
第7页 / 共17页
智能小车汇报.docx_第8页
第8页 / 共17页
智能小车汇报.docx_第9页
第9页 / 共17页
智能小车汇报.docx_第10页
第10页 / 共17页
智能小车汇报.docx_第11页
第11页 / 共17页
智能小车汇报.docx_第12页
第12页 / 共17页
智能小车汇报.docx_第13页
第13页 / 共17页
智能小车汇报.docx_第14页
第14页 / 共17页
智能小车汇报.docx_第15页
第15页 / 共17页
智能小车汇报.docx_第16页
第16页 / 共17页
智能小车汇报.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

智能小车汇报.docx

《智能小车汇报.docx》由会员分享,可在线阅读,更多相关《智能小车汇报.docx(17页珍藏版)》请在冰点文库上搜索。

智能小车汇报.docx

智能小车汇报

目录

目录1

第一章引言2

第二章智能车整体设计思路和方案2

第三章智能车机械部分安装和调试3

3.1前轮部分3

3.2底盘部分3

第四章智能车的电路设计与实现3

4.1电源部分3

4.2电机驱动4

第五章智能车的控制策略和算法5

5.1目标识别算法5

5.2电机的控制6

第六章智能车控制软件的编写6

6.1初始化程序6

6.2控制主程序6

第七章运行调试部分6

7.1arm-linux-gcc交叉编译开发环境6

附件程序7

第一章引言

随着汽车工业的迅速发展,关于汽车的研究也就越来越受人们的关注,而汽车的智能化已成为科技发展的新方向。

本设计就是在这样的背景下提出来的。

此次设计的简易智能小车是基于arm11控制及传感器技术的,实现的功能是小汽车可自动识别目标(比如一个小球),,利用电两个电机的差动调节,控制电动小汽车的自动避障、寻光及自动停车。

通过摄像头采集视野范围图像并对图像处理进行目标识别,并由arm系统来控制智能车的行驶状态。

第二章智能车整体设计思路和方案

控制芯片:

ARM11(128M内存主频533MHz,最高667Mhz。

32bit数据总线。

LCD显示)

小车驱动模块:

两个5V直流电机,通过l9110h电机驱动芯片控制小车的前进,转向方向。

图像采集模块:

USB1.0摄像头,500万像素,LCD显示实时图像。

识别模块:

OPENCV1.0级联分类器。

设计思路:

opencv通过USB摄像头采集图像,通过级联分类器识别目标,通过目标在图像中的大小和位置,通过GPIO输出高低电平控制小车的前进,转向。

图1.1系统结构框图

第三章智能车机械部分安装和调试

3.1前轮部分

通过两个电机控制小车,前进的时候两个电机都向前转,后退的时候两个电机向后转。

左转时候左边电机不转,右边电机转动,又转时右边电机不转,左边电机旋转。

3.2底盘部分

采用三轮底盘,方便小车灵活转向。

第四章智能车的电路设计与实现

4.1电源部分

直流电机使用三节五号电池供电,在车的底盘下方,ARM板单独的供电。

4.2电机驱动

图4.4l9110h驱动电路原理图

图4.5电路实物图

每个电机通过一对高低电平控制。

第五章智能车的控制策略和算法

5.1目标识别算法

Opencvhaar特征级联分类器,将目标的样本图像载入并进行训练,训练出基于haar的级联分类器,可以识别特定的目标(小球)。

然后判断识别目标在整幅图像中的大小,识别目标的大小在整幅图像中的比例较小的话,可以判断数目标在车的前方而且距离比较远。

识别的目标用圆形进行标注,以图像的横向中间为界限,如果圆心在界限的左边,则小球在车的左边,反之在车的右边,中间可以给适当的缓冲区。

5.2电机的控制

直流电机是通过电机驱动芯片控制的,电机驱动芯片连接到ARM的GPIO接口,通过给GPIO接口输出高低电平来控制电机。

由于AMR上使用的是LINUX操作系统,程序想要控制电机,先要加载GPIO驱动,通过驱动程序控制GPIO输出的电平。

本程序使用GPIO的M0-M3接口,M0,M1控制左边的电机,M2,M3控制右边的电机。

第六章智能车控制软件的编写

6.1初始化程序

初始化程序主要包括:

载入OPENCV级联分类器特征数据,加载USB摄像头驱动打开USB摄像头,加载GPIO驱动,打开GPIOM0-M3。

6.2控制主程序

启动linux的定时器,定时器每隔1毫秒执行一次。

定时器的执行函数包括opencv摄像头数据采集和haar特征分类器的目标识别,这两个过程是串行的,将摄像头采集的每一帧数据载入级联分类器,如果识别出了小球,就通过识别目标图像的大小和圆心的位置判断小球的位置,如果小球是在正前方,则通过驱动程序给GPIO输出前进的信号,如果在左边,右边,则给出左转右转的信号。

第七章运行调试部分

7.1arm-linux-gcc交叉编译开发环境

交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。

我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。

比如,我们在Windows平台上,可使用VisualC++开发环境,编写程序并编译成可执行程序。

这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为nativecompilation,中文可理解为本机编译。

然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的ARM平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。

这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilationtoolchain)需要很大的存储空间,并需要很强的CPU运算能力。

为了解决这个问题,交叉编译工具就应运而生了。

通过交叉编译工具,我们就可以在CPU能力很强、存储控件足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序

附件程序

#include"main_form.h"

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#ifdef_EiC

#defineWIN32

#endif

staticCvMemStorage*storage=0;

staticCvHaarClassifierCascade*cascade=0;

IplImage*detect_and_draw(IplImage*image);

constchar*cascade_name="/home/plg/data.xml";

IplImage*pFrame=NULL;

CvCapture*pCapture;

inttimes=0;

intleftwheel;

intrightwheel;

intfd;

inttimedeny=0;

voidinitdevice()

{

pCapture=cvCreateCameraCapture

(2);

//pCapture=cvCaptureFromAVI("/home/plg/1.avi");

cascade=(CvHaarClassifierCascade*)cvLoad(cascade_name,0,0,0);

if(!

cascade)

{

fprintf(stderr,"ERROR:

Couldnotloadclassifiercascade\n");

fprintf(stderr,

"Usage:

facedetect--cascade=\"\"[filename|camera_index]\n");

}

storage=cvCreateMemStorage(0);

}

QImagemybegin()

{

charpaths[10][30]={"/home/plg/imgs/1.jpg","/home/plg/imgs/2.jpg","/home/plg/imgs/3.jpg","/home/plg/imgs/4.jpg","/home/plg/imgs/5.jpg","/home/plg/imgs/6.jpg","/home/plg/imgs/7.jpg","/home/plg/imgs/8.jpg","/home/plg/imgs/9.jpg","/home/plg/imgs/10.jpg"};

pFrame=cvQueryFrame(pCapture);

if(pFrame)

{

//if(detect_and_draw(pFrame)==1)

//{

//}

//cvSaveImage("/home/plg/pang.jpg",pFrame);

//QImageimage((uchar*)pFrame->imageData,pFrame->width,pFrame->height,8,0,1,QImage:

:

IgnoreEndian);

if(times<10)

{

//cvSaveImage(paths[times],pFrame);

}

if(times<10)

{

cvSaveImage(paths[times],pFrame);

}

times++;

IplImage*pFrame2=detect_and_draw(pFrame);

intx,y;

inti=0;

QImageimg;

QRgb*point;

intr,g,b;

if(img.create(pFrame->width,pFrame->height,32,0,QImage:

:

IgnoreEndian))

{

for(x=0;xheight;x++)

{

for(y=0;ywidth;y++)

{

r=(int)(uchar*)pFrame2->imageData[i+2];

g=(int)(uchar*)pFrame2->imageData[i+1];

b=(int)(uchar*)pFrame2->imageData;

point=(QRgb*)img.scanLine(x)+y;

*point=qRgb(r,g,b);

i+=3;

}

}

}

returnimg;

}

returnNULL;

}

IplImage*detect_and_draw(IplImage*img)

{

intbm=0;

staticCvScalarcolors[]=

{

{{0,0,255}},

{{0,128,255}},

{{0,255,255}},

{{0,255,0}},

{{255,128,0}},

{{255,255,0}},

{{255,0,0}},

{{255,0,255}}

};

fprintf(stderr,"detect_and_draw\n");

doublescale=1.3;

IplImage*gray=cvCreateImage(cvSize(img->width,img->height),8,1);

IplImage*small_img=cvCreateImage(cvSize(cvRound(img->width/scale),

cvRound(img->height/scale)),

8,1);

inti;

cvCvtColor(img,gray,CV_BGR2GRAY);

cvResize(gray,small_img,CV_INTER_LINEAR);

cvEqualizeHist(small_img,small_img);

cvClearMemStorage(storage);

if(cascade)

{

doublet=(double)cvGetTickCount();

CvSeq*faces=cvHaarDetectObjects(small_img,cascade,storage,

1.1,2,0/*CV_HAAR_DO_CANNY_PRUNING*/,

cvSize(10,10));

if(faces->total>0)

{

t=(double)cvGetTickCount()-t;

for(i=0;i<(faces?

faces->total:

0);i++)

{

CvRect*r=(CvRect*)cvGetSeqElem(faces,i);

CvPointcenter;

intradius;

center.x=cvRound((r->x+r->width*0.5)*scale);

center.y=cvRound((r->y+r->height*0.5)*scale);

radius=cvRound((r->width+r->height)*0.25*scale);

cvCircle(img,center,radius,colors[i%8],3,8,0);

printf("center%d:

radius%d\n",center.x,radius);

if(center.x>170)

{

ioctl(fd,7);

timedeny=0;

while(timedeny<10000000)

{

timedeny++;

}

ioctl(fd,0);

}

elseif(center.x<150)

{

ioctl(fd,1);

timedeny=0;

while(timedeny<10000000)

{

timedeny++;

}

ioctl(fd,0);

}else

{

if(radius>=110)

{

ioctl(fd,4);

timedeny=0;

while(timedeny<10000000)

{

timedeny++;

}

ioctl(fd,0);

}

else

{

ioctl(fd,3);

timedeny=0;

while(timedeny<10000000)

{

timedeny++;

}

ioctl(fd,0);

}

}

}

//go();

printf("gettarget\n");

//cvSaveImage("/home/plg/pang.jpg",img);

//cvShowImage("result",img);

bm=1;

}

else

{

///////停止峰鸣器

//stop_buzzer();

printf("keepdedect\n");

ioctl(fd,0,0);

bm=0;

}

}

//cvShowImage("result",img);

//cvSaveImage("/home/plg/pang.jpg",img);

cvReleaseImage(&gray);

cvReleaseImage(&small_img);

returnimg;

}

QImage&cvxCopyIplImage(constIplImage*pIplImage);

voidTMainForm:

:

timerEvent(QTimerEvent*)

{

QImageimg=mybegin();

//img.load("/home/plg/pang.jpg");

QPixmapmp;

mp.convertFromImage(img);

m_led4->setPixmap(mp);

}

TMainForm:

:

TMainForm(QWidget*parent,constchar*name,WFlagsf)

:

TMainFormBase(parent,name,f)

{

:

:

system("kill-sSTOP`pidofled-player`");

m_fd=:

:

open("/dev/leds0",O_RDONLY);

if(m_fd<0)

{

m_fd=:

:

open("/dev/leds",O_RDONLY);

}

fd=open("/dev/ledtest",0);

if(fd<0){

fd=open("/dev/ledtest",0);

}

if(fd<0){

perror("opendeviceleds");

}

system("modprobehello");

fprintf(stderr,"keepdetect\n");

connect(m_led1,SIGNAL(clicked()),this,SLOT(checkBoxClicked()));

connect(m_led2,SIGNAL(clicked()),this,SLOT(checkBoxClicked()));

connect(m_led3,SIGNAL(clicked()),this,SLOT(checkBoxClicked()));

connect(m_led4,SIGNAL(clicked()),this,SLOT(checkBoxClicked()));

checkBoxClicked();

IplImage*frame;

frame=cvLoadImage("/home/plg/pang.jpg");

initdevice();

startTimer

(1);

}

TMainForm:

:

~TMainForm()

{

:

:

close(m_fd);

:

:

close(fd);

ioctl(fd,0,0);

}

voidTMainForm:

:

checkBoxClicked()

{

ioctl(m_fd,int(m_led1->isChecked()),0);

ioctl(m_fd,int(m_led2->isChecked()),1);

ioctl(m_fd,int(m_led3->isChecked()),2);

ioctl(m_fd,int(m_led4->isChecked()),3);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2