基于麦克纳姆履带陆空结合环境探索系统-学术论文_第1页
基于麦克纳姆履带陆空结合环境探索系统-学术论文_第2页
基于麦克纳姆履带陆空结合环境探索系统-学术论文_第3页
基于麦克纳姆履带陆空结合环境探索系统-学术论文_第4页
基于麦克纳姆履带陆空结合环境探索系统-学术论文_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

附件2:编号:第十五届“挑战杯”全国大学生课外学术科技作品竞赛作品申报书作品名称:陆空结合环境探索系统学院名称:机电工程学院申报者姓名(集体名称):基电工程类别:■自然科学类学术论文□哲学社会科学类社会调查报告和学术论文□科技发明制作A类□科技发明制作B类基于麦克纳姆履带陆空结合探测系统摘要本文设计陆空结合履带车,车体基于麦克纳姆轮带,在传统麦克纳姆轮360度运动上履带可克服复杂地形,而相较于传统火星车,陆空结合设计将飞机代替摄像头,平时收在履带车内,摄像头露出与传统火星车无区别,但当需要侦查周遭环境可陆空结合实时侦测周围,可应用于人类无法进入的恶劣环境工作采样观察,而且可在第一时间空投抗灾地区为被困灾民提供支援。经多次物理模拟此方案确实可行,目前正在制作样机,因技术工艺较为复杂,履带仍需要时间加工制作。关键词:麦克纳姆轮飞行器空间探索陆空结合设计任务以传统火星车探索机器人“好奇号”为基础,将传统履带与麦克纳姆轮进行结合,实现在克服复杂地形的同时达到增加横向自由度的目的。使车的灵活性大大增加,减少车的操作难度。并且通过四旋翼进行空中监测,相较于传统火星车大大增加了车身的可利用空间,而飞行器也增大观察的灵活度。1.1应用对象星际探索,核泄漏等人类无法适应的困难环境进行实验作业。在抗震救灾中能第一时间投放灾区并向被困灾民运送物资或搬运工作。1.2论文灵感当看到麦克纳姆轮能横着走的时候非常的好奇,而且本身也对外形探索拥有浓厚的兴趣,于是经过大量计算设计了这款麦克纳姆履带。本论文作品以麦克纳母履带为基本思路,在增加横向移动的基础上改良的麦克纳母轮无法适应复杂地形的缺点,并且通过空中无人机监控周围环境。1.3作品的科学性、先进性及独特之处相较于传统移动设备和加工设备其自由度和活动范围往往因为结构的缺点而受到限制,因为通过履带和麦克纳母轮的结合克服了复杂地形以及无法横向移动的困难。而通过轮子和机械手臂的结合改变了机械加工范围受限以及搬运困难的难题。而空中摄像头则大大改善了传统将摄像头安装在机构上视野受限以及阻碍其他机构运动的问题。本文将通过履带车,飞行器两个模块进行说明。履带车模块2.1履带车2.1.1好奇号(谨以此模块对NASA科学家表达敬意)好奇号,这个代表全世界好奇之心的小东西,有着自己的大脑、眼睛、身体、手臂和腿脚。我身长约3.0m,宽约2.7m,高约2.1m,大小和一辆小型SUV汽车相当。和他的兄弟勇气号和机遇号相比,好奇号重多了,达到850~900kg。好奇号运行的计算机系统内存为256Mbyte,闪存为2Gbyte。好奇号有10只眼睛。我这些凝聚了智慧的火眼金睛,像孙悟空的眼睛一样,能洞察瞬息变化的世间万物。好奇号的的头上、身上、手臂上都长着眼睛,能让他从各个方向、各个角度对这片红色热土进行探索。好奇号虽然只有1只手臂,但是这只手臂非常灵活。它的手臂有3个关节:肩、肘和手腕。好奇号的手臂能够像人类的手臂那样伸展、弯曲和定位,可以拍摄照片、打磨岩石、分析岩石和土壤的组成,能干许许多多的活。好奇号有6条腿。和人类的腿不一样,它的6条腿是6个车轮。好奇号的2条前腿和2条后腿能够独立转向。我还能够在原地转弯360°,翻越约65~75cm。2.1.2履带车差速控制(基于模糊运算)履带车辆具有良好的机动性和越野性,因此,被广泛应用于民用和军用等领域。电传动履带车一般采用电池和双交流电机驱动,通过分配两侧电机转速或转矩实现对车辆两侧驱动力的协调控制,从而达到直线行驶或转弯目的。永磁同步电机相对于传统交流电机具有高效、高功率密度以及良好的调速性能,正逐渐成为新能源车辆领域驱动电机的首选之一。其在电传动履带驱动领域已经得到了广泛的应用。相比普通机械车辆,由于采用双电机分别驱动两侧主动轮的电传动履带车取消了转向和变速机构,可通过实时控制两侧电机的转速或转矩输出实现直线行走或转弯。为此需要设计差速控制,一般来说可以通过整车控制器实现电子差速控制功能。整车控制器通过总线技术和电机控制器进行交互通讯,电机控制器实现差速设定值的自调整控制,实现电机驱动系统进行动力分配。电传动履带车辆通过整车控制器协调控制两侧驱动电机的转速或转矩,实现任意转向,提高车辆转向稳定性[7-10]。电子差速转向控制是电传动履带车辆的关键技术之一,特别是驱动电机的控制特性直接影响差速转向性能。电子差速算法是基于采样标定值、智能控制理论等设计相应的控制策略,控制左右2个驱动电机转速或转矩,从而实现电动汽车差速转向。本模块介绍的履带车模块运算已经在ican创新创业大赛的作品上进行了应用,并且已经证明切实可行。1,整车控制器设计此图为差速控制系统结构图电传动履带车每个电机有单独的控制器,整车电子差速控制器通过接收无人驾驶车主控单元给定的车辆速度和转角以及来自传感器的反馈等信号,根据内部控制单元计算每个电机需要提供的转速,并向电机控制器发出指令,调节电机的转速,从而控制各个驱动车轮的转速。整车控制器就是汽车上动力总成控制器,它是整个汽车的核心控制部件。整车控制器主要功能是通过采集车速信号v、驾驶转角信号后,计算出输出信号ω1和ω2,也就是电机的期望输入信号。本模块的控制策略如下:首先整车控制器根据输入v和驾驶转角信号。通过下面的模糊建模离线标定出输出模糊模型,然后在线采集在线实时计算出左右电机的期望输入,通过CAN总线传递给电机控制器。接下来电机控制器用矢量控制算法调整电机的输出,从而达到电机的期望输入。3标定整车控制器的差速模糊模型本模块大多数为手稿计算,且很多符号本人无法输出,故上传文稿,给您带来不便十分抱歉。然后采用加权平均反模糊化可得到下面的模糊模型。其中,参数向量的取值为结论变量模糊集对应隶属函数值取得最大值时所对应的点。同理,也可以得到右电机的期望转速模糊模型。通过上面的离线标定模糊模型后,整车控制器上电后可直接运行该模型。通过实时检测到的参数向量和v值在线实时计算电机的期望转速w1和w2差速系统控制系统结构图,4交流电机矢量控制矢量控制是当前工业系统变频系统应用的主流,它是通过分析电机数学模型对电压、电流等变量进行解耦而实现的。转矩方程表明,如果d轴励磁电流分量恒定,则永磁同步电机转矩与q轴转矩电流分量成正比,这也是矢量控制的基本控制思路。永磁同步电机矢量控制可以采用电压法实现2.2麦克纳姆履带在竞赛机器人和特殊工种机器人中,全向移动经常是一个必需的功能。「全向移动」意味着可以在平面内做出任意方向平移同时自转的动作。为了实现全向移动,一般机器人会使用「全向轮」(OmniWheel)或「麦克纳姆轮」(MecanumWheel)这两种特殊轮子。作者在去年的ican创新大赛中第一次看到了麦轮,并产生了浓厚的兴趣。2.2.1工作原理其实麦克纳姆履带和麦克纳姆轮工作原理相同,只是通过履带达到克服复杂地形的能力。轮毂和辊子(roller)。轮毂是整个轮子的主体支架,辊子则是安装在轮毂上的鼓状物。全向轮的轮毂轴与辊子转轴相互垂直,而麦克纳姆轮的轮毂轴与辊子转轴呈45°角。理论上,这个夹角可以是任意值,根据不同的夹角可以制作出不同的轮子,但最常用的还是这两种。全向轮与麦克纳姆轮(以下简称「麦轮」)在结构、力学特性、运动学特性上都有差异,其本质原因是轮毂轴与辊子转轴的角度不同。经过分析,二者的运动学和力学特性区别可以通过以下表格来体现。计算过程如下,供参考。近年来,麦轮的应用逐渐增多,特别是在Robocon、FRC等机器人赛事上。这是因为麦克纳姆轮可以像传统轮子一样,安装在相互平行的轴上。而若想使用全向轮完成类似的功能,几个轮毂轴之间的角度就必须是60°,90°或120°等角度,这样的角度生产和制造起来比较麻烦。所以许多工业全向移动平台都是使用麦克纳姆轮而不是全向轮。2.2.2安装麦轮一般是四个一组使用,两个左旋轮,两个右旋轮。左旋轮和右旋轮呈手性对称,安装方式有多种,主要分为:X-正方形(X-square)、X-长方形(X-rectangle)、O-正方形(O-square)、O-长方形(O-rectangle)。其中X和O表示的是与四个轮子地面接触的辊子所形成的图形;正方形与长方形指的是四个轮子与地面接触点所围成的形状。X-正方形:轮子转动产生的力矩会经过同一个点,所以yaw轴无法主动旋转,也无法主动保持yaw轴的角度。一般几乎不会使用这种安装方式。X-长方形:轮子转动可以产生yaw轴转动力矩,但转动力矩的力臂一般会比较短。这种安装方式也不多见。O-正方形:四个轮子位于正方形的四个顶点,平移和旋转都没有任何问题。受限于机器人底盘的形状、尺寸等因素,这种安装方式虽然理想,但可遇而不可求。O-长方形:轮子转动可以产生yaw轴转动力矩,而且转动力矩的力臂也比较长。是最常见的安装方式。2.2.3麦轮底盘的正逆运动学模型以O-长方形的安装方式为例,四个轮子的着地点形成一个矩形。正运动学模型(forwardkinematicmodel)将得到一系列公式,让我们可以通过四个轮子的速度,计算出底盘的运动状态;而逆运动学模型(inversekinematicmodel)得到的公式则是可以根据底盘的运动状态解算出四个轮子的速度。需要注意的是,底盘的运动可以用三个独立变量来描述:X轴平动、Y轴平动、yaw轴自转;而四个麦轮的速度也是由四个独立的电机提供的。所以四个麦轮的合理速度是存在某种约束关系的,逆运动学可以得到唯一解,而正运动学中不符合这个约束关系的方程将无解。先试图构建逆运动学模型,由于麦轮底盘的数学模型比较复杂,我们在此分四步进行:①将底盘的运动分解为三个独立变量来描述;②根据第一步的结果,计算出每个轮子轴心位置的速度;③根据第二步的结果,计算出每个轮子与地面接触的辊子的速度;④根据第三部的结果,计算出轮子的真实转速。一、底盘运动的分解我们知道,刚体在平面内的运动可以分解为三个独立分量:X轴平动、Y轴平动、yaw轴自转。如下图所示,底盘的运动也可以分解为三个量:

