版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2硬件系统设计2硬件系统设计2硬件系统设计TC"HardwareSystemDesign"\l12 HardwareSystemDesign多功能搜救机器人硬件设计很多部分,本章主要对搜救机器人的硬件选型和各传感器的功能进行介绍,包括核心控制器、通信、各模块、驱动电路等进行选择和设计。2.1总体设计(Overalldesign)本设计从结构上可以划分为三部分:一是系统主控单元STM32F103RCT6,其主要负责各传感器的数据采集与处理,接收上位机的指令并执行,向上位机传输数据。二是无线通信单元树莓派,其主要负责摄像头数据的采集和发送,为上位机和主控提供通信的途径。三是上位机平台,其主要负责接收来自搜救机器人的传感器数据进行展示,操作人员通过上位机可以发送指令。如图2.1所示:图2.1多功能搜救机器人总体设计图Figure2.1Overalldesigndrawingofmultifunctionalsearchandrescuerobot2.2核心控制器(Corecontroller)2.2.1STM32F103RCT6的介绍STM32F103RCT6的含义:Cortex-M3基础型MCU72MHZCPU,具有256KBFLASH、48KBSRAM、LQFP64封装形式,温度-40到85摄氏度。Cortex-M3是一个32位处理器。内部的数据是32位的,寄存器也是32位,CM3采用了哈佛体系结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行。硬件资源包括:48KBSRAM、256KBFLASH、2个基本定时器、4个通用定时器、2个高级定时器、2个DMA控制器、3个SPI、2个IIC、5个串口、1个USB、1个CAN、3个12位ADC、1个SDIO接口及51个通用IO口。ST公司为他们的单片机开发了一套工具STM32CubeMX,这个工具很好使用,使用这个工具可以很方便的进行单片机资源的初化。我们不需要再过多的关注底层寄存器的配置,只需要关注业务逻辑就行。具体用法就是新建一个工程(如图2.2), 图2.2新建一个STM32CUBEMX工程Figure2.2CreateanewSTM32CUBEMXproject然后选择单片机型号就进入配置界面,第一个页面就是外设配置,选择你需要的功能以及参数配置(如图2.3)。图2.3外设配置Figure2.3Peripheralconfiguration时钟是单片机非常重要的资源,内核需要时钟才能运行,外设需要时钟才能正常工作,就像人需要心脏的跳动才能维持生命一样,时钟就是单片机的“心脏”。时钟树配置,通过这个图一目了然,非常清楚的就可以看清楚。配置时钟只需要设置好对应的倍频系数等参数,当然这个工具的强大之处在于还可以一键配置好时钟。非常的好用,对初学者非常友好(如图2.4)。图2.4时钟配置Figure2.4Clockconfiguration第三个界面就是对工程的一些配置(如图),这里经常需要配置的有工程的名字和工程存放的位置。工具链的位置以及开发所使用的IDE,我们一般常用的IDE是KEIL和IAR。这两个工具都非常的强大,为开发者提供了很多实用的功能,能很大的帮助开发者提高开发效率。这里根据需要配置就行,我选择的是Makefile工具,使用的工具链是arm公司的arm-none-eabi工具链进行程序的编译。还有一些不常用的参数就不过多介绍了(如图2.5)。图2.5代码的生成Figure2.5Codegeneration2.2.2STM32F103最小系统最小系统搭建需要上电复位电路、时钟电路、电源电路、调试接口和启动电路,上电复位是指单片机在上电时需要让7号NRST引脚保持一段时间的高电平,以让单片机进行复位。时钟电路一般选用8M的晶振作为时钟源,晶振又分为有源和无源晶振。无源晶振:就是一个晶体,本身不能振荡,依靠配合其他IC内部振荡电路工作。有源晶振:振荡+振荡电路封装在一起。给它供上电源,就有波形输出。虽然STM32F103其内部有振荡器,但是精确度比外部振荡器精度要低一些,所以在对时间要求比较高的场合都会选择外部晶振做为时钟源。因STM32的启动模式有三种从用户闪存启动、从系统存储器启动、从内置SRAM启动。通过BOOT0和BOOT1进行模式的选择。最小系统图如下图2.6最小系统原理图Figure2.6Minimumsystemschematic2.3电源模块(Powermodule)搜救机器人需要进行长时间的搜救任务,所以对电池电压是比较敏感的,操作人员需要实时知道电池电压,以确保在搜救任务中能够在电池没电前返回。可以进行低电量报警功能。根据操作人员的位置和当前的位置计算出能够返回的最低电量,当低于设定值或者低于估算值得时候进行报警提醒,如需继续工作需要操作员进行解锁,才能继续前进。2.3.1电池的选择为了提高多功能搜救机器人在进行作业的时续航能力,本设计采用飞思卡尔比赛专用镍铬电池,电压为7.2V,电流2700mah的电池,使用两块进行串联,电压能达到14.4V,既可以提供强劲的动力,也能提供稳定的续航能力。2.3.2稳压模块设计为了保证各个模块正常工作,需要有一个稳定的电压,不同模块需要的不同的电压进行驱动。本设计采用LM2596芯片将电池电压处理后稳定输出5V,为了满足单片机和一些需要3.3V电压的模块,所以本设计再使用一块AMS1117芯片将5V电压进行处理并稳定输出3.3V电压供给单片机和其他模块(如图2.7)。图2.7电源稳压模块Figure2.7Powerregulatormodule2.3.3电压采集模块本设计采用电阻分压进行电池电压的采集,使用10K和1K电阻,输入端和输出端比值为11分之1。因本设计使用的单片机为64引脚,单片机ADC参考电压引脚并没有引出,是直接接在VDDA引脚上的,即参考电压为3.3V,测量电压范围0V-36.3V(如图2.8)。图2.8电池电压检测电路Figure2.8Batteryvoltagedetectioncircuit2.3.4电机驱动多功能搜救机器人需要在复杂的环境进行行走,道路崎岖,需要一个强大的动力。单片机的输出电流有限,需要驱动电路进行控制。可以用来放大电流和电压的电子器件有很多,比如MOS管、晶闸管等电力电子器件。在电路稳定性、复杂性等因素中考虑,本设计采用BTN7971B芯片作为电机的驱动芯片,该芯片工作电压范围4.5V-28V,最大驱动电压为70A,足以满足多功能搜救机器人的要求。图2.9电机驱动电路Figure2.9Motordrivecircuit2.4避障模块(Obstacleavoidancemodule)多功能搜救机器人在执行任务的时候,难免会遇到很多障碍物,由于摄像头的视角有限,操作人员不可能注意到周围的环境,很有可能发生意外碰撞,导致多功能搜救机器人的搜救任务无法执行。目前市面上的测距模块主要有超声波测距、激光测距和红外测距。超声波检测比较迅速,方便,计算简单、易于控制,测量距离也比较远;缺点是发射角度较大,易受到烟雾、灰尘、雨滴的干扰。激光测距距离最远,最远可达几十公里,发射角度较小;缺点易受到烟雾、灰尘、雨滴的干扰。红外测距距离居中,可达1000米,发射角度也比较小;缺点容易受到日光或者其他相近波长光源的干扰,也会受到烟雾、灰尘的干扰。本设计的测距不需要太精确,对发射角度也没有过多的要求,超声波测距就足够了。本设计使用HC-SR04-P超声波模块,兼容3.3v和5v电压,探测距离范围宽2cm-400cm(3.3v下)。工作原理,在模块的Trig端给10us以上的高电平信号,模块会自动发出8个40KHZ的方波,在遇到障碍物的时候,方波信号会反弹回来,模块接收到返回来的信号本次测距结束,有信号返回时,在Echo端口输出高电平信号,高电平信号持续时间就是超声波从发射到返回的时间。通过超声波传输的时间和速度就可以获得比较精确的距离,公式如下:距离=(高电平时间*声速)/2声速一般是340M/S通过超声波模块测出周围障碍物的距离,通过计算出合适的路径以辅助操作人员进行自动避障。主要是感知前,左和右方的障碍物。图2.10超声波模块Figure2.10Ultrasonicmodule2.5车身姿态传感器(Attitudesensor)灾难现场环境复杂,道路崎岖不平,为了防止侧翻等情况的发生。需要实时获得车身的姿态,操作人员可以通过控制避免侧翻事故的发生。目前市面上的姿态传感器有很多,InvenSense公司的MPU6050、MPU9250等,还有一些其他公司的模块。本设计使用INVENSENSE公司的芯片MPU9250,它由两部份组成,一个是三轴加速度计和三轴陀螺仪,另一个是AKM公司的AK8963三轴磁力计,都集成在内部。其输出数据都是16位数字量,可通过IIC与单片机进行通信,传输速率可达400kHz/s。陀螺仪参数可选择(±250,±500,±1000,±2000度/秒(dps))。加速度计参数可选±2g,±4g,±8g,±16g。 图2.11姿态传感器Figure2.11Attitudesensor2.6舵机云台模块(PTZmodule)为了方救援时现场图像的获取,把摄像头安装在云台上进行控制。云台采用两个sg90舵机分别控制,进行水平左右旋转90度和上下旋转90度,操作人员通过上位机发送命令给单片机,单片机再根据命令控制舵机旋转。舵机控制的原理:舵机的控制周期为20ms的脉宽调制信号,其脉冲宽度从0.5ms-2.5ms,相对应舵机旋转的角度为0-180度,呈线性变化。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号比较,判断出方向和大小,从而产生电机的转动信号。舵机的控制由单片机输出的PWM波来进行控制,控制周期是20ms,占空比从7.5%到12.5%,对应舵机-90度和90度。舵机云台上装上摄像头,通过上位机发送命令给单片机就可以控制摄像头转动。图2.12舵机云台Figure2.12ServoPTZ2.7环境监测传感器(Environmentalmonitoringsensors)现场温湿度气压是监测环境正常的一个重要参考,所以很有必要对现场环境的温湿度气压实时检测。市面上有很多模块功能单一,像DS18B20就只支持温度测量,HP303S支持气压传感器,在经过筛选后找到bme280带有温度湿度和气压检测,最后选择了它。本设计采用bme280传感器,同时支持spi和iic通信,其具有精度高,多功能,小尺寸等特点。利用气压还可以算出海拔高度,对搜救工作非常有利。图2.13温度湿度大气压强传感器Figure2.13Temperature,humidityandatmosphericpressuresensor2.8摄像头模块(Camera)搜救机器人负责勘察周围的环境,摄像头就是一个非常有利的工具,可以更直观的了解当时环境的图像信息。本设计使用OV5647,可以直接插在树莓派zerow上使用,OV5647是一款低电压,高性能,具有500万像素的摄像头。利用树莓派官方提供的驱动程序就可以对摄像头进行图像采集,然后通过网路把图像传输到上位机。通过摄像头可以很直观的看到现场的环境和路况,为实施营救提供了有利的保障。图2.14摄像头Figure2.14Camera2.9人体红外模块(Humaninfraredmodule)搜救环境异常复杂,摄像头视角有限等因素,导致有可能周围有受灾人员,但是摄像头并没有看到的情况。为了更好的进行受灾现场执行搜救任务,本设计采用HR-SR501人体红外模块辅助搜救。人体红外模块可以检测人或动物发射的红外线。该模块具有全自动感应:当有人进入其感应范围则输入高电平,人离开感应范围则自动延时关闭高电平。输出低电平。光敏控制(可选):模块预留有位置,可设置光敏控制,白天或光线强时不感应。光敏控制为可选功能,出厂时未安装光敏电阻。具有两种触发方式:L不可重复,H可重复。可通过跳线选择,默认为H。不可重复触发方式:即感应输出高电平后,延时时间一结束,输出将自动从高电平变为低电平。可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围内活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。具有感应封锁时间(默认设置:3-4秒):感应模块在每一次感应输出后(高电平变为低电平),可以紧跟着设置一个封锁时间,在此时间段内感应器不接收任何感应信号。此功能可以实现(感应输出时间和封锁时间)两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中产生的各种干扰。图2.15人体红外检测模块Figure2.15Humaninfrareddetectionmodule2.10气体传感器(Gassensor)由于灾难的发生,搜救现场可能会存在大量对人体有害的气体,比如甲烷、天然气等易燃易爆气体的存在对搜救工作产生极大的困扰,同时对周围人员的安全照成很大的威胁,因此检测有害气体是非常有必要的。本设计采用MQ-4进行可燃气体检测,具有DO开关信号输出和AO模拟信号输出;模拟量和可燃气体浓度相关,浓度越高电压越高。具有高灵敏度和可靠性。检测原理:传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为该气体的浓度响应的模拟信号。然后再经过换算就可以得到相应的浓度值。图2.16气体传感器Figure2.16Gassensor2.11卫星定位模块(Satellitepositioningmodule)搜救现场的道路和路标等可能损毁严重,操作人员无法准确判断出当前的位置信息,准确的知道位置信息更有利于搜救工作更有效的进行,目前市面上的定位模块有ATGM336H、AIR530、AT6558R等,功能相差都不是很大。通过北斗卫星导航模块我们可以实时的获取到精确的位置信息,可以很好的帮助操作人员进行定位,并且精度相比于GPS更高。本设计使用ATGM336H模块进行导航,具有高性能,小尺寸等特性。支持多种卫星导航系统,中国的北斗卫星导航系统也支持,通信使用UART进行数据传输,默认波特率为9600bps,输出格式为MNMEA-0183。定位精度可达2.5米,首次启动时间32秒。图2.17卫星定位模块Figure2.17Satellitepositioningmodule2.12本章小结(Summary)本章首先介绍了总体设计,然后是多功能搜救机器人的硬件系统设计和功能器件的选型,硬件系统主要是核心控制器的最小系统设计和电源的设计。功能包括通信、避障模块、车身姿态检测、摄像头、云台、周围环境检测、人体红外检测、气体检测和卫星定位等功能的器件选型。3程序设计与调试3程序设计与调试TC"PromgrammingAndDebugging"3Promgramminganddebugging单片机做为最核心的控制单元,负责采集数据,收发指令,车体控制等都由单片机来完成,所以单片机程序就显得尤为重要,要让搜救机器人工作稳定就需要好的程序。3.1系统设计(Systemdesign)3.1.1系统程序简介搜救机器人在进行任务的时候,首先需要在保证自己安全的情况下进行。搜救机器人通过姿态传感器检测自身姿态防止侧翻,通过电压检测保证自己在充足电量的情况下进行工作,同过超声波测距模块实施避障,保障车身不被撞坏。还可以通过摄像头进行路况分析,以保证机器人安全执行搜救任务。在自身安全的情况下通过人体红外和摄像头检测是否存在被困人员,同时采集周围环境的温度,湿度,大气压强和可燃气体浓度等信息,并且有北斗卫星导航系统提供精确实时的定位。3.1.2RT-Thread移植要想使用RT-Thread操作系统就需要先进行移植,移植过程也比较简单。只需要在STM32CubeMX的基础上添加上RT-Thread的包,然后勾选RT-Thread内核,由于RT-Thread使用了HardFault_Handler、PendSV_Handler、SysTick_Handler这三个中断函数,STM32CubeMX工具默认会添加进来,所以需要去掉。最后生成代码,这样移植工作就完成了。3.1.3系统初始化因本系统使用了RT-Thread操作系统,所以要首先对RT-Thread进行移植并运行起来。RT-ThreadNano是一个极简版的硬实时内核,它是由c语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的,抢占式实时多任务的RTOS。其内存占用极小,功能包括任务处理,软件定时器,信号量,邮箱和实时调度等相对完整的实时操作系统特性。平时我们在进行程序编写的时候,一般是在裸机的情况下进行开发,有了操作系统以后可以有效的帮住我们管理各种硬件资源,方便我们进行开发,当有任务需要等待的时候可以申请释放CPU资源,让其他任务运行,这样就好像很多任务同时执行一样。系统初始化首先是RT-ThreadNano内核的初始化,系统启动后从汇编代码开始运行,然后跳转到c代码,进行RT-Thread系统启动,最后进入用户程序入口main函数。在main函数中我们就可以初始化我们需要的硬件资源了,硬件资源初始化后就可以创建任务了,每个任务独立运行,互不干扰。需要用到的硬件资源包括串口模块,IIC模块,PWM模块,IO模块,外部中断等。流程图(如图3.1)。图3.1流程图Figure3.1Flowchart3.2避障模块(Avoidancemodule)3.2.1超声波模块的数据读取先初始化需要用到的硬件部分,一个超声波模块需要用到一个普通IO、一个外部中断和一个定时器,普通IO控制超声波模块的开启和关闭。外部中断用于确定超声波的状态并执行相应的动作,在第一次收到上升沿的时候进行打开计时器并进行计时,在收到下降沿的时候说明计时结束,读出时间,然后通过时间计算出前方障碍物的距离。uint32_tget_distance(void){ returnultra_distance;}voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin){ if(GPIO_Pin==ULTRA_ECHO_Pin) { //如果是上升沿,说明接收到信号 if(HAL_GPIO_ReadPin(ULTRA_ECHO_GPIO_Port,ULTRA_ECHO_Pin)==GPIO_PIN_SET) { //计时器清零 __HAL_TIM_SET_COUNTER(&htim2,0); //开启计时器 HAL_TIM_Base_Start(&htim2); } //如果是下降沿,说明测距结束 elseif(HAL_GPIO_ReadPin(ULTRA_ECHO_GPIO_Port,ULTRA_ECHO_Pin)==GPIO_PIN_RESET) { //读取计时器的值 ultra_tim=__HAL_TIM_GET_COUNTER(&htim2); //关掉计时器 HAL_TIM_Base_Stop(&htim2); //进行距离计算单位厘米 ultra_distance=ultra_tim*340/1000/2; } }}//超时回调函数,超过超声波的测量范围voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){ //停止计时器 HAL_TIM_Base_Stop(htim); rt_kprintf("distance-->%dcm\n",ultra_tim);}staticvoidultra_entry(void){ for(;;) { //超声波测距开启 ULTRA_START; rt_thread_delay(20); ULTRA_STOP; //延时500毫秒 rt_thread_delay(500);// rt_kprintf("distance-->%dcm\n",ultra_distance); }}3.2.2前方障碍物避让当搜救机器人前方存在障碍物时,通过超声波模块测得前方障碍物和搜救机器人的距离,如果检测到的距离大于安全距离则不启动避障程序,当检测到搜救机器人与障碍物的距离小于安全距离时,搜救机器人执行避障程序,首先降低搜救机器人的速度,然后将搜救机器人向左旋转90°进行避障。3.3姿态检测模块(Attitudemodule)MPU9250包括三轴加速度计、三轴陀螺仪和三轴磁力计。因为加速度/磁力计具有高频噪声(需要低通滤波),将加速度/磁力计的信号看成是音频信号,它们的信号会有很多“毛刺“,也就是说它们的瞬时值不够精确,解算出来的姿态会震荡,但长期来看姿态方向是对的。而陀螺仪具有低频噪声(需要高通滤波),即每个时刻的得到的角速度是比较精确的,使用积分就能得到旋转角度(姿态),但是积分会累积误差,因此积分到后面姿态就不对了,也就是漂移现象。加速度/磁力计和陀螺仪在频域上的特性互补,可以融合这三种传感器的数据,提高精度和系统的动态特性。然而对于原始的MPU9250来说,在进行姿态融合前需要对传感器进行校正等“预处理”。在使用各种滤波方法(如高低通滤波,EKF,Mahony)做姿态融合时,可以基于欧拉角、方向余弦和四元数等方法。欧拉角在求解姿态时存在奇点(万向节锁),不能用于全姿态解算;方向余弦可用于全姿态解算但计算量大,不能满足实时性要求;四元数,计算量小,无奇点,满足实时解算。本设计使用的是基于四元数姿态融合,Mahony滤波。3.4环境检测模块(Environmentaldetectionmodule)环境检测主要是使用BME280测量温度、湿度、大气压强,然后通过大气压强计算出海拔高度。BME280主要是通过IIC和单片机通信,首先要对IIC进行初始化,然后操作寄存器进行数据的读取。通过函数bme280GetData去读取数据voidbme280GetData(float*pressure,float*temperature,float*humidity,float*asl){staticfloatt;staticfloatp; staticfloath; bme280GetPressure(); t=bme280CompensateT(bme280RawTemperature)/100.0; p=bme280CompensateP(bme280RawPressure)/25600.0; h=bme280CompensateH(bme280RawHumidity)/1024.0; presssureFilter(&p,pressure); *temperature=(float)t; *humidity=(float)h; *asl=bme280PressureToAltitude(pressure);}3.5气体检测(Gasdetection)DO输出:TTL数字量0和1(0.1和5V)AO输出:0.1-0.3V,最高浓度电压4V左右传感器通电后,需要预热20S左右,测量的数据才稳定。这里我们直接获取模拟量然后转换成对应的浓度,发送到上位机,在上位机端进行判断,然后反馈给操作人员。先对ADC初始化,然后创建一个任务线程读取数据并进行解算。uint16_tget_mq4_value(void){ uint16_tADCVal; floatVoltage; uint16_tppm; ADCVal=HAL_ADC_GetValue(&hadc1); Voltage=ADCVal*3.3/4096; //无天然气的环境下,实测AOUT端的电压为0.5V,当检测到天然气时,电压每升高0.1V,实际被测气体浓度增加200ppm ppm=(Voltage-0.5)/0.1*200; returnppm;}3.6卫星定位模块(Satellitepositioningmodule)ATGM336H一共有三种数据类型GN、GP、BD分别代表双模模式、GPS模式、北斗模式,为了方便使用,我使用最简单的方式GPRMC,也就是最简定位信息。模块上电需要32秒的初始化时间,然后通过串口发送数据,通过程序接受到信息后进行解析,取得经度和纬度,然后在吧数据转换成百度地图格式,方便上位机进行处理和显示。数据格式:度分格式换算成百度谷歌地图的格式纬度:ddmm.mmmm北纬2236.945322+(36.9453/60)=22.615755经度:dddmm.mmmm东经11408.4790114+(08.4790/60)=114.141317换算成百度地图格式之后就可以发给上位机了,上位机收到位置信息后可以调用百度地图API显示当前的位置。ATGM336H使用串口通信,通过指令控制模块发送需要的信息,其中主要的信息是经度和纬度,首先初始化串口,然后通过串口发送命令,接着就是读取串口数据进行数据的解析。数据格式如表3.1。表3.1数据格式Table3.1Dataformat序号名称样例数据单位描述消息ID$GPRMCRMC协议的数据头<1>定位点的UTC时间161229.487格式:hhmmss:sss<2>定位状态AA:定位,V:导航<3>维度3723.2475格式:ddmm.mmmm<4>维度方向NN:北纬,S:南纬<5>经度12158.3475格式:dddmmm.mmmm<6>经度方向WW:西经,E:东经<7>对地航速0.13Knots范围:000.0-999.9<8>对地航向309.62度以正北为参考基准,二维方向指向<9>定位点的UTC日期120598格式:ddmmyy(日月年)<10>磁偏角度范围:000-180<11>磁偏方向E:东,W:西<12>校验和10<13>回车和换行<CR><LF>代表协议帧初始化完成之后,由于只需要用到$GPMRC消息,需要给模块发送指令让其之返回我们需要用到的数据 //配置显示简单信息 uint8_tcmd[]="$PCAS03,0,0,0,0,1,0,0,0*03\r\n"; HAL_UART_Transmit(&huart2,cmd,sizeof(cmd),1000);配置完成之后就需要开启串口中断进行数据的接收和解析了通过串口中断回调函数接收数据voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){ if(&huart2==huart) { switch(data) { case'$': { flag=1; rx_id=0; break; } case'\n': { flag=0; break; } } if(flag)//开始接收 { rx_data[rx_id++]=data; } else//接收完成 { rx_data[rx_id++]='\0'; rt_memcpy((char*)temp_data,rx_data,rx_id); } } HAL_UART_Receive_IT(&huart2,&data,1);}接收完成之后就是解析了,首先判断是否是以$GPRMC开始,如果是$GPRMC开始说明是我们需要的数据,之后扫描不是英文字符“,”,直到扫描到英文字符“,”,英文逗号之前的数据即为第一个数据,一次类推知道扫描到帧结束,依次取出数据进行后续处理。由于使用了操作系统,当然平时我们也是不能让单片机长期处于中断函数中的,所以串口中断函数只负责定位数据的接收,我们开一个线程负责数据的解析,从而避免占用中断太久,这样会减少我们操作系统的实时性。voidparse_location(void){ uint8_tj=0; uint8_tx=0,y=0; for(inti=0;i<rt_strlen((char*)temp_data);i++) { if(temp_data[i]==',') { ++j; ++i; } if(3==j) { loc_info[0][x++]=temp_data[i]; } if(5==j) { loc_info[1][y++]=temp_data[i]; } }}3.7本章小结(Summary)本章首先是对rt-thread操作系统做了介绍和移植,然后在此基础上对超声波避障障策略进行说明以及实现、姿态检测的算法和代码实现、温度湿度大气压强的读取和计算、气体检测、卫星定位的实现。4上位机的设计4Thedesignofthehostcomputer4.1上位机简介(Introduction)上位机设计的目的是为了使搜救机器人具有远程操控的能力,以及通过上位机能够实时显示各种参数,方便操作人员及时掌握现场的情况,以便于展开搜救,并制定详细的搜救计划,确保搜救工作万无一失,最大限度的保护国家和人民的财产以及搜救人员和被困人员的生命。上位机是操作人员进行搜救任务的核心,所以上位机需要提供很多功能,便于搜救任务的执行。4.2开发平台的选择(Developmentplatform)为了让我们的上位机更通用,不依赖特定的运行环境,需要支持网络通信等综合考虑,最终选择基于web的上位机运行环境。基于web环境的好处就是跨平台性好,只要有浏览器的地方就可以运行,而且在出现问题的时候也很容易查找。确定好运行环境之后开发语言的选择就相对比较容易了,一般情况都是使用HTML标记语言进行页面内容的显示,然后通过CSS去修饰页面的样式,最后JAVASCRIPT负责页面行为的控制。目前市面上比较流行的web(前端)开发框架有很多,没种都有其对特的性质,国内常用的一般有JQUERY、BOOTSTRAP、ANGULAR、VUE.JS等框架。VUE是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,VUE被设计为可以自底向上逐层应用。VUE的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,VUE也完全能够为复杂的单页应用提供驱动。此外还使用到了饿了么的element-ui框架和VUE进行结合开发出上位机。4.3通信系统组成(Composition)市面上的通信技术有很多蓝牙、Wi-Fi、2G、4G、ZigBee等通信技术。蓝牙技术的优点有防辐射、环保、无线自由,使用方便,缺点传输距离有限,数据传输速率低,不同设备间协议不兼容等。2G和4G通信距离远,可以覆盖到几乎所有地方,但是2G速率低,4G费用高。Wi-Fi介于他们之间,费用也不贵。所以本设计的通信系统采用Wi-Fi进行通信。再因本设计需要用到摄像头进行图像传输,通信需要的带宽大,最好能有一个即支持Wi-Fi通信又支持摄像头的设备,最终选择了树莓派zerow作为通信系统。树莓派zerow满足上面的要求,且性能强大,还可以做一些其他的工作,用来传输图像和通信非常合适,其主要负责图像获取和传输,然后单片机需要和上位机通信,单片机首先将数据进行打包发送给树莓派,树莓派将其转发给上位机。通信过程非常复杂,有些需要实时性相对较高,有的对实时性要求没那么高,比如远程控制对实时性的要求就非常高。图像传输也非常高,如果车身控制和图像不同步将会出现很严重的后果。树莓派端开启一个服务负责接收单片机串口发送过来的数据,经过解析然后发送到上位机。上位机也可以发送指令给单片机进行控制。经过对通信系统的研究,为了通信的稳定性和正确性,单片机和树莓派的通信在串口的基础上定义一套属于自己的协议,树莓派和上位机的通信采用websocket通信,底层已经有tcp协议和websocket协议负责传输的稳定性和正确性,此时不再需要自定义协议。4.4通信协议(Communicationprotocol)4.4.1自定义通信协议这里的通信协议主要是单片机和树莓派的通信协议,考虑到单片机和上位机的通信包括数据的上传和命令的接收。协议内容(如表)。表4.1协议内容Table4.1Protocolcontent第1字节第二字节第三字节第四字节后最后两字节固定协议头消息类型数据部分的长度JSON数据16位crc校验码4.4.2HTTP协议通信系统包含两种数据需要传输,一种是单片机发送给上位机的传感器数据和上位机发送给单片机的命令,还有一种是图像信息。图像的传输相对要复杂一些,以为数据量比较大,在实验了很多图像传输方式后,发现基于HTTP的图传系统实时性好,图像质量也不错,所以本设计采用的HTTP协议进行实时的图像传输。HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:首先客户与服务器建立连接,建立连接后客户向服务器提出请求,服务器接受请求,并根据请求返回相应的文件作为应答,最后客户与服务器关闭连接。客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成干上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。HTTP是一种面向对象的协议。允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。当用户在一个HTML文档中定义了一个超文本链后,浏览器将通过TCP/IP协议与指定的服务器建立连接。从技术上讲是客户在一个特定的TCP端口(端口号一般为80)上打开一个套接字。如果服务器一直在这个周知的端口上倾听连接,则该连接便会建立起来。然后客户通过该连接发送一个包含请求方法的请求块。HTTP规范定义了9种请求方法,每种请求方法规定了客户和服务器之间不同的信息交换方式,常用的请求方法是GET和POST。服务器将根据客户请求完成相应操作,并以应答块形式返回给客户,最后关闭连接。报文格式HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。请求报文格式如下:请求行-通用信息头-请求头-实体头-报文主体请求行以方法字段开始,后面分别是URL字段和HTTP协议版本字段,并以CRLF结尾。SP是分隔符。除了在最后的CRLF序列中CF和LF是必需的之外,其他都可以不要。有关通用信息头,请求头和实体头方面的具体内容可以参照相关文件。应答报文格式如下:状态行-通用信息头-响应头-实体头-报文主体状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。有关通用信息头,响应头和实体头方面的具体内容可以参照相关文件。消息的状态码一般来说,1开头的是一些信息,2开头的表示成功,3开头的表示重定向,4开头的表示客户端错误,5开头的表示服务器错误4.4.3Websocket通信协议WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC6455,并由RFC7936补充规范。WebSocketAPI也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocketAPI中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。优点较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于HTTP请求每次都要携带完整的头部,此项开销显著减少了。更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。4.5数据格式(Dataformat)JSON(JavaScriptObjectNotation,JS对象简谱)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。对象:对象在JS中是使用花括号包裹{}起来的内容,数据结构为{key1:value1,key2:value2,...}的键值对结构。在面向对象的语言中,key为对象的属性,value为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。数组:数组在JS中是方括号[]包裹起来的内容,数据结构为["java","javascript","vb",...]的索引结构。在JS中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。和XML的比较可读性:JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。可扩展性XML天生有很好的扩展性,JSON当然也有,没有什么是XML可以扩展而JSON却不能扩展的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。编码难度XML有丰富的编码工具,比如Dom4j、Dom、SAX等,JSON也有提供的工具。无工具的情况下,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON字符串,不过,xml文档
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咸阳市渭城区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 张家口市万全县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 东莞市东城区2025-2026学年第二学期四年级语文第四单元测试卷(部编版含答案)
- 山南地区琼结县2025-2026学年第二学期三年级语文第五单元测试卷部编版含答案
- 玉树藏族自治州杂多县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 思茅市思茅市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 太原市晋源区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 培训站建设计划方案
- 深度解析(2026)《2026-2027年支持实时操作系统与功能安全的微控制器内核IP在汽车与工业领域成为标准获芯片设计公司广泛授权与生态投资》
- 育人论文题目及答案高中
- 和谐婚姻家庭知识讲座
- 宠物腹部手术-胃切开术
- 宠物腹部手术-肠管侧壁切开术
- 2022-2023学年六年级下册综合实践活动茶与生活(说课稿)
- 丙戊酸镁缓释片及其制备工艺
- 警惕病从口入-课件
- 各大名校考博真题及答案心内科部分
- 中药与食物的关系药食同源
- 杭州电子科技大学-计算机学院-计算机科学与技术(学术)培养方案
- 新人教版五年级下册数学(新插图)练习六 教学课件
- GB/T 23901.2-2019无损检测射线照相检测图像质量第2部分:阶梯孔型像质计像质值的测定
评论
0/150
提交评论