【基于OPENMV的自动驾驶小车系统设计(论文)11000字】_第1页
【基于OPENMV的自动驾驶小车系统设计(论文)11000字】_第2页
【基于OPENMV的自动驾驶小车系统设计(论文)11000字】_第3页
【基于OPENMV的自动驾驶小车系统设计(论文)11000字】_第4页
【基于OPENMV的自动驾驶小车系统设计(论文)11000字】_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

共NUM页基于OPENMV的自动驾驶小车系统设计【摘要】本课程设计基于OpenMV机器视觉模块,通过0V7725摄像头和超声波传感器采集路况信息,以STM32单片机作为控制核心,采用PID控制算法实现对智能小车行进方向与速度的控制;并通过WIFI模块通信协议的设计,实现手机APP对小车的远程监控,小车电机驱动模块采用L298N双桥直流电机驱动芯片,电机采用直流减速电机,这种电机体积小,重量轻,装配简单使用方便,能够较好的满足系统要求。经调试验证,结果表明智能小车系统实现上述功能,具有一定的实时性、可靠性和安全性,对自动驾驶进行了较好的模拟.【关键词】OPENMVPID控制STM32单片机目录TOC\h\z\u\t"标题1,1,标题2,2,标题3,3"28302第1章绪论 1325921.1研制的目的及意义 18401.2国外研究现状 1128921.3国内研究现状 269361.4课题研究内容以及论文的安排结构 318984第2章系统总体设计方案 424475第3章硬件电路设计 5235663.1主控模块 55783.1.1晶振电路 518403.1.2复位电路 6294963.2电机模块 7231273.3摄像头模块 841683.4超声波避障模块 996623.5电源模块 1050993.6人机交互模块 1198第4章软件电路设计 1435744.1计算机语言简介 14175384.1.1C语言简介 14149674.1.2MicroPython语言简介 1495914.2主程序流程图 15288724.3OPENMV摄像头算法设计 17207584.4电机PID调节 1929659第5章设计总结 2124875参考文献 22绪论近些年来,随着社会的不断发展,科学技术的不断进步,现代通信技术、计算机和各项传感类技术也得到了广泛的运用。本章主要说明智能小车研制的目的及意义以及基于OpenMV的智能小车在国内外的发展现状,并且给出了本文主要研究内容和后续论文结构的安排。1.1研制的目的及意义随着现代科技的进步和人工智能的飞速发展,自动控制的应用已经越来越广泛。智能小车作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。通过构建智能小车系统,培养设计并实现自动控制系统的能力。在实践的过程中,熟悉以单片机为核心控制芯片,设计小车的检测、驱动和显示等外围电路,采用算法实现小车的智能控制。灵活的运用所学的相关学科的理论知识,结合实际电路设计的具体实现方法,达到理论和实际的统一。在此过程中,加深对理论知识的理解和认识。且该设计具有实际意义,可以应用于考古、机器人、娱乐等许多方面。尤其是在玩具机器人研究方面具有很好的发展前景。所以本设计与实际相结合,现实意义很强境感知、规划决策、自动行驶等功能于一体的综合系统——它集中地运用了计算机、传感、信息、通讯、导航、人工智能及自动控制等技术,是典型的高新技术综合体。随着机器视觉领域快速发展,开源的机器视觉模块层出不穷。相比于光电、电磁传感器,摄像头采集的图像不易受外部环境的光线影响,能够更加准确充分地反映实时路况信息。因此,本文将开源的OpenMV模块应用于智能小车,设计了一个模拟无人驾驶智能小车系统。该系统通过视觉系统对道路环境进行感知,控制器作出相应判断,从而控制执行部分做出相应动作,同时能够通过手机远程监控小车的行驶状态,实现小车的正常行驶。智能小车作为当前无人驾驶智能车辆的仿真车,为我们研究模拟无人驾驶提供了基础。1.2国外研究现状西安电子科技大学郝建领硕士2007年的学位论文《无线遥控智能车控制系统》中写到。日、美、意等国从多角度展开了对移动机器人的研究。美国卡内基梅隆大学机器人研究所研制的NavLab-5智能车,能够完成传感器信息融合,图像理解和车体横向控制等功能。另外该大学还研制出一种类似于行星探测车“流浪号”智能车,该智能车有多种环境感知能力,能在非结构动态环境中实现对学习、自推理等功能,并且能够在沙漠中进行自主控制和几千公里以外人工遥控。ARGO试验车由意大利Parma大学的信息工程系研制,盖茨由福特轿车改制而成,该车应用立体视觉检测和定位车辆行驶前方障碍,通过单目图像来得到车辆前方道路的几何参数,通过I/O板来获得车辆的速度及其他数据,在2000年意大利汽车百年行活动中,该车自动行驶了2000千米。吉林大学回姝2009年硕士论文《某专用车辆速度无线控制技术的研究》中写道1995年,法国国防采购局地面武器管理处与新成立的一家联合公司GIB.SYRANO研制一种战场侦察用的机器人,这是一台小型无人驾驶车辆,该车通过无线电及光缆与控制台通信联络,操作人员可从控制台对车辆进行遥控,通过摄像头对图像进行采集,然后进行无线图像的传输,反馈到控制台,控制者通过显示出的图像信号进行操作,把控制信号通过无线方式传输出去,实现监视控制其执行任务。1.3国内研究现状无人驾驶产业将是我国对美欧日等传统汽车大国实现变道超车的重要领域。我国无人驾驶产业需求巨大、规模快速增长,但是人才缺口和尚不完善的法律仍是制约产业发展的障碍。无人驾驶产业改变了就业结构,促使我国行政法律制度更加完善的同时,也对人类的身体机能、现有交通秩序和网络安全等方面提出新的挑战。华东科技大学林风涛硕士2008年学位论文《智能车的视觉导航与路径规划研究》中提到,我国智能车的研究起步比较晚,目前已取得很大进步,但与发达国家的水平还有一定的差距。目前在国内具有代表性的研究机构和重要研究成果如下:在国防科工委和国家863计划的资助下,由清华大学智能技术与系统国家重点实验室“移动导航车(THMR)课题组”研制的“THMR-V”的智能车。“THMR-V"'的智能车经过实验研究已经能够实现结构化环境下的车道线自动跟踪,准结构化环境下的道路跟踪,复杂环境下道路避障、道路停障,视觉临场感遥控驾驶等功能。2003年的测试中,THMR-V智能车在公路上车道线自动跟踪时平均速度100km/h,最高速度达到150km/h。缺点是只是在画有清晰白线的结构化道路上进行车道跟踪。国防科技大学从80年代末期开始跟踪和研究车辆的自动驾驶技术,先后研制了视觉导航自主车CITAVT系列无人驾驶车。CITAVT-IV是国防科技大学自动化研究所研制的新一代地面无人驾驶车辆。CITAVT-IV型视觉导航自主车是以研究在结构化道路环境下的自主驾驶技术为主要目标,其中摄像机作为主要环境感知器,该车于2000年4月在长沙市绕城公路上进行了自主试验,最高车速达到了75.6km/h。试验中存在的主要问题是视觉系统对道路出口和桥梁出口的鲁棒性不够强,在经过两个出口时视觉系统将匝道认作道路,在跨越湘江大桥时,视觉系统无法识别道路边缘,需要人工纠正。吉林大学回姝2009年硕士论文《某专用车辆速度无线控制技术的研究》中写道,在军事领域,我国对遥控车辆的研制也非常重视,《高技术研究发展计划纲要》就把智能机器人列为自动化技术的第二个重点课题,一些关键性技术都取得了较大进展。2004年我国中国科学院沈阳自动化研究所研制出“灵蜥”系列反恐防暴机器人。无线遥控专用车辆的运行参数通过无线遥测装置传输给操作者。目前,比较成熟的有山东理工大学与山推工程机械股份有限公司联合研制的无线遥控推土机、国防科技大学研制的无线遥控振动式压路机等。虽然国内外的研究已经是硕果累累,但智能车所能达到的智能化和自主化水平还比较低,还远未达到实用化程度,不少方面还需要改进和完善。1.4课题研究内容以及论文的安排结构主要研究基于OPENMV的自动驾驶小车的系统设计论文各节安排如下:第1章:绪论,主要介绍智能车的发展历程和研究方向,最后介绍本文的研究内容和章节安排。第2章:系统总体设计方案第3章:硬件电路设计第4章:软件电路设计第5章:设计总结。第2章系统总体设计方案本设计系统涉及主控模块、电机驱动控制模块、摄像头图像处理模块、超声波避障模块、电源模块、WIFW模块以及PID算法实现智能小车车道保持功能,红绿灯识别功能以及自动避障停车功能。模拟实验中,道路采用双黑线设计,设有直道、弯道和模拟红绿灯,用于智能小车循迹行驶和红绿灯识别;设置障碍物,用于测试智能小车的超声波避障功能。同时,该系统能够实现自动控制和APP手动控制两种模式。本设计无人驾驶智能小车模拟系统主要由传感器、控制器、执行器以及人机交互四部分组成。传感器部分包括摄像头模块和超声波测距模块。摄像头模块采用双摄像头的设计,分别采用广角摄像头采集双黑线的信息,长焦摄像头采集红绿灯信号;超声波测距模块采集小车与障碍物之间的距离信息。采集到的数据信息经过模块处理后,通过串口将处理好的实时数据发送至小车的主控制器。控制器部分STM32单片机是整个系统的控制核心,实现各个模块统一协调工作,根据当前路况实时的作出相应的判断,并给执行器下发指令。执行器部分为电机,主控制器采用PID控制算法,通过驱动电路,控制电机转动的方向和速度,可以使电机产生正转、反转,从而根据差速原理使车体产生前进、后退以及转弯等动作。人机交互部分通过WIFI网络,实现手机端APP与智能小车互联,实时跟踪智能小车的动态,在紧急情况下,对智能小车进行实时操控,从而达到安全运行的目的。整个系统实现对路面信息的采集和实时监测,并且具有一定的抗干扰能力,从而给主控制器提供一个很好的决策依据。因此,该系统应具备以下模块才能达到对智能小车控制的目的和效果,使小车能够稳定的行驶。其硬件模块组成框图如图2.1所示。图2.1系统模块框图