表示X轴运动的速度,即左右方向,定义向右为正;

表示Y轴运动的速度,即前后方向,定义向前为正;

表示yaw轴自转的角速度,定义逆时针为正。以上三个量一般都视为四个轮子的几何中心(矩形的对角线交点)的速度。二、计算出轮子轴心位置的速度定义:

为从几何中心指向轮子轴心的矢量;

为轮子轴心的运动速度矢量;

为轮子轴心沿垂直于

的方向(即切线方向)的速度分量;那么可以计算出:

分别计算X、Y轴的分量为:

同理可以算出其他三个轮子轴心的速度。三、计算辊子的速度根据轮子轴心的速度,可以分解出沿辊子方向的速度

和垂直于辊子方向的速度

。其中

是可以无视的(思考题:为什么垂直方向的速度可以无视?),而

其中

是沿辊子方向的单位矢量。四、计算轮子的速度从辊子速度到轮子转速的计算比较简单:

根据上图所示的

的定义,有结合以上四个步骤,可以根据底盘运动状态解算出四个轮子的转速:以上方程组就是O-长方形麦轮底盘的逆运动学模型,而正运动学模型可以直接根据逆运动学模型中的三个方程解出来,此处不再赘述。2.2.3控制程序根据麦轮的底盘的运动学模型,要完全控制它的运动,需要有三个控制量:X轴速度、Y轴速度、自转角速度。要产生这三个控制量,有很多种方法,本文将使用一个USB游戏手柄,左边的摇杆产生平移速度,右边的摇杆产生角速度。首先将一个

