APP下载

基于April Tag标记定位的自动泊车系统实现

2018-09-12姚锡钦林烨陈苏阳

电子产品世界 2018年8期

姚锡钦 林烨 陈苏阳

摘要:系统采用STM32F103系列单片机作为自动泊车控制系统和小车控制系统的核心,控制装置通过按钮选择小车停车位并通过无线模块发送给小车,实时通过OpenMV摄像头检测小车顶部的April Tag标记来获取小车的位置及角度,实现小车自动驶入停车位。小车通过控制装置的反馈来获取自己的当前位置,同时利用麦克纳姆轮的水平位移,让小车更加精准快速的到达停车位。

关键词:STM32F103;April Tag;麦克纳姆轮;OpenMV

DOI: 10.3969/j.issn.1 005-5517.2 018.7.011

0 引言

本设计为2017年“瑞萨杯”大学生电子设计竞赛高职高专组自动泊车系统(L题)的解决方案,本题的核心要求是设计并制作一个泊车系统,要求电动小车能自动驶入指定的停车位,停车后能自动驶出停车场。为了达成核心要求,我们设计了这套使用麦克纳姆轮做小车车轮的方式使小车具备全向移动能力,并通过OpenMV识别定位April Tag来定位小车位置的自动泊车方案。通过利用OpenMV在图像识别定位开发方面简单快速的特点,以及麦克纳姆轮全向移动的能力使得纠偏算法大大简化。使得我们得以在紧张的比赛时间内完成本套方案。

1 系统整体方案

系统整体结构如图1所示。本系统由小车部分以及控制器两大部分组成,其中小车部分由STM32单片机、无线模块、测速模块、检测碰撞电路、电机控制电路、机械结构组成:STM32单片机通过无线模块接收来自控制器的目标车位以及小车当前坐标的数据流,在STM32单片机中进行拼接格式化后小车即可获知自身的实时坐标以及要前往的目标车位。运动过程中由于使用麦克纳姆轮进行移动,且考虑到小车电机运动特性参数不会绝对一致,故使用由红外光电对管以及码盘组成的测速模块对车轮进行测速,并在STM32中做每个车轮的转速PID实时控制小车车轮转速符合麦克纳姆轮运动控制函数计算出的单个轮速度。由于题目中要求小车停入车位以及驶出车位需要有相应的声光提示,且在小车调试过程中由于小车处于移动中,不方便在外部接入串口线进行调试,故需要相应的可控LED以及蜂呜器发光发声提示,辅助程序调试。液晶显示模块用于显示无线模块初始化情况,以及碰撞次数。电源部分使用两节18650锂电池串联作为总电源,其中电机驱动供电为电池直供的最高8.4V,最低6V的电源,单片机等其他控制检测电路为经过降压稳压后的5V电源,并在单片机最小系统板上由LDO进一步稳压为3.3V。检测碰撞方面有与场地配合来检测与场地碰撞的检测碰撞电路组成。控制部分主要由摄像头、液晶显示模块、语音录放模块、激光检测模块、无线模块组成,其中摄像头用于跟蹤小车位置,液晶显示模块用于显示当前车位以及小车行驶信息,同时使用语音录放模块进行播报,激光检测模块用于检测小车进入场地以及驶出场地,并计算时间差,无线模块用于向小车发送数据流。

2 检测碰撞电路

因题目中有要求小车在场地中移动的过程中要能记录小车碰撞场地隔板的次数。故需要制作相应的检测碰撞电路来检测与隔板的碰撞,可参考图2、图3、图4,思路为:在场地隔板上可能碰撞的区域贴上一条有一定宽度的铜箔,在小车上方安置一个平台,并在平台四周上下间隔一定高度贴两圈铜箔,当没有发生碰撞时,小车平台上两圈铜箔不导通,一旦发生碰撞,场地隔板上的铜箔将小车平台上的两圈铜箔导通,单片机检测铜箔被导通则判断发生了碰撞,其原理类似一个常开式按钮。

3 摄像头模块