第3章硬件电路设计3.1主控模块图1中主控制器采用STM32F103VCT6单片机作为整个系统的控制核心。STM32F103VCT6是ST公司基于ARM最新Cortex-M3架构内核的32位处理器产品,内置256KB的Flash、48K的RAM、CRC计算单元,96位唯一ID,三个12bit,1µsA/D转换器(最多16个通道)和两个12bitDAC92通道;四个通用,两个高级控制和两个基本计时器,80个快速I/O端口,三个SPI,两个I2C,五个USART,一个USB,一个SDIO和一个CAN接口,时钟频率最高可达到72MHz。指令系统和传统的STM32系列单片机指令系统完全兼容,降低了系统软件设计的难度。图3.2主控电路中通过控制三极管Q1的通断来控制盘式喇叭是否正常工作,输入高电平则三极管导通,输入低电平则三极管截止。图3.1主控电路图3.2盘式喇叭3.1.1晶振电路晶振是一些电子设备需要频率高度稳定的交流信号的时候使其变得更加稳定的结构,晶振电路是能够产生一种周期性波形的电路,如果频率稳定了,就可以通过分频的方式实现定时,也就是时钟信号。本设计使用RTC晶振电路如下图3.3所示,有一个8MHz的主晶振,直接插电就可以正常运行了。图3.3RTC晶振电路图3.48Hz主晶振3.1.2复位电路复位电路的功能就是根据芯片的要求,产生一个高电平或者一个低电平,并且保持一定的时间,激发芯片的复位功能,达到使芯片产生复位动作的效果,为了避免电路出现故障,复位电路的启动手段如下:一是在给电路通电时马上进行复位操作,二是在必要时可以进行手动操作,三是根据程序或者电路运行的需要自动地进行。当需要手动操作的时候,可以在RESET引脚上接一个低电平,时间超过2us即可。在图3.3中可以看出,开关SW1为常开开关,系统正常运转时开关为断开状态,此时RESET受上拉电阻R10的影响变成高电平,当按下S1时,开关变成闭合状态,引脚RESET则变为低电平,处于复位状态,这样就可以完成芯片的手动复位。图3.5复位按键电路3.1.3开关、接口图3.6为小车总制动开关和LED工作指示灯的电路。按下开关后,小车开始运行,工作指示灯亮起。图3.7为SWD仿真烧写接口,将用C51编写的程序烧录进单片机里,从而实现对小车运动的控制。图3.8中OLED为液晶显示屏。图3.6制动灯开关&LED电路图3.7SWD仿真烧写接口图3.8OLED显示器接口3.2电机模块本设计采用了L298N电机驱动芯片来控制电机的运转。L298N是一种双H桥电机驱动芯片,其中每一个H桥都可以提供2A的电流,功率部分的供电电压范围是2.5V-48V,逻辑部分为5V供电,接受5VTTL逻辑电平。一般情况下,功率部分的电压应该大于6V,否则芯片可能不能正常工作。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可以达到50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。3.2.1电机驱动用直流减速电机作为智能小车系统的驱动电机。直流减速电机的转动力矩比较大,而且体积较小,重量也较轻,使用方便。