USBHost模块连接到

Orion主板的3口。然后插上一个无线USB游戏手柄。然后再添加其他细节,就大功告成啦!其他细节:#include<Wire.h>#include<SoftwareSerial.h>#include"MeOrion.h"MeUSBHostjoypad(PORT_3);// 手柄代码(红灯亮模式)// 默认:128-127-128-127-15-0-0-128// 左一:128-127-128-127-15-1-0-128// 右一:128-127-128-127-15-2-0-128// 左二:128-127-128-127-15-4-0-128// 右二:128-127-128-127-15-8-0-128// 三角:128-127-128-127-31-0-0-128(00011111)// 方形:128-127-128-127-143-0-0-128(10001111)// 叉号:128-127-128-127-79-0-0-128(01001111)// 圆圈:128-127-128-127-47-0-0-128(00101111)// 向上:128-127-128-127-0-0-0-128(00000000)// 向下:128-127-128-127-4-0-0-128(00000100)// 向左:128-127-128-127-6-0-0-128(00000110)// 向右:128-127-128-127-2-0-0-128(00000010)// 左上:128-127-128-127-7-0-0-128(00000111)// 左下:128-127-128-127-5-0-0-128(00000101)// 右上:128-127-128-127-1-0-0-128(00000001)// 右下:128-127-128-127-3-0-0-128(00000011)// 选择:128-127-128-127-15-16-0-128// 开始:128-127-128-127-15-32-0-128// 摇杆:右X-右Y-左X-左Y-15-0-0-128MeEncoderMotormotor1(0x02,SLOT2);MeEncoderMotormotor2(0x02,SLOT1);MeEncoderMotormotor3(0x0A,SLOT2);MeEncoderMotormotor4(0x0A,SLOT1);//底盘:a=130mm,b=120mmfloatlinearSpeed=100;floatangularSpeed=100;floatmaxLinearSpeed=200;floatmaxAngularSpeed=200;floatminLinearSpeed=30;floatminAngularSpeed=30;voidsetup(){//要上电才能工作,不能只是插上USB线来调试。 motor1.begin(); motor2.begin(); motor3.begin(); motor4.begin(); Serial.begin(57600); joypad.init(USB1_0);}voidloop(){Serial.println("loop:"); //setEachMotorSpeed(100,50,50,100); if(!joypad.device_online){//若一直输出离线状态,重新拔插USBHost的RJ25线试一下。Serial.println("Deviceoffline.");beDevice();delay(1000);}else{intlen=joypad.host_recv();parseJoystick(joypad.RECV_BUFFER);delay(5);} //delay(500);}voidsetEachMotorSpeed(floatspeed1,floatspeed2,floatspeed3,floatspeed4){ motor1.runSpeed(speed1); motor2.runSpeed(-speed2); motor3.runSpeed(-speed3); motor4.runSpeed(-speed4);}voidparseJoystick(unsignedchar*buf)//Analyticfunction,print8bytesfromUSBHost{//输出手柄的数据,调试用//inti=0;//for(i=0;i<7;i++)//{//Serial.print(buf[i]);//Itwon'tworkifyouconnecttotheMakeblockOrion.//Serial.print('-');//}//Serial.println(buf[7]);//delay(10);//速度增减switch(buf[5]){case1:linearSpeed+=5;if(linearSpeed>maxLinearSpeed){linearSpeed=maxLinearSpeed;}break;case2:angularSpeed+=5;if(angularSpeed>maxAngularSpeed){angularSpeed=maxAngularSpeed;}break;case4:linearSpeed-=5;if(linearSpeed<minLinearSpeed){linearSpeed=minLinearSpeed;}break;case8:angularSpeed-=5;if(angularSpeed<minAngularSpeed){angularSpeed=minAngularSpeed;}break;default:break;}if((128!=buf[0])||(127!=buf[1])||(128!=buf[2])||(127!=buf[3])){//处理摇杆floatx=((float)(buf[2])-127)/128;floaty=(127-(float)(buf[3]))/128;floata=(127-(float)(buf[0]))/128;mecanumRun(x*linearSpeed,y*linearSpeed,a*angularSpeed);}else{switch(buf[4]){case0:mecanumRun(0,linearSpeed,0);break;case4:mecanumRun(0,-linearSpeed,0);break;case6:mecanumRun(-linearSpeed,0,0);break;case2:mecanumRun(linearSpeed,0,0);break;case7:mecanumRun(-linearSpeed/2,linearSpeed/2,0);break;case5:mecanumRun(-linearSpeed/2,-linearSpeed/2,0);break;case1:mecanumRun(linearSpeed/2,linearSpeed/2,0);break;case3:mecanumRun(linearSpeed/2,-linearSpeed/2,0);break;default:mecanumRun(0,0,0);break;}}}voidmecanumRun(floatxSpeed,floatySpeed,floataSpeed){floatspeed1=ySpeed-xSpeed+aSpeed;floatspeed2=ySpeed+xSpeed-aSpeed;floatspeed3=ySpeed-xSpeed-aSpeed;floatspeed4=ySpeed+xSpeed+aSpeed;floatmax=speed1;if(max<speed2)max=speed2;if(max<speed3)max=speed3;if(max<speed4)max=speed4;if(max>maxLinearSpeed){speed1=speed1/max*maxLinearSpeed;speed2=speed2/max*maxLinearSpeed;speed3=speed3/max*maxLinearSpeed;speed4=speed4/max*maxLinearSpeed;}setEachMotorSpeed(speed1,speed2,speed3,speed4);}附上理论成品图飞行器模块四旋翼飞行器是无人飞行器中一个热门的研究分支,随着惯性导航技术的发展与惯导传感器精度的提高,四旋翼飞行器在近些年得到了快速的发展。

