基于GPS的两轮直立循迹车的设计与实现
2020-12-14张杨扬叶金宇刘昌杰卢政沈志陆梦雪
张杨扬 叶金宇 刘昌杰 卢政 沈志 陆梦雪
摘要:汽车自动驾驶技术是当前非常热门的技术,众多科技工作者相信在将来汽车自动驾驶技术将会普及开来,出现在每一个普通大众的视野中。自动驾驶离不开电子通信和计算机技术的支持,如传感器、大数据技术等。本文利用摄像头传感器,GPS传感器,电磁传感器,陀螺仪等设计了自动循迹的两轮平衡小车,实现自动巡航功能。
关键词:自动驾驶;GPS传感器;平衡车;MPU6050
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2020)28-0001-03
Abstract:Autonomous driving technology is currently a very popular technology. Many scientific and technological workers believe that autonomous driving technology will be popularized and appear in the eyes of every ordinary public in the future. Autonomous driving is inseparable from the support of electronic communication and computer technology, such as sensors and big data technology. In this paper, a two-wheel balance car with automatic tracking is designed by using camera sensors, GPS sensors, electromagnetic sensors, gyroscopes, and so on,to achieve the automatic cruise function.
Key words: automatic driving;GPS sensor; balance car;MPU6050
1 引言
本文设计的GPS两轮平衡车是对无人驾驶技术的仿真设计,可以做到启动无须人为干涉就能达到平稳安全运行的目的。该技术可用于无人驾驶和辅助驾驶系统,减少交通事故的发生率,保障车主的安全。设计中使用的传感器主要有MPU6050姿态传感器,GPS定位传感器,摄像头道路识别传感器等,通过对这些传感器采集的数据进行处理,来控制左右电机的速度从而控制车辆的运行状态,达到预期的设计目的。本设计的思路与方法都融入了无人驾驶的设计思想,对无人驾驶技术的研究与发展极具参考意义[1]。
2 系统的硬件设计
硬件部分系统的主控处理器采用的是飞思卡尔公司的32位处理器MK60DN512[2]。该处理器的功能十分强大,外设丰富,能够满足数据采集,运算与输出任务的要求。系统硬件结构图如图1所示。
2.1 MPU6050车辆姿态获取
MPU6050是一种姿态获取传感器。该处理器可以获取3轴加速度和3轴角速度,通过特定的姿态处理算法可以获取设备当前的航向角,俯仰角和横滚角。该传感器内部还带有一个数字温度传感器,可以用来做温度补偿算法,以达到数据校准目的,减小实际测量中的细小误差,使得测量结果更加准确。MPU6050传感器可以用于航空航天,无人机技术,平衡车技术等。其使用的通信接口是比较常见的IIC接口,通过数据线和时钟线可以实现与MCU通信,获取相关数据。由于姿态获取是一个非常烦琐,算法复杂的步骤,因此这里借助了第三方库来帮助获取姿态数据,以达到更快应用开发目的。图2和图3分别为MPU-6050实物图和原理图。
2.2 ATGM332D北斗定位模块
本次设计中使用了ATGM332D北斗和GPS双模定位模块,该模块具有成本低,体积小等诸多优点,多用于车载定位系统,可穿戴设备等生活中的方方面面。该模块自带一个陶瓷天线,由于陶瓷天线接收效率相比较有源天线接收效率差许多,这次设计我们使用了有源天线,来完成数据接收,实现精确定位。通过模块输出的数据可以获取北京时间、经纬度、海拔高度、速度和航向等常用的基本信息,还可以获取当前的定位质量和定位模式、连接的GPS系統卫星数量和北斗系统卫星数量。这样处理以后数据更加的直观。图4为定位模块与单片机引脚连接图,图5为定位模块电路图。
2.3 测速模块
本设计中使用的测速模块是FC接口的迷你512线编码器,旋转360度输出512个脉冲,编码器有6个输出引脚,分别为VCC,GND,A相输出,零位输出,方向输出和NC输出。设计中我们用到了VCC,GND,A相输出和方向输出,通过方向输出引脚可以判断编码器的旋转方向,据此判断出车辆的运行方向。编码器的实物图和接口示意图如下。图6为编码器实物图,引脚电平信号输出如图7所示。
2.4摄像头采集模块
摄像头传感器采用的是山外120度鹰眼摄像头模块,原始图像通过若干逻辑器件处理后变为0和1数值组合的黑白图像,极大减轻运算量,效果出众[3]。通过对摄像头模块设置,鹰眼输出可高达150帧,采集时间更短。感光芯片采用BGA封装OV7725低照度超好,图像清晰,3.3V的工作电压,低压低功耗。该模块完全兼容飞思卡尔MK60DN512芯片。摄像头实物如图8所示,引脚接口如图9所示。
3 系统的软件设计
3.1 MPU6050的数据获取与处理
通过MCU可以读出MPU6050的三轴加速度数据和三轴角速度数据,但是实际使用中并不会用这些原始数据来控制平衡车的姿态。实际使用中需要的数据是姿态数据,即三轴偏角,相对于地理坐标系的X轴、Y轴和Z轴的偏角。通过这三个轴的偏角,可以得到当前平衡车的姿态,从而对其加以控制。要想得到三轴偏角,首先需要获取姿态传感器的原始数据,通过算法对原始数据进行姿态解析,获取三轴偏角。由于这一过程的实现复杂而烦琐,工作量较大,涉及的知识点也较难,我们选择使用第三方姿态解析库来获取三轴偏角。姿态解析库内置于该款传感器,自带数据运算处理功能,不需要使用到MCU,该过程可以理解为DMA,由于不消耗CPU资源,因此处理器有时间去处理其他实时性更高的运算,加快系统的实时响应速度。其中俯仰角用于平衡车直立稳定的控制,航向角用于辅助车辆转向的控制,采用PID控制算法[4],能够满足设计要求。
3.2 ATGM332D北斗定位模块数据获取
定义模块采用的是串口通信[5],利用MK60DN512的串口3与模块连接,借助内存管理算法向單片机动态申请内存来存储接收到的定位数据,然后通过SPI接口驱动内存卡,把每次采集到的定位信息存储于内存卡中,形成一个完整的运行路径。定位模块的数据如下:
$GNGGA,084852.000,2236.9453,N,11408.4790,E,1,05,3.1,89.7,M,0.0,M,,*48
$GNGLL,2236.9453,N,11408.4790,E,084852.000,A,A*4C
$GPGSA,A,3,10,18,31,,,,,,,,,,6.3,3.1,5.4*3E
$BDGSA,A,3,06,07,,,,,,,,,,,6.3,3.1,5.4*24
$GPGSV,3,1,09,10,78,325,24,12,36,064,,14,26,307,,18,67,146,27*71
$GPGSV,3,2,09,21,15,188,,24,13,043,,25,55,119,,31,36,247,30*7F
$GPGSV,3,3,09,32,42,334,*43
$BDGSV,1,1,02,06,68,055,27,07,82,211,31*6A
$GNRMC,084852.000,A,2236.9453,N,11408.4790,E,0.53,292.44,141216,,,A*75
$GNVTG,292.44,T,,M,0.53,N,0.98,K,A*2D
$GNZDA,084852.000,14,12,2016,00,00*48
$GPTXT,01,01,01,ANTENNA OK*35
进行简要的分析,这里我们只解读几个重要的数据:
(1)天线状态输出:$GPTXT,01,01,01,ANTENNA OK*35,Ok 代表天线已经检测到,open 代表天线断开;
(2) GPS定位信息:$GNGGA,084852.000,2236.9453,N,11408.4790,E,1,05,3.1,89.7;
(3) 地理定位信息:$GPGLL,2236.9453,N,11408.4790,E,084852.000。
软件设计中需要先查看天线状态是否正常,当天线状态正常后,接收到的数据才是有效数据,然后存入到内存卡管理。重复行进的路段可以通过读取内存卡的定位数据来进行预处理,从而达到更好地控制效果。
3.3 车辆速度参数获取
本设计中使用MK60DN512处理器内部正交解码外设,设置读取周期读取正交解码脉冲计数寄存器就可以获取单位时间内的脉冲数。对于512编码器而言,读取的数据除以512就可以获取到车辆单位时间内的轮胎转速即车辆运行速度。另外为了精准的控制读取速度,软件中采用定时器周期性读取,定时时间为20ms,定时器优先级为最高。这样可以防止在读取速度时被其他优先级更高的中断打断,从而造成速度的误差,不利于控制车辆的稳定运行。速度的计算公式如下:
V = (正交解码通道值/512) × (1/定时时间) ×轮胎周径 (m/s) (1)
程序的设计思想来源于公式(1)。速度稳定控制采用PID算法和模糊控制算法来实现,在实际应用中我们发现添加模糊控制算法使得运动控制效果更佳,但同时增加程序调试难度。
3.4 速度输出控制
本设计采用的机械结构是2轮直立平衡车,全车的运行主要依赖于2个电机的旋转。左右电机转速相同可以使车辆保持直线行驶,左右电机速度有差异就可以实现对车辆的转向控制。通过MK60DN512处理器的PWM输出通道控制电机的速度,使用4路PWM波完成电机的转速与转向,采用PID算法控制。PWM1和PWM2控制左电机,PWM3和PWM4控制右电机,具体控制情况如下:
3.5 人机界面设计
本次设计中采用0.96寸OLED显示屏,在实际测试使用中发现该款屏幕无法显示摄像头采集的图像,因此摄像头采集的图像通过无线串口上传给上位机,OLED屏幕上只显示一些基本的采集参数和调试参数,方便用户直观的判断车辆当前的工作状态。
4 系统调试设计
4.1 USMART参数调试
本设计无线调参软件设计功能非常强大,代码量也非常多,在这里只简单介绍一下基本原理,思路与使用技巧:
(1) USMART是一种专为微处理器MCU开发的一种命令调试工具[6],可以实时修改系统参数,无须重新下载程序就可以改变设计效果,加快开发速度,也减少重复下载程序的烦琐过程,减少Flash的使用量,增加MCU的使用时间。具体工作过程是通过串口发送命令给单片机,然后单片机收到命令之后调用单片机里面对应的相关函数,并执行,同时支持返回结果。
(2) USMART调试过程。串口调试助手发送函数命令Usmart_change_data(26,3000,200);单片机接收到命令之后,解析命令,调用对应的函数Usmart_change_data(26,3000,200);执行函数:Usmart_change_data(26,3000,200)。
(3)USMART文件组。usmart.c负责接收串口的数据,usmat_str.c负责串口发送数据的函数名提取和函数参数解析,usmart_config.c负责管理系统函数。
(4) USMART系统命令。USMART有7个系统命令,主要包括:help獲取帮助信息、list可用的函数列表、id:可用函数的ID列表、hex参数16进制显示、dec参数10进制显示、runtime开启关闭函数运行计时。
所有用户需要调用调试函数都需要在usmart_config.c中声明,声明后的函数即可被调用。
4.2 参数掉电保存
参数掉电保存的目的是把调试参数放在掉电不丢失的存储器件中,比如单片机系统常用的存储芯片AT24C02,W25Q64等。由于MK60DN512处理器芯片的Flash具有存储功能,因此可以把系统参数保存在Flash里,当系统第一次开机时先读取Flash里面的参数,然后再修改单片机RAM里面的系统参数,这样就可以避免反复下载程序的烦琐操作。实现USMART修改参数需要在USMART调用的函数中加入Flash写操作函数,因此可以把USMART调试的参数写入到Flash中,下次开机时可以直接读取执行,方便程序调试。
5 结语
本设计采用MK60DN512处理器为核心控制芯片,完成了两轮直立自动循迹小车的设计,符合设计要求。在设计中添加了一些方便用户使用的调试软件设计,采用USMART调试和Flash参数保存来减少烦琐的操作,MK60DN512处理器负责对各模块的数据进行处理,两轮直立循迹车运行稳定,可靠性较高,具有一定的实践指导意义。
参考文献:
[1] 高奇琦.共享智能汽车对未来世界的影响[J].人民论坛·学术前沿,2017(20):39-47.
[2] 闫琪.智能车设计"飞思卡尔杯"从入门到精通[M].北京:北京航空航天大学出版社,2014.
[3]王庆有.图像传感器应用技术(第2版)[M].北京:电子工业出版社,2013.
[4] 王祎晨.增量式PID和位置式PID算法的整定比较与研究[J].工业控制计算机,2018,31(5):123-124.
[5] 张毅刚.单片机原理及接口技术(C51编程)[M]. 北京:人民邮电出版,2016.
[6]谭浩强.C程序设计(第五版)[M].北京:清华大学出版社,2017.
【通联编辑:王力】