电机驱动芯片选用L298N来控制直流减速电机,L298N电机驱动芯片是一个具有高电压大电流的全桥驱动芯片,单个芯片可以分别控制两个直流减速电机,并且具有过热自动关断的功能和电流反馈检测的功能,安全可靠。用该芯片作为电机驱动,驱动能力大、操作方便、稳定性好、性能优良。图3.9中的电机驱动模块中EN_A,EN_B为L298N使能端(高电平有效,常态下用跳线帽接于VCC),可通过这两个端口实现PWM调速(使用PWM调速时取下跳线帽)。可以控制电机的停转,当EN_A为低电平时,输入电平对电机控制起作用,当EN_A为高电平,输入电平为一高一低,电机正转或反转。同为低电平则电机停止,同为高电平则电机刹停。电机驱动模块中的IN1,IN2,IN3,IN4分别与单片机的IO口相连,来控制电机正转或者反转。VIN为电机供电电源接口,如果电机采用9V供电,那么电源正极接VIN,负极接GND即可。VCC为L298N芯片供电5V,此模块需要外接(最好取逻辑部分的电压供电)。需要注意的是,L298N供电的5V如果是用另外电源供电的话,(即不是和单片机的电源共用),那么需要将单片机的GND和模块上的GND连接在一起,只有这样单片机上过来的逻辑信号才有个参考0点。图3.8中的续流二极管IN4007起到保护电路的作用。图3.9L298N电机驱动模块3.2.2电机供电由于单片机的引脚输出电压微弱,所以需要连接继电器,因为继电器供电不需要太大电压,所以由继电器向电机供电,进行电压隔离。图3.10电机供电控制电路3.3摄像头模块OpenMV是一个功能强大的机器视觉模块,它相比于其他的视觉模块,具有开源并且成本低的优点。OpenMV摄像头模块以STM32F767CPU芯片以及OV7725摄像头芯片为核心,在硬件模块看上去很小巧情况下,通过Python语言有效的实现了机器视觉的核心算法,实现OpenMV模块的机器视觉功能。OpenMV上的机器视觉算法包括寻找色块、人脸检测、眼球跟踪、边缘检测、标志跟踪等。可以用来实现非法入侵检测、产品的残次品筛选、跟踪固定的标记物等。使用者仅需要写一些简单的Python代码,即可轻松的完成各种机器视觉相关的任务。小巧的设计,使得OpenMV可以用到很多具有创意的产品上。比如,可以给自己设计的机器人提供周边环境感知的能力;给智能小车增加视觉巡线的功能;给智能玩具增加识别人脸的功能,提高产品的趣味性等;甚至,可以给工厂产品线增加残次品筛选的功能等。OpenMV采用的STM32F427芯片拥有丰富的硬件资源,引出UART,I2C,SPI,PWM,ADC,DAC以及GPIO等接口方便扩展外围功能。USB接口用于连接电脑上的集成开发环境OpenMVIDE,协助完成编程、调试和更新固件等工作。TF卡槽支持大容量的TF卡,可以用于存放程序和保存照片等。OpenMV的定位是“带机器视觉功能的“Arduino”。它可以通过UART,I2C,SPI,AsyncSerial以及GPIO等控制其他的硬件,甚至是单片机模块,如Arduino、RaspberryPi(树莓派)等。它也可以被其他的单片机模块控制。这个特点使得它可以很灵活的和其他流行的模块进行配合,实现复杂的产品功能。OV7725,这是一款分辨率为30万像素的CMOS摄像头,由镜头,图像传感器、板载电路及下方的信号引脚组成。镜头部件包含一个镜头座和一个可旋转调节距离的凸.透镜,通过旋转可以调节焦距,正常使用时,镜头座覆盖在电路板上遮光,光线只能经过镜头传输到正中央的图像传感器,它采集光线信号,采集得的数据被缓存到摄像头背面的FIFO缓存中,然后外部器件通过下方的信号弓|脚获取拍摄得到的图像数据。如果我们拆开摄像头座,在摄像头的正下方可看到PCB板上的一个方形器件,它是摄像头的核心部件,型号为OV7725的CMOS类型数字图像传感器。该传感器支持输出最大为30万像素的图像(640x480分辨率),它的体积小,工作电压低,支持使用VGA时序输出图像数据,输出图像的数据格式支持YUV(422/420)、YCbCr422以及RGB565格式。它还可以对采集得的图像进行补偿,支持伽玛曲线、白平衡、饱和度、色度等基础处理。OV7725管脚作用如下:RSTB:系统复位管脚(低电平有效);PWDN:掉电省电模式(高电平有效);HREF:行同步信号;VSYNC:场同步信号;PCLK:像素时钟;XCLK:系统时钟输入端口;SCL:SCCB总线的时钟线;SDA:SCCB总线的数据线;D0-D9:像素数据端口。本设计中,采用广角摄像头拍摄跑道上的双黑线并通过机器视觉算法分析得出小车与双黑线中线的偏转角度,实现车道保持功能;采用长焦摄像头在指定的距离范围内识别跑道上的交通信号灯信息,并将实时的交通信号灯状态通过串口,上传至主控器,主控制器根据摄像头模块上传的数据作出判断,从而控制小车的速度与启停状态。图中TXD为发送数据引脚,RXD为接收数据引脚,实现智能收发芯片。图3.11摄像模块电路3.4超声波避障模块考虑到本系统只是模拟简单的路况环境,只需要检测车体前方的障碍物,没有十分复杂的环境,故采用集成超声波测距模块HC-SR04。HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达到3mm;模块包括超声波发射器、接收器与控制电路。HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。其使用方便,便于操作和调试,因此本文用于小车测距,以此实现避障。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。两个压电陶瓷超声传感器,一个用于发出超声波信号,一个用于接收反射回来的超声波信号。由于发出信号和接收信号都比较微弱,所以需要通过外围信号放大器提高发出信号的功率,和将反射回来信号进行放大,以能更稳定地将信号传输给单片机。超声波模块有4个引脚,分别为Vcc、Trig(控制端)、Echo(接收端)、GND;其中VCC、GND接上5V电源,Trig(控制端)控制发出的超声波信号,Echo(接收端)接收反射回来的超声波信号。控制原理:通过Trig(控制端)引脚发一个10us以上的高电平,就可以在Echo(接收端)接收口等待高电平输出;一有输出就可以打开定时器计时,当此口变为低电平时就可以读取定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测量,就可以达到小车移动测量的值了。图3.12中RX接收,TX发送,小车的安全距离设定为20cm,当超声波传感器检测到车体前方出现障碍物,接收探头接收传到单片机,蜂鸣器响,且距离小于安全距离,主控制器立即调整小车的速度直至停止。图3.12HC-SR04超声测距模块3.5电源模块电源电路的作用是为整个小车系统供电,电源模块是小车的核心生命源,为保证小车工作稳定,采用两节电压为12.6V的12680型锂电池进行双电源供电。因为单片机供电为3.3V,所以将电池电压用7805稳压电源降压、稳压到5V后(如图3.13)再用三端稳压管CJA1117B降压、稳压到3.3V(如图3.14)给单片机系统及其他模块供电。图3.13电源供电电路图3.14电源供电电路(1)7805三端稳压芯片7805是一款常用的三端稳压集成电路,它的使用方便,用很简单的电路即可以输入一个直流稳压电源。7805顾名思义,05就是输出电压为5V,三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。它的样子象是普通的三极管,TO-220的标准封装,也有9013样子的TO-92封装。12V转5V的7805稳压电路,两支电容都是需要的,输出端若无电容,7805极易产生自激振荡,而输入端若无电容,则由于输出电容储存的电压在关机的瞬间不会完全放掉,当输入断电后会造成输入输出两端电压倒置,容易损坏稳压器。三端稳压管CJA1117B-3.3VCJA1117B-XXX是一系列低压差三端稳压器,在1A输出\t"/soft/49/kongzhi/2021/_blank"电流下的压降为1.15V。CJA1117B-XXX系列提供电流限制和热关机功能。它的\t"/soft/49/kongzhi/2021/_blank"电路包括一个修剪绷带。确保输出电压精度在1.5%以内的基准。电流限制被修剪,以确保指定的输出电流和受控\t"/soft/49/kongzhi/2021/_blank"短路电流。片内热关机提供保护,防止过载和环境温度的任何组合,从而产生过高的结温。CJA1117B-XXX有一个可调版本,只需2个外部\t"/soft/49/kongzhi/2021/_blank"电阻器即可提供1.25V到5V的输出电压。本设计采用了CJA1117B-3.3V的三端稳压管将电压从5V降到3.3V。3.6人机交互模块Wi-Fi(WirelessFidelity,无线高保真)是一种无线通信协议,正式名称是IEEE802.11b,属于短距离无线通信技术。Wi-Fi速率最高可达11Mb/s。虽然在数据安全性方面要差一些,但在电波的覆盖范围却很广,可达100m左右。智能小车与手机APP之间通过WIFI进行通信,可以实现对智能小车的控制。数据通信协议由8个字节构成,具体通信协议如下表1所示。通过通信协议实现手机APP对小车的控制以及小车运动中实时数据上传。表3.1小车与手机APP通信协议字节名称内容含义12345678包头模式指令数据校验和包尾0x550x00/0xFF0x00/0xFF0xXX0xXX0xXX0xXX0xAA自动模式/手动模式小车启动/停止测距结果红绿灯识别结果控制方向命令本系统的WIFI模块选用RM04无线模块,是低成本高性能嵌入式UART-ETH-WIFI(串口-以太网-无线网)模块,由电源模块供电。本模块主要实现的是小车与手机APP间的通信,将小车的实时状态和路况信息通过无线信号将数据发送至手机端,并接收手机APP发送过来的控制指令。图3.15WIFI模块电路第4章软件电路设计4.1计算机语言简介本文主要使用了两种计算机语言,分别为C语言以及Micro