为了满足四旋翼飞行的设计要求,系统以STM32F103VET6作为四旋翼自主飞行器控制的核心,处理器内核为ARM32位Cortex-M3

CPU,最高72MHz工作频率,工作电压3.3V-5.5V。该四旋翼由电源模块、电机电调调速控制模块、传感器检测模块、飞行器控制模块等构成。飞行姿态检测模块是通过采用MPU-6050模块,整合3轴陀螺仪、3轴加速度计,检测飞行器实时飞行姿态,实现飞行器运动速度和转向的精准控制。传感器检测模块包括红外障碍传感器、超声波测距模块,在动力学模型的基础上,将四旋翼飞行器实时控制算法分为两个PID

控制回路,即位置控制回路和姿态控制回路。测试结果表明系统可通过各个模块的配合实现对电机的精确控制,具有平均速度快、定位误差小、运行较为稳定等特点。3.1电机的选择与论证

四旋翼无人飞行器是通过控制四个不同无刷直流电机的转速,达到控制四旋翼无人飞行器的飞行姿态和位置,与传统直升机通过控制舵机来改变螺旋桨的桨距角,达到控制直升机的目的不同。在电机的选型上,主要有直流有刷电机和直流无刷电机两种。

方案一:直流有刷电机是当前普遍使用的一种直流电机,它的驱动电路简单、控制方法成熟,但是直流有刷电机使用电刷进行换向,换向时电刷与线圈触电存在机械接触,电机长时间高速转动使极易因磨损导致电气接触不良等问题,而且有刷电机效率低、力矩小、重量大,不适合对功率重量比敏感的电动小型飞行器。