由于需要实时获取小车在场地中的位置,并将小车坐标通过控制器实时发送到小车并进行反馈控制。故需要保证小车在场地中能实时被捕获并要求小车移动过程中丢失几率尽量低,且坐标数据刷新率要求高。故选择使用OpenMV配合April Tag来实现定位。OpenMV是一个开源的机器视觉模块。相较于传统摄像头+单片机做硬件,自己写图像识别处理算法的方式,OpenMV使用PytHon语言(通过MicroPytH。n解释器在STM32F4或STM32F7上运行PytHon程序),开发速度快。一些常用功能所需的算法已经封装成PytHon库,可以直接调用,并有示例程序参考。在比赛中,由于开发时间特别宝贵,故选择使用OpenMV做摄像头模块,可以大大提升开发速度,并在数据刷新率上相对于树莓派+OpenCV有优势,在小车移动过程中丢失几率方面优于普通摄像头+STM32自写算法,通过将OpenMV固定于场地正上方,并俯视全场,小车上方平台固定April Tag标签来进行追踪,小车上的April Tag标签安装示意可参照图6。可以得出小车在摄像头画面中的XY坐标以及旋转角度,摄像头俯视场地时画面如图5。该方案虽在当前项目中具有优势,但由于使用STM32F7单片机,RAM容量较少,不能处理高分辨率图片,使得其定位精度成为一大瓶颈,且由于分辨率低,导致April Tag标签需要在摄像头画面中占有一定面积才可被稳定跟踪识别,故需要制作更大尺寸的April Tag标签或者将April Tag标签距离摄像头的高度差拉近(在车身上抬高April Tag标签高度)来补偿分辨率过低的问题。

4 麦克纳姆轮

本题目中有两个平行式车位,要求小车能实现侧方位停车,我们在初期考虑的时候就以要求停车过程中零碰撞为目标,故选择麦克纳姆轮作为小车车轮,小车使用的麦克纳姆轮实物图如图7。相对于普通车轮,麦克纳姆轮通过对4个车轮转动方向和速度的协调控制,可以使车体在运动平面内的任意方向上移动、转动和漂移,即运动中可以不改变自身的方向),这可以很容易实现侧方停车的要求,并且可以大大简化在正常行驶过程中纠偏算法。在电机方面,由于车身宽度以及其他重量体积方面的考虑,使用普通的微型有刷直流电机配合20格的普通光电码盘配合光电对管对电机进行测速后进行转速PID控制,由于电机输出轴经过减速机构后连接到麦克纳姆轮进行驱动,且测速用光电码盘也位于减速后的轴上,码盘格数也过少,故测速效果十分不理想,导致PID控制效果不理想。有条件可使用步进电机或在电机直接输出轴上通过光电码盘进行测速。

5 软件设计

软件主要为小车上STM32程序以及控制器STM32程序,以及OpenMV上个Python脚本,其中OpenMV中的PytHon实现了April Tag标签的追踪,并将April Tag标签的位置信息和角度信息打包成JSON格式的数据包通过有线TTL串口发送至控制器上的STM32单片机进行处理,控制器上的STM32单片机通过使用CJSON库对来自OpenMV的JSON数据进行解析,提取出相应数据后打包成小车对应的数据包格式通过无线模块发送给小车,更改数据包格式主要是因为在STM32单片机中解析JSON会消耗大量RAM以及CPU时间,故需要更换数据格式,且需要发送至小车的数据主要有两大类,分别是坐标角度数据以及车位数据,故在数据包中加入包类型来区分两大数据类型。小车收到车位数据以及坐标角度数据后根据小车中的坐标点计算小车当前坐标与小车目标坐标的误差,得出补偿误差用的XY方向向量长度。将得出的向量长度数据输入麦克纳姆轮运动计算函数算出每个轮子的轮速度,并传递给车轮转速PID程序进行车轮转速控制,其中得出误差并进行补偿控制的部分由于克纳姆轮运动计算函数的参数为X方向向量长度以及Y方向向量长度以及旋转角速度,故可直接使用小车当前在摄像头中的坐标与目标在摄像头中的坐标的XY误差分以及小车在摄像头中的旋转角度直接分别乘以系数来作为麦克纳姆轮运动计算函数的参数进行位置补偿。

6 结论

本文设计方案结构较为简单,且实现容易,特别在麦克纳姆轮与OpenMV和April Tag的配合方面,大大简化了算法以及硬件电路设计难度和机械安装难度。并且有一定可靠性,在非理想状态下(例如电机运动出现误差,麦克纳姆轮安装出现误差)表现出一定的鲁棒性。

参考文献:

[1]林烨基于PID算法的水温控制系统设计[J].山西科技,2011,26(3):111-113

[2]王一治,常德功Mecanum四轮全方位系统的运动性能分析及结构形式优选[J].机械工程学报2009(5):307-310

[3]侯彬,李亚明.麦克纳姆轮技术及其在船用轮式设备中的应用[J].船舶工程,2011(3):84-87

[4]石维亮,王兴松,贾茜基于Mecanum轮的全向移动机器人的研制[J]機械工程师,2007(9):18-21

[5]Abdelkader I,EI-Sonbaty Y,EI-Habrouk M.OPENMV: A PYTHON POWERED, EXTENSIBLEMACHINE VISION CAMERA[C]// Internat}onal Conference on Computer Graphics,VISUallZatIOn.C0mDUter VISlOn and lmaqe ProCeSSInq 2017