Python语言。4.1.1C语言简介C语言是一门\t"/item/c%E8%AF%AD%E8%A8%80/_blank"面向过程的\t"/item/c%E8%AF%AD%E8%A8%80/_blank"计算机编程语言,诞生于美国的\t"/item/c%E8%AF%AD%E8%A8%80/_blank"贝尔实验室,由丹尼斯·里奇(DennisMacAlistairRitchie)以\t"/item/c%E8%AF%AD%E8%A8%80/_blank"肯·汤普森(KennethLaneThompson)设计的\t"/item/c%E8%AF%AD%E8%A8%80/_blank"B语言为基础发展而来,在它的主体设计完成后,汤普逊和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。与\t"/item/c%E8%AF%AD%E8%A8%80/_blank"C++、\t"/item/c%E8%AF%AD%E8%A8%80/_blank"Java等\t"/item/c%E8%AF%AD%E8%A8%80/_blank"面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式\t"/item/c%E8%AF%AD%E8%A8%80/_blank"编译、处理低级\t"/item/c%E8%AF%AD%E8%A8%80/_blank"存储器、仅产生少量的\t"/item/c%E8%AF%AD%E8%A8%80/_blank"机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于\t"/item/c%E8%AF%AD%E8%A8%80/_blank"调试、修改和移植,而\t"/item/c%E8%AF%AD%E8%A8%80/_blank"代码质量与\t"/item/c%E8%AF%AD%E8%A8%80/_blank"汇编语言相当。C语言一般只比汇编语言代码生成的\t"/item/c%E8%AF%AD%E8%A8%80/_blank"目标程序效率低10%-20%。因此,C语言可以编写\t"/item/c%E8%AF%AD%E8%A8%80/_blank"系统软件。