方案二:直流无刷电机能量密度高、力矩大、重量轻,采用非接触式的电子换向方法,消除了电刷磨损,较好地解决了直流有刷电机的缺点,适用于对功率重量比敏感的用途,同时增强了电机的可靠性。所以选择直流无刷电机作为动力源。电机驱动方案的选择与论证

方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。

方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结

构易损坏、寿命较短、可靠性不高。

方案三:采用全桥驱动PWM

电路。这种驱动的优点是使管子工作在占空比可调的开关状态,提高使用效率实现电机转速的微调。并且保证了可以简单的方式实现方向控制。

基于上述理论分析,选择方案三。3.2PID控制运算由于四旋翼飞行器由四路电机带动两对反向螺旋桨来产生推力,所以如何保证电机在平稳悬浮或上升状态时转速的一致性及不同动作时各个电机转速的比例关系是飞行器按照期望姿态飞行的关键。所以这里我们采用到pid控制理论把飞机的当前姿态调整到期望姿态。Pid控制是通过姿态采集模块发送回来的数据与期望姿态进行比对,如果存在误差,就对误差进行比例、积分、微分的调整,再将调整后的值加到当前电机上,从而达到调整的目的。比例调节的反应速度较快,而且调节作用明显,飞机出现俯仰和翻滚时能快速调节回来,但是稳定性较差,往往会调节过火;积分调节可以消除长期误差,排除外界因素的干扰,但是同样会降低系统整体的稳定性,使飞机发生震荡;微分调节可以预测被控设备的将来状态,及时的进行调整,而且对比例调节有抑制作用,加强单比例调节的稳定性,排除调节过度的问题。所以通过pid控制可以完全考虑到整个系统的过去、现在、将来,以使系统达到稳定。3.3飞行姿态控制单元

