《毕业设计(论文)--物体运动轨迹实时监测系统设计.docx》由会员分享,可在线阅读,更多相关《毕业设计(论文)--物体运动轨迹实时监测系统设计.docx(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、编号: 毕业设计说明书题 目: 物体运动轨迹实时监测系统设计 院 (系): 电子工程与自动化学院 专 业: 测控技术与仪器 学生姓名: 学 号: 指导教师: 职 称: 副教授 题目类型: 理论研究 实验研究 工程设计 工程技术研究 软件开发2016年5月 20日摘 要随着科学技术的不断发展,物体运动轨迹实时监测系统在导航系统、人机交互、游戏控制等领域具有广阔应用。传统的方法,如激光追踪系统,或者是运用高精度的加速度传感器、激光陀螺仪等,这些设备过于复杂,成本高。本文基于MPU6050六轴加速度计陀螺仪传感器的运动轨迹检测系统具有成本低、易携带、体积小的特点。本论文以单片机STM32F103C8
2、T6为核心控制器,通过MPU6050得到的加速度,加速度二次积分得到位移,从MPU6050 DMP直接读取四元数和欧拉角来校准在重力加速度在二维空间中对x,y轴的影响,通过IIC总线将数据由MPU6050传送给单片机STM32F103C8T6将数据进行处理,并通过蓝牙串口将数据传输给安卓手机,通过安卓手机APP建立二维坐标系,并将得到的数据在二维坐标系中打点来显示轨迹。本论文中运用单片机C语言来编写程序,从MPU6050得到的加速度通过均值校准法来减少外界对加速度计的干扰,经过积分后得到的位移值通过分解成一个数组来发送具体字节数,来保障发送给手机的数据准确性。当手机APP接收到单片机发来的数据
3、,通过分隔符将两个数据解析成一个列表,通过提取列表中的每一项,来将每个物体运动轨迹数据显示在APP上,并在APP上打点显示,若打的点超出APP坐标轴的范围,手机将自动震动报警。本次设计的物体运动轨迹监测系统,能够检测出物体的运动轨迹,经过测试在短时间内误差在1cm左右,且当物体运动轨迹超出APP坐标系的量程,手机将震动报警,且物体运动轨迹数据在0.5s更新一次,大致实现了毕业设计的要求。关键词:运动轨迹实时监测;加速度计;陀螺仪;安卓手机APP; AbstractWith the development of science and technology .The monitoring sys
4、tem of real-time trajectory in navigation system, human-computer interaction, game control have a wide range of applications. Traditional methods,for example, laser tracking system, using high precision acceleration sensor, laser gyroscope and so on. These equipment is too complex and high cost. In
5、this paper , the monitoring system of real-time trajectory based on MPU6050 which is six axis accelerometer gyroscope sensors advantages is low cost, easy to carry, small volume and so on.STM32F103C8T6 MCU as the core controller in this paper, the displacement is obtained by quadratic integral MPU60
6、50 get acceleration, from MPU6050 DMP directly read quaternion and euler Angle to calibration in the acceleration of gravity in the two-dimensional space of x, y axis, the effect of the data through the IIC bus STM32F103C8T6 controlled by MPU6050 sent the data processing, and through bluetooth seria
7、l transmission to the android mobile phone, through the android APP to establish two-dimensional coordinate system, and will get data dot in a two-dimensional coordinate system to display the trajectory.This paper uses microcontroller C language to write programs, from MPU6050 acceleration by averag
8、e calibration method to reduce the outside disturbance to the accelerometer, after the displacement value resulting from the integral by decomposition into an array to send a specific number of bytes, to ensure data accuracy sent to mobile phones. When the phone APP to receive data from the microcon
9、troller, through the separator will be two data parsed into a list, by extracting each item on the list, to each object trajectory data display on the APP, and dot on the APP shows that if a dozen points beyond the scope of APP axis, the phone will automatically vibration alarm.the design of he moni
10、toring system of real-time trajectory in navigation system can detect the movement of the object, after testing in a short period of time error in 1 cm, and when the object movement beyond the range of APP coordinate system, cell phone will vibrate alarm, and object trajectory data updated once in 0
11、.5 s.Key words:The monitoring system of real-time trajectory;accelerometer;gyroscope;android APP;目 录1 引言11.1 研究背景及意义11.2国内外研究现状21.3惯性导航的发展趋势21.4论文的章节安排22 设计任务及要求32.1 设计任务32.1.1课题内容32.1.2主要任务32.2 设计要求43 系统设计理论依据及方案论证43.1系统设计理论依据43.2 方案论证53.3 软件算法方案选择63.3.1方案一63.3.2方案二73.3.3方案三83.4 安卓APP开发工具的选择83.4.1方
12、案一83.4.2方案二84 硬件系统设计94.1 单片机最小系统控制部分94.1.1芯片的选择94.1.2单片机最小系统电路104.2 蓝牙模块电路104.3 稳压电源电路114.4 MPU6050模块电路124.5 运动轨迹监测系统工作过程134.5.1灵敏度的影响144.5.2稳定性分析145 系统软件设计145.1软件设计基本思想145.2 各个模块的设计155.2.1系统初始化程序155.2.2 MPU6050初始化与数据读取程序165.2.3均值校准程序175.2.4算法运算程序185.2.5数据处理程序195.2.6中断服务程序195.3 手机APP软件的设计与分析205.3.1U
13、I的设计215.3.2逻辑的设计226 系统调试266.1 硬件系统调试266.1.1单片机STM32F103C8T6最小系统模块的硬件调试266.1.2蓝牙模块的硬件调试276.1.3MPU6050模块的硬件调试286.2软件调试296.3 调试结果分析347 系统测试347.1 系统测试的方案与过程347.1.1系统测试所需设备与工具347.1.2系统测试方案与过程348 结论36谢 辞38参考文献39附 录40附录1运动轨迹实时监测系统的原理图40附录二运动轨迹实时监测系统的pcb图顶层41附录三运动轨迹实时监测系统的pcb图底层41附录五APP程序代码块图(部分代码过长被折叠)43附录
14、六主程序的编写44MPU6050的初始化函数48求欧拉角的函数49521 引言1.1 研究背景及意义物体运动现象一直都是无处不在的,而人类也在随着科学技术的不断发展通过各种技术来监测物体运动轨迹。监测运动轨迹人们一般从外部来观测,通过全球定位系统(Global Positioning System,GPS) 1袁安存.全球定位系统(GPS)原理与应用M.大连:大连海事大学出版社,1999:100-110.进行实时定位、导航与运动轨迹监测。全球定位系统是由空间部分、地面控制系统和用户设备三个部分组成。空间部分包括颗卫星,分布在条交点互隔度的轨道面上,地面控制系统由监测站、主控制站、地面天线所组成
15、,负责收集卫星传回的信息。用户设备部分即 GPS接收机。系统庞大复杂,价格昂贵,运行和维护的成本高,但实际效果并不是很好,例如手机 GPS 定位的平面精度一般在几米至几十米,只能满足用户日常生活的基本的定位要求,卫星定位也有其自身的缺点。GPS 信号在受到建筑物的遮挡,如地下室、隧道、高密度建筑群时,会导致 GPS 接收机不能捕捉到卫星信号,从而不能定位或定位误差很大,定位效果不理想2田小芳,熊超,陆起涌.基于加速度传感器的GPS盲区内定位方案研究J.微电子与计算机,2006::187-189。也因此,当我们处于 GPS盲区时,我们需要通过其他的方法来辅助定位即监测运动轨迹。在体育赛事中经常运
16、用到的鹰眼技术也是一种监测运动轨迹的方法,它能够帮助裁判克服球飞速运行状态下所观察不到的盲区,帮助裁判做出公正且令人信服的判断。“鹰眼”的正式名称是“即时回放系统”,它的技术原理并不复杂,只是十分精密。这个系统由8个或者10个高速摄像头、四台电脑和大屏幕组成。首先,借助电脑的计算把比赛场地内的立体空间分隔成以毫米计算的测量单位;然后,利用高速摄像头从不同角度同时捕捉网球飞行轨迹的基本数据;再通过电脑计算,将这些数据生成三维图像;最后利用即时成像技术,由大屏幕清晰地呈现出网球的运动路线及落点。从数据采集到结果演示,这个过程所耗用的时间,不超过 10秒钟3百度百科“鹰眼技术”词条EB/OL. .
17、2016.5.17。但是鹰眼系统整个系统造价昂贵,且监测空间有限,也无法在大众中间推广开来。本次设计运用了惯性导航的相关知识,来测量运动轨迹。惯性导航是一种自主式导航系统,它是一门综合了机电、光学、数学、力学、控制及计算机等学科的尖端技术4秦永元.惯性导航M.北京:科学出版社,2006 惯性元件指的是陀螺仪和加速度计,利用惯性元件测出运动目标的加速度值与角速度值,。经过积分计算之后可以得到目标运动轨迹。这类导航系统可以比较方便的对运动目标的轨迹进行三维空间的监测。这种方法不借助与外部的信息,消除外部带来的干扰。在军事上,一般使用精度高的加速度传感器、激光陀螺仪或价格不菲的机械式传感器来减小测量
18、误差,但这些造价过高,并不适用于民用。一般民用的缺点则在于其在一段时间内累积的误差将越来越大,所以需要与卫星定位系统结合起来使用。1.2 国内外研究现状对于惯性导航的研究,最早是在第二次世界大战开始的,也由此开辟了惯性导航这一门新的科学学科。几十年来,世界大国们都争着研发惯性导航系统,在不断的研究探索中,惯性导航的技术不断提高,无论是在理论方面还是在实际的工程实践中都取得了飞速的发展,在运动物体上安装加速度计,通过加速度计测得物体的运动速度,经过计算得到速度和位移得到物体的运动轨迹。国外对惯性导航的研究比国内要早,进入二十一世纪以来随着陀螺仪技术的发展与微计算机技术的日益成熟,并研制出了当今技
19、术领先的微光机电陀螺仪、原子陀螺仪等新的陀螺仪。为惯性导航技术减小了更多的误差。我国在二十世纪九十年代后开展了基于MEMS技术的惯性导航技术的研究,取得了不错的进展,惯性导航技术为我国的航天航空领域提供了举足轻重的作用,国内的很多高校与研究院也在MEMS惯性导航技术花费很多人力物力,并取得不错的成绩。总的来说,测量运动轨迹的精度即惯性导航中的精度决定于惯性元器件即加速度计与陀螺仪的精度,而这里面的误差,随着实践的积累不断增大,为了提高我们的测量精度,我们必须研制出更高精度的加速度计与陀螺仪。1.3 惯性导航的发展趋势在导航定位中,通过测量速度、位置或加速度来得到物体的运动轨迹,但是在运动的物体
20、内部只能测量物体运动的加速度和角速度,所以惯性导航的自主性是其他导航定位技术无法替代的。随着科学技术的不断发展,现代军事也向高科技发展,隐蔽性和激动性对于现代的武器系统至关重要,所以惯性导航的自主性将很好的运用于现在武器系统中,很好的为我们保家卫国,也更好的保卫世界的和平。随着国家经济的不断发展,人们生活水平不断提高,越来越多的人拥有自己的汽车,但是GPS在有些隧道时信号不好,人们在水下、冰下或者是原始森林中勘探时GPS的信号也不好,惯性导航在这些领域也将发挥自己的优势。而惯性元件的精度也将越来越高,运动轨迹的测量也将越来越精确。1.4 论文的章节安排本文介绍的物体运动轨迹的研究,为了监测物体
21、实时的运动轨迹。具体内容安排如下:第一章,介绍了物体运动轨迹研究背景,包括它的研究它的意义、它的由来、作用及发展现状,同时提出了现如今运动轨迹监测还存在的问题,并展望了今后物体运动轨迹的的发展趋势。第二章,提出了本次物体运动轨迹设计的具体内容和任务,表明了设计目的和设计要求。第三章,阐述了物体运动轨迹测量的理论依据,分析了影响物体运动轨迹测量的因素,并提出了多个研究方案,对每个方案都进行论证,最终选择最合适的那个方案。第四章,介绍了对硬件系统的每个模块的设计,对每个模块中所使用的芯片进行介绍,最终描述了物体运动轨迹监测系统的整体工作过程。第五章,介绍了对软件系统进行设计,软件部分采用模块化设计
22、,先设计每个功能的子程序,最后对程序进行整合优化。第六章,介绍了对系统硬件调试,通过的测试结果能否到达设计要求,对电路及软件的修改优化,实现最理想的设计结果。2 设计任务及要求2.1 设计任务设计制作以单片机为核心,通过MPU 6050,结合手机,制作一个可对物体运动的运动轨迹进行监测的装置。2.1.1课题内容a)物体运动轨迹的获取。b) 物体在空间中的位置和姿态的计算。c)物体轨迹数据的传输。d)系统总体方案设计:软硬件设计、系统调试及安装运行。2.1.2主要任务a)掌握单片机的原理及使用方法。b)掌握MPU6050工作原理。c)掌握蓝牙无线传输技术原理。d)完成整个系统的设计,能够实现相应
23、的功能和要求。2.2 设计要求a)确定出系统设计方案。b)确定出系统测试方案。c)基于MPU 6050记录物体的运动轨迹 。a)将运动轨迹的数据通过蓝牙发送到手机上,数据更新速率为1秒。d)确定出系统测试方案。3 系统设计理论依据及方案论证3.1系统设计理论依据惯性导航是以牛顿力学为基础,通过测量物体运动速度这一特性,就可以知道物体的其他运动特性的轨迹测量方法。测量到的加速度一次积分就可以得到运动速度,二次积分就可以得到物体运动距离,从而给出了运动物体的瞬时速度和位置数据即可得到物体运动轨迹,其之间关系可表示为a=dv/dt=d2s/dt2 v=v0+t0adt (3.1)s=s0+t0vdt
24、=s0+v0t+t0t0adtdt式子中 a运动物体的加速度; V运动物体的速度; S运动物体的位移;设t = 0时,v0 = 0,s0 = 0,当a为常数时,则有 V = at (3.2)S=0.5at2 (3.3)由上可知,一个物体沿着一个轴直线运动时,只要通过加速度计得到加速度就可以得到物体在任何时间的速度与相对原点的实时距离,以此类推就可以得到物体在二维平面上物体的运动轨迹。vyayayX轴加速度计axaxvxXX轴加速度计y图3.1二维导航系统计算图如上图3.1以出发点为原点,对x、y轴上的加速度二次积分后得到的x,y轴的位移,就可以得到物体在二维坐标系里面的运动轨迹图。3.2 方案
25、论证由于本设计要求需要基于MPU6050的运动轨迹监测系统,且需要手机监测物体运动轨迹。所以我们需要通过单片机来处理MPU6050获得的数据,再通过蓝牙将获得的数据发送给手机,所以其系统框图如下图3.2MPU6050 加速度计传感器电路 陀螺仪单片机STM32F103C8T6系统控制模块蓝牙模块安卓手机APP显示2D轨迹监测图3.2物体运动轨迹实时监测系统设计框图由图3.2物体运动轨迹实时监测系统设计框图可知,本系统设计主要由单片机最小系统,MPU6050传感器模块,蓝牙模块和通讯电路组成。经过考虑选择合理的方案,能够简易的实现运动轨迹监测的基本功能。3.3 软件算法方案选择 由于方案一、方案
26、二需要用到角度即物体运动的姿态,这里我们直接直接用MPU6050 内部的 DMP,直接运算出四元数和姿态,而不再需要另外进行数学运算。DMP 的使用大大简化了代码的设计。DMP即是MPU6050内部的数字运动处理器,我们通过DMP得到四元数,再通过运算得到了姿态角:俯仰角(Pitch),横滚角(Roll),航向角(Yaw)其相关实现的程序流程图如下图3.3:YesNo开始初始化是否从DMP获得四元数计算得到欧拉角结束图3.3求欧拉角程序流程图MPU6050 的 DMP 输出的四元数是 q30 格式的, 也就是浮点数放大了 2 的 30 次方倍,所以要除以一个2 的 30 次方, q30 是一个
27、常量:1073741824,最后通过以上程序得到了三个姿态角俯仰角、横滚角、航向角。3.3.1方案一方案一是航位推算法,是在知道当前位置的情况下,通过测量位移和角度,推算下一时刻位移的方法。最初是用在船舶到导航当中,对所用的加速度计和陀螺仪的精度要求较高。我们此次做的是在二维平面内。通过MPU6050得到的x轴加速度ax和y轴加速度ay,通过得到的姿态角航向角Yaw,这里以来表示,航向角是以z轴为旋转轴的角。加速度测量值投影到OXY 所在的绝对坐标系中,得到ax和ay,转换公式是: ax= axcosYaw + aysinYaw (3.1) ay = aycosYaw - axsinYaw (
28、3.2)在坐标轴中具体分解如下图3.3.1:ayaxayax0Yax图3.3.1ax与ay分解示意图得到ax和ay后,运用公式(3.1)可以得到x和y的值,在一段时间内可以得到(x,y)形式的点,这些点即是物体的运动轨迹。经过反复调试,得到的加速度ay与ax数据无法在静止时使加速度为零,静止时,位移也一直在增加,放弃了这种方案。3.3.2方案二因为我们放置的水平面没有绝对水平,导致得到的加速度值收到了重力加速度的影响,我们在计算时应减去重力加速度对x,y轴的影响,再对加速度进行二次积分,得到的位移再乘以航向角的偏转角度。具体公式如下:ax=(ax -16384sin(Pitch/180*3.1
29、4)/16384 (3.3)ay=(ay -16384sin(Roll/180*3.14)/16384 (3.4)当重力加速度在一个方向上最大时,最大值为16384,Pitch与Roll读出来时,得经过转换变为弧度制再求其正弦值,16384与其正弦值相乘即为重力加速度在x,y轴上的分量,得到的加速度值减去重力加速度在其方向上的分量即得到其在x,y轴上的加速度值,经过公式(3.1)得到x,y的位移的值,有所区别的是得到x,y位移的值需再乘以航向角的正余弦值,来让x,y位移的值转化为绝对坐标系的坐标,即将(3.1)中的公式改变为如下:X轴:s=s0+t0vdt cos(Yaw/180*3.14)
30、=s0+v0t+t0t0adtdt cos(Yaw/180*3.14) (3.5)Y轴:s=s0+t0vdt sin(Yaw/180*3.14) =s0+v0t+t0t0adtdt sin(Yaw/180*3.14) (3.6)经过这种算法得到的加速度值一直为正,无法在静止时校零,在通过中值滤波算法得到的加速度值依然为正值无法使用,导致x,y位移一直在增加,无法测量轨迹。3.3.3方案三方案三直接使用MPU6050得到的加速度数据,再通过算术平均值滤波得到加速度数据,通过忽略误差的方法将数据校零,得到的数据再经过公式(3.1)得到位移值,位移值的误差问题在这里不细讲,轨迹能够显示出来了,所以最
31、后用了方案三,方案三的局限性也将在下面细讲。3.4 安卓APP开发工具的选择3.4.1方案一在2013年 谷歌 I/O大会上,谷歌推出了自家新的官方安卓集成开发工具 Android Studio。这是 谷歌 基于 IntelliJ IDEA( Java 集成开发工具) 修改来的。Android Studio 能让应用开发更简单,它相比以前 Eclipse 的开发工具最大的优势就是支持实时渲染(所见即所得),开发者可以在编写程序的同时可以马上看到自己的APP在不同尺寸屏幕中的样子,比较方便。Android Studio还有功能强大的布局编辑器,可以让你拖拉 UI 控件让你实时进行效果的预览。但是
32、本人此前从未学习过Java的程序设计语言,使用Android Studio开发安卓手机APP对自己来说有些许难度,且需要耗费大量时间学习,怕在短时间内无法实现此次毕业设计的设计要求,于是,排除了这个开发工具来开发安卓手机APP。3.4.2方案二App Inventor 最初是由谷歌在2009年开始,后来由麻省理工学院(MIT)推出一种应用开发工具。这个应用开发工具与传统的编程不同,App Inventor中程序是通过可视化的指令模块来开发,并通过定义模块的功能来实现不同的功能。这种工具可以使用户更容易的为安卓智能手机编写应用程序。App Inventor是一个完全在线开发的Android编程环
33、境,抛弃复杂的程式代码而使用积木式的堆叠法来完成您的Android程式 5黄仁祥,金琦,易伟.人人都能开发安卓APP App Inventor 2应用开发实战M.机械工业出版社,20156邓正隆,惯性技术M.哈尔滨工业大学出版社,2006.27Gil Held,Data Over Wireless Networks Bluetooth,Wap&Wireless LANs M.人民邮电出版社,2001.98Paul D.Groves,GNSS与惯性及多传感器组合导航系统原理M.国防工业出版社,2011.119周立功,ARM嵌入式系统基础教程M.北京航空航天大学出版社,2009.10宋三华,魏雪峰
34、,Android应用程序开发项目式教程M.电子工业出版社,2015.11陈永冰,惯性导航原理M.国防工业出版社,200712 David Wolber ,Hal Abelson,Ellen Spertus,et al .App InventorCreate Your Own Android AppsM. O reilly press,201113 David H. Titterton, John L. Weston,Strapdown Inertial Navigation Technology EngineersM. Peter Peregrinus on behalf of the Ins
35、titution of Electrical Engineers,1997附 录附录1运动轨迹实时监测系统的原理图附录二运动轨迹实时监测系统的pcb图顶层附录三运动轨迹实时监测系统的pcb图底层附录五APP程序代码块图(部分代码过长被折叠)附录六主程序的编写#include#include sys.h#include usart.h#include delay.h#include led.h#include mpu6050.h#include inv_mpu.h#include inv_mpu_dmp_motion_driver.h#include #define pi 3.1415926fl
36、oat dt=0.005;double x_s=0 ,y_s=0 ;char buff18;void TIM3_IRQHandler(void) if(TIM3-SR&0X0001)/溢出中断 /printf(%d %d ,x_a,y_a);printf(%sn,buff); TIM3-SR&=(1APB1ENR|=1ARR=arr; /设定计数器自动重装值/刚好1ms TIM3-PSC=psc; /预分频器7200,得到10Khz的计数时钟 TIM3-DIER|=1CR1|=0x01; /使能定时器3 MY_NVIC_Init(1,3,TIM3_IRQChannel,2);/抢占1,子优先级
37、3,组2 void send()double x ,y;x=x_s;y=y_s; if(y=0) buff0=+; else y=y*-1; buff0=-; if(x=0) buff9=+; else x=x*-1; buff9=-; buff1=(int)y%1000/100+48; buff2=(int)y%100/10+48; buff3=(int)y%10+48; buff4=.; buff5=(int)(y*10)%10+48; buff6=(int)(y*100)%10+48; buff7=(int)(y*1000)%10+48; buff8=,; buff10=(int)x%1
38、000/100+48; buff11=(int)x%100/10+48; buff12=(int)x%10+48; buff13=.; buff14=(int)(x*10)%10+48; buff15=(int)(x*100)%10+48; buff16=(int)(x*1000)%10+48; buff17=0; main(void)int a1 = 0,a2 = 0,b1 = 0,b2 = 0,c1 = 0,c2 = 0, i = 0;int x_a = 0,x_v = 0,y_v=0, y_a=0;char buff18=0;buff8=,;Stm32_Clock_Init(9); /系
39、统时钟设置delay_init(72); /延时初始化uart_init(72,9600); /串口1初始化 LED_Init(); /LED端口初始化delay_ms(200); /mpu6050上电延时mpu_dmp_init(); /DMP初始化TIM3_Int_Init(4999,7199);/200ms/LED = 0; /点亮LEDdelay_ms(1000);while(i200) if(mpu_dmp_get_data()=0) c1=accel0/100;c2=accel1/100; a1=a1+c1;a2=a2+c2; i+ ; b1=a1/200;b2=a2/200;wh
40、ile(1)if(mpu_dmp_get_data()=0) /得到DMP处理的数据 / printf(Y:%7.2f;X:%7.2f;Z:%7.2f;,Pitch,Roll,Yaw); /角度/printf(ACCEL:%7d %7d %7d;,accel0,accel1,accel2); /加速度/printf(GYRO:Y:%7d X:%7d Z:%7dn,gyro0,gyro1,gyro2); /角速度 y_a=(accel0/100-b1); x_a=(accel1/100-b2); y_v=(y_a*0.2+y_v+0.5); x_v=(x_a*0.2+x_v+0.5); y_s=(y_s+y_v*0.2); x_s=(x_s+x_v*0.2); send(); delay_ms(200); / printf(%d %d ,x_a,y_a); /a=sin(pi/6); /b=2 ;