当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了\t"/item/c%E8%AF%AD%E8%A8%80/_blank"高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显著。本设计中,总体程序使用C语言进行编写。4.1.2MicroPython语言简介Python是一种面向对象的解释型计算机程序设计语言,它由荷兰人GuidovanRossum于1989年发明,第一个公开发行版发行于1991年。设计者开发时总的指导思想是,对于一个特定的问题,只要有-

-种最好的方法来解决就好了。

Python是纯粹的自由软件,源代码和解释器CPython遵循GPL(GNU

General

PublicLicense)协议。Python语法简洁清晰,特色之一是强制用空白符(white

space)作为语句缩进。

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写。但是在使用扩展类库时需要考虑平台问题,某些可能不能跨平台的实现。Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。

2017年7月20日,IEEE

发布2017年编程语言排行榜:Python高居首位。

Micro

Python语言是Python中的一种精简和高效的实现编程语言,它包含了Python标准库的一个小子集,并且进行了在微控制器和受限环境中的运行上的优化。借助MicroPython,用户可以通过编译Python脚本语言来实现硬件底层的访问和控制,比如控制LED灯泡、LCD显示器、访问SD卡、读取电压以及控制电动机等。在本设计中,只有摄像头模块运用了Python语言。4.2主程序流程图主控制器STM32的主程序流程图如下图4.1所示。小车上电后首先进行初始化,初始化主要包括:设置最小安全距离、小车的前进速度等参数初值、外部中断初始化、定时器初始化、WIFI模块以及串口的初始化;然后打开定时器中断和串口接收中断,当定时器中断响应后如图4.2所示,设定标志位Timeflag=1。当系统进入WIFI串口接收中断后,如图4.3所示,首先判断是否接收到APP下发的指令数据,对接收到APP下发的指令进行CRC校验,若CRC校验正确则反馈接收的正确信息并解析指令,然后将解析出的控制指令发送至控制模块;若CRC校验错误,则向上反馈接收信息错误并清除数据,然后再回到重新接收APP下发的指令,并重复上述过程。主程序中,首先根据串口中断接收到的指令数据判断当前的控制模式。若为自动模式,直接进行超声波传感器测距和摄像头模块的数据采集,主控制器通过超声波测距模块返回的测距时间,分析得出小车与障碍物之间的距离,并判断是否满足安全距离;同时,摄像头模块可根据得到的相关指令或者数据直接处理得出的小车与双黑线中线的偏转角并将其通过串口传至主控制器,采用PID算法进行调节,控制发送PWM信号输出以控制电机速度,从而实现小车的下一步运动行为;若为手动模式,直接执行手机APP下发的指令,根据相应指令执行相应的操作。小车行驶状态数据通过串口发送到WIFI模块,并通过WIFI模块传至手机APP。图4.1主程序流程图图4.2定时器中断服务程序图4.3串口接收服务程序4.3OPENMV摄像头算法设计广角摄像头主要负责车道保持功能(即双黑线循迹)算法流程图如图4.4所示,首先模块上电开启,开启摄像头后进行读取灰度图像,并同时关闭图像白平衡,依次对视频帧进行处理,当ROI区域内识别到道路线时,用矩形框将线路框出,在STM32f765上计算出双黑线中线与小车的偏转角,将计算好的数值发送给主控制器,以供小车进行PID调节,实现车道保持功能;当ROI区域内没有识别到道路线时,则返回重新读取视频帧并继续后续操作。图4.4广角摄像头软件流程图长焦摄像头负责实现红绿灯识别,软件流程图如图所示。上电后开启摄像头,读取彩色RGB图像,并关闭白平衡,然后对红绿等颜色阈值进行设定和ROI识别区域的设定,读取视频帧然后判断图像内是否出现红绿灯,若出现红绿灯,在ROI区域内用矩形框框出,并根据图像原理计算出灯与车之间的距离,将数据通过串口发送给主控制器STM32F103来判断是否需要停车。主控制器根据串口接收到的摄像头发送来的交通灯状态进行判断,如果信号灯为绿灯,则执行车道保持的操作;如果信号灯为红灯,则执行停车的操作;若没有出现红绿灯则返回重新读取视频帧并继续进行上述操作。图4.5红绿灯识别算法流程图4.4电机PID调节电机PID调节主要实现小车在车道保持时的运动方向和速度的控制,即保持小车前进方向与车道中线的偏转角为零。PID控制框图如图所示,将设定值定为零。根据摄像头模块返回至主控制器的小车偏转角与设定值做差可得PID调节的输入偏差值,位置PID控制器的输出值为控制电机运行的PWM信号,计算方法如下式

其中,θ(t)代表本次偏差;θ(t-1)代表上一次的偏差;代表θ(t)以及之前的偏差的累积和:t为1,2,…,t;pwm代表输出。图3.1PID控制框图PID控制器输出的PWM信号控制直流电机运行。设定小车正常直线运动时的PWM阈值,当小车转弯时,根据小车左右两轮电机对分别加减PID输出的PWM信号,保证左右车轮实现差速转弯,从而保证小车顺利通过弯道,并通过摄像头模块实时返回偏转角。第5章设计总结我国无人驾驶产业需求巨大、规模快速增长,因

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论