飞行器模拟图如下图,姿态控制是通过陀螺仪模块进行数据的采集,根据它采集回来的俯仰角(pitch),翻滚角(roll),四旋翼采用十字型连接,这样的话能明确分离俯仰姿态和翻滚姿态,进行分别控制。这时如果飞机处于俯仰状态就调机头和机尾的电机,那边高就减小那边电机的转速,相应的那边低则加大那边电机的转速。如果飞机处于翻滚状态,则调左右电机。3.4

测试方案与测试结果

3.4.1、硬件测试

首先,先把四轴飞行器分块拆解,用最小的最轻的元件和电路板按照配重的需要安装在四轴飞行器上。再用物理方法测量重心,使其重心维持在四轴飞行器的中心。

连线接头要保证其牢固性,电池,主控板,陀螺仪要等机械硬件要使其牢固安装在飞机上。

这个硬件测试最关键的是PID的是三个参数调试,先调p参数,p参数是调整反应速度和力度的,当它反应迅速且两边等幅振动时即可确定p参数,再调d参数,d参数是一个抑制的作用,抑制它调制过大,使它保持在平衡位置的,当从任意角度都可以一次直接返回平衡位置时即可,最后调i参数,i参数是积分项,当哪一边反应过小时可以加一个i参数。这样就测试出一组适合的PID参数了。

3.4.2、软件仿真测试

在调试程序之前,可用串口显示每个电机PWM输出,观察各种姿态下PID控制后电机油门的大小。

3.4.3、硬件软件联调

通过stm32编程,模仿出PWM,并测量是否能通过电机驱动来使飞行器起飞,通过多次测试,找出飞行器起飞时的PWM值。

mpu6050模块通过串口向主控板发送数据,并在电脑上利用串口接收,检测数据是否正确,通过软件编程针对显示的数据进行修改。

通过mpu6050模块使四轴飞行器稳定的起飞,并悬停在空中;再进行测试,使四轴飞行器前进和后退;最后进行降落的测试。

通过超声波的测量使其悬停在100cm的空中,在进行前进后退的校准,使其飞行足够准确,之后进行对引导线的识别,使飞机平稳前进。

最后通过通过对直径为10cm的黑圆圈进行测试,使其测量到,并使四轴飞行器投弹打靶,打靶完毕后降落在黑色圆圈内。include"data_transfer.h"#defineBYTE0(dwTemp)(*(char*)(&dwTemp))#defineBYTE1(dwTemp)(*((char*)(&dwTemp)+1))#defineBYTE2(dwTemp)(*((char*)(&dwTemp)+2))#defineBYTE3(dwTemp)(*((char*)(&dwTemp)+3))uint8_tData_Check,Send_Status,Send_Senser,Send_Offset;uint8_tdata_to_send[50];voidData_Receive_Anl(uint8_t*data_buf,uint8_tnum){ intrc_value_temp; uint8_tsum=0,i; for(i=0;i<(num-1);i++) sum+=*(data_buf+i); if(!(sum==*(data_buf+num-1))) return; if(!(*(data_buf)==0xAA&&*(data_buf+1)==0xAF)) return; if(*(data_buf+2)==0X01) { if(*(data_buf+4)==0X01) { Mode.ACC_CALIBRATED=1; } if(*(data_buf+4)==0X02) { Mode.GYRO_CALIBRATED=1; } if(*(data_buf+4)==0X03) { Mode.ACC_CALIBRATED=1; Mode.GYRO_CALIBRATED=1; } if(*(data_buf+4)==0XA0) { Mode.ARMED=0; } if(*(data_buf+4)==0XA1) { Mode.ARMED=1; } } if(*(data_buf+2)==0X02) { if(*(data_buf+4)==0X01) { } if(*(data_buf+4)==0X02) Send_Offset=1; } if(*(data_buf+2)==0X03) { } if(*(data_buf+2)==0X16) //OFFSET { Data_Send_Check(sum); }}voidData_Exchange(void){ staticuint8_tcnt=0; if(cnt==0) { Data_Send_Status(); } elseif(cnt==1) { Data_Send_Senser(); } cnt++; if(cnt==2) { cnt=0; } elseif(Send_Offset) { Send_Offset=0; Data_Send_OFFSET(); }}voidData_Send_Status(void){ long_temp2; int_temp; uint8_t_cnt=0,sum=0,i; data_to_send[_cnt++]=0xAA; data_to_send[_cnt++]=0xAA; data_to_send[_cnt++]=0x01; data_to_send[_cnt++]=0; _temp=(int)(Angle[ROLL]*100); data_to_send[_cnt++]=BYTE1(_temp); data_to_send[_cnt++]=BYTE0(_temp); _temp=(int)(Angle[PITCH]*100); data_to_send[_cnt++]=BYTE1(_temp); data_to_send[_cnt++]=BYTE0(_temp); _temp=(int)(Angle[YAW]*100); data_to_send[_cnt++]=BYTE1(_temp); data_to_send[_cnt++]=BYTE0(_temp); _temp2=baroHigh; data_to_send[_cnt++]=BYTE3(_temp2); data_to_send[_cnt++]=BYTE2(_temp2); data_to_send[_cnt++]=BYTE1(_temp2); data_to_send[_cnt++]=BYTE0(_temp2); if(Mode.ARMED==0) data_to_send[_cnt++]=0xA0; elseif(Mode.ARMED==1) data_to_send[_cnt++]=0xA1; data_to_send[3]=_cnt-4; for(i=0;i<_cnt;i++) sum+=data_to_send[i]; data_to_send[_cnt++]=sum; UART0_Send(data_to_send,_cnt); }voidData_Send_Senser(void){ uint8_t_cnt=0,sum=0,i; data_to_send[_cnt++]=0xAA; data_to_send[_cnt++]=0xAA; data_to_send[_cnt++]=0x02; data_to_send[_cnt++]=0; data_to_send[_cnt++]=BYTE1(Acc.X); data_to_send[_cnt++]=BYTE0(Acc.X); data_to_send[_cnt++]=BYTE1(Acc.Y); data_to_send[_cnt++]=BYTE0(Acc.Y); data_to_send[_cnt++]=BYTE1(Acc.Z); data_to_send[_cnt++]=BYTE0(Acc.Z); data_to_send[_cnt++]=BYTE1(Gyro.X); data_to_send[_cnt++]=BYTE0(Gyro.X); data_to_send[_cnt++]=BYTE1(Gyro.Y); data_to_send[_cnt++]=BYTE0(Gyro.Y); data_to_send[_cnt++]=BYTE1(Gyro.Z); data_to_send[_cnt++]=BYTE0(Gyro.Z); data_to_send[_cnt++]=0; data_to_send[_cnt++]=0; data_to_send[_cnt++]=0; data_to_send[_cnt++]=0; data_to_send[_cnt++]=0; data_to_send[_cnt++]=0; data_to_send[3]=_cnt-4; for(i=0;i<_cnt;i++) sum+=data_to_send[i]; data_to_send[_cnt++]=sum; UART0_Send(data_to_send,_cnt);}voidData_Send_OFFSET(void){ int_temp; uint8_t_cnt=0,sum=0,i; data_to_send[_cnt++]=0xAA; data_to_send[_cnt++]=0xAA; data_to_send[_cnt++]=0x16; data_to_send[_cnt++]=0; _temp=0; data_to_send[_cnt++]=BYTE1(_temp); data_to_send[_cnt++]=BYTE0(_temp); _temp=0; data_to_send[_cnt++]=BYTE1(_temp); data_to_send[_cnt++]=BYTE0(_temp); data_to_send[3]=_cnt-4; for(i=0;i<_cnt;i++) sum+=data_to_send[i]; data_to_send[_cnt++]=sum; UART0_Send(data_to_send,_cnt); }voidData_Send_Check(uint16_tcheck){ uint8_tsum=0,i; data_to_send[0]=0xAA; data_to_send[1]=0xAA; data_to_send[2]=0xF0; data_to_send[3]=3; data_to_send[4]=0xBA; data_to_send[5]=BYTE1(check); data_to_send[6]=BYTE0(check); for(i=0;i<7;i++) sum+=data_to_send[i]; data_to_send[7]=sum; UART0_Send(data_to_send,8);}总结这个作品是我经过很长时间思考并结合我两年所学诞生的。我是一名机械自动化的学生,然而大学的前两年我一直在学习单片机。而在前一段时间我们学院的王老师找我进行了谈话,他问我的发展方向想怎样,我说我想研究机器义肢让残疾人可以回归社会(主要还是因为我一只眼睛看不见,所以对于残疾人的感受还是比较了解的,虽然我不能给我做一个假眼睛,但我至少能用我的所学让那些失去肢体的人重新拥有,这就是我的梦想)。而后老师指出,我既然选择了机械,那么这个梦想就要有偏重,不然等我到了大三想学机械没学精,想走电类又没有系统的学过,而且我前两年一直在忙智能车,四旋翼也只是玩一玩。老师帮我指了出来这个社会需要的是某个领域的精英人才,而我这么发展只会让人觉得我学的很杂不精,我也陷入了深深的沉思。原本我学习单片机也是想为我的专业发展起到锦上添花的作用,结果目前却本末倒置,反而影响了本科的发展,虽然成绩还算好,但是并不能像单片机一样学以致用。老师的话给我了很深的刺激,也帮助我刺中了要害。然而失去的时间不会回来,我现在能做的就是浪子回头,而让电子编程成为我和其他机械工程师相比独有的优势,让我的弊端(优势)成为辅助我的利刃。而这也是我创造出这件作品的精神之源。现在多亏学长的帮助,我正在学习3D建模,并将我两年所学到的慢慢和机械融合,这件作品目前其实还是一个模型,是我们团队3D建模大赛的作品,虽然通过了物理模拟,但是因为加工精度问题和资金问题目前并不能马上做出成品,样机已经初成规模,预计今年暑假我们的团队就可以做出成品,敬请期待。基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统基于单片机的控制系统在PLC虚拟教学实验中的应用研究基于单片机系统的网络通信研究与应用基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究基于单片机的模糊控制器在工业电阻炉上的应用研究基于双单片机冲床数控系统的研究与开发基于Cygnal单片机的μC/O

温馨提示

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

评论

0/150

提交评论