何浩楠 陈宇涛 蒋占阳 陈健 施一剑
摘 要:在模擬场景下,搭建一套自动驾驶智能小车模拟系统,实现倒车入库、追踪行驶等功能。该系统基于OpenMV视觉模块,利用摄像头拍摄获得AprilTag的实时图像,并运用Micro Python编程语言识别AprilTag。通过串口将AprilTag相对于摄像头的精确3D位置发送到智能小车上的STM32单片机,对智能小车的行进方向与速度加以控制,从而实现停车与追踪。经实验验证,将AprilTag、OpenMV和STM32单片机技术相结合是可行的,能够很好地实现自动泊车及追踪行驶功能。
关键词:OpenMV;视觉追踪;AprilTag;智能小车;自动泊车
中图分类号:TP242.6 文献标识码:A 文章编号:2096-4706(2020)16-0024-05
The Application of Locating and Tracking in a Smart Car Based on AprilTag
HE Haonan,CHEN Yutao,JIANG Zhanyang,CHEN Jian,SHI Yijian
(Wenzhou University,Wenzhou 325035,China)
Abstract:In the simulation scenario,a set of intelligent autonomous car simulation system is built to realize the functions of automatic parking and tracking. Based on the OpenMV vision module,the system uses a camera to capture real-time images of AprilTag,and use Micro Python programming language to identify AprilTag. The precise 3D position of AprilTag relative to the camera is sent to the STM32 single-chip microcomputer in the intelligent car via a serial port to control direction and speed,thus realizing parking and tracking. It has been verified by experiments that the combination of intelligent car technology controlled by AprilTag,OpenMV and STM32 single-chip microcomputer is feasible,and the car can well complete the task of tracking driving and automatic parking.
Keywords:OpenMV;visual tracking;AprilTag;smart car;automatic parking
0 引 言
近年来随着视觉校准系统的发展,智能定位识别应用正在逐步渗入到工业和社会应用的各个层面[1,2],帮助人们解决了很多生活上的麻烦。随着私家车的增加,人们经常会在停车时陷入困境,很多时候,需要花费很大精力、很长时间在拥挤的停车场寻找车位,并在狭小的车道上完成停车入库,驾驶员视野的局限性和对位置的掌控力极大地限制了停车效率。为了帮助人们提高停车效率,市面上出现了很多辅助定位装置来帮助停车。市面上大多数的定位系统是基于超声波和红外线设计的[3]。但是传统的超声波和红外线定位分别有感测范围小和受光线干扰强的缺点,经常会出现定位不够准确、感应不够灵敏的问题,而且无法帮助人们寻找车位。本文所研究的自动泊车系统可以帮助人们高效地完成停车,通过追踪行驶寻找车位,并且可以完成倒车入库[4,5]。
AprilTag是一个具有3D定位功能的视觉基准系统[6]。OpenMV可以看成一个拥有视觉算法的单片机,并且可以通过串口和单片机通信[7]。AprilTag和OpenMV的结合可以有效解决精准停车入库问题,帮助实现汽车的精准定位和控制[8]。使用STM32单片机操控的智能小车模拟真实环境中的汽车,实现了在地下停车库等类似模拟环境中的自动循迹寻找空位,并完成自动空位入库停车功能。温州大学历年都有科创项目研究小车不同的智能化控制方式,完成智能车系统的开发等。本文结合作者在温州大学的课程学习、实验经历和对学校相关科创项目的参考,运用的AprilTag和OpenMV相结合的技术相较以往项目更为先进和便捷,更具现实意义。本文所设计的智能小车作为当前智能车辆的仿真车,为研究真实情况下的智能泊车提供了基础,为系统进一步实用化和工业化提供参考。
1 系统整体设计
本设计采用STM32F103C8T6作为智能小车控制模块的主控芯片,配以电源模块、电机驱动模块、OpenMV摄像头模块与AprilTag控制智能小车定位追踪,如图1所示。
1.1 AprilTag
AprilTag在概念上与QR码相似,都属于二维码[9]。不同的是,AprilTag被设计为对更小的数据有效载荷(4位~12位之间)进行编码,从而可以更有效地检测到这些数据,并且检测距离更远。不同AprilTag种类称为家族,每个家族的标记都有对应的ID,如Tag16H5家族有30个标记,每一个都有对应的ID,从0号~29号。不同家族之间在识别最远距离和识别精确度有较大区别,比如对Tag16H5家族识别的有效区域是4×4个像素点,它比Tag36H11(识别有效区域为6×6个像素点)的可识别距离更远,但是由于Tag36H11的校验信息多,摄像头对于Tag36H11的识别错误率比Tag16H5低很多,所以在本次实验中我们采用了Tag36H11家族。
1.2 主控芯片
STM32F103C8T6是一款基于ARM Cortex-M内核STM32系列的32位微控制器,程序存储器容量是64 kB,工作频率为72 MHz,工作电压2.0 V~3.6 V,工作温度-40 ℃~85 ℃。由于STM32单片机具有丰富的通用I/O端口与很高的代码效率,可以通过I/O端口控制OpenMV摄像头模块工作,并且用PWM波驱动电机工作。同时STM32系列具有低成本、低功耗的优点,可选用STM32F103C8T6作为本课题的主控芯片。
1.3 OpenMV摄像头模块
OpenMV是一款基于STM32F765VIARM Cortex M7处理器的单片机和Ov2640图像传感器的机器视觉模块。OpenMV上搭载了一个Micro Python解释器,使用Python脚本语言编程来实现一系列功能,包括I/O端口的控制、读取文件系统等基础功能,也可以实现人脸检测和跟踪、关键点提取、颜色跟踪等功能[10]。OpenMV摄像头模块可以准确识别AprilTag,从而定位出小车相较于AprilTag的空间位置。
1.4 电源模块
电源电路作用是为整个小车系统供电。其中主控芯片工作电压为3.6 V,OpenMV摄像头模块和电机驱动模块的L293D所需供电电压均为5.0 V,直流电机则需要7.2 V的供电电压。为保证小车工作稳定,采用2节3.7 V可充电锂电池串联而成的电池组作为车载电源为整辆小车供电,充满时电池组的总电压约为8.4 V,同时用电源稳压芯片7805得到各元件所需的+3.6 V、+5.0 V与+7.2 V电压。
1.5 电机驱动模块
电机驱动模块分直流电机部分和电机驱动部分。直流电机部分由两个减速比为1:48的直流减速电机为小车车轮提供动力,利用差速进行转向。电机驱动部分是L293D专用电机驱动芯片,它是一款双H桥驱动芯片,可以通过输入主控芯片产生PWM波信号来同时控制两路直流电机执行正转、反转和停止命令,输出电流可以达到600 mA,峰值時输出电流可以达到1.2 A,并且内部自带ESD保护。
2 系统软件设计
2.1 软件总体设计
智能小车软件设计主要包括STM32单片机的软件设计、OpenMV模块的软件设计和电机驱动的软件设计。小车上电后首先进行初始化,初始化主要包括设置小车的前进速度等参数初值、外部中断初始化、定时器初始化以及串口的初始化。然后打开定时器中断和串口接收中断,接收来自摄像头的数据。同时视觉模块开始扫描,获取周围环境中的AprilTag图像,并将获取的AprilTag进行图像处理和解码信息判断,将AprilTag数据发送给STM32单片机,STM32单片机接收目标信息后开始进行自动泊车,根据实时接收的数据不断调整速度,最终完成停车。
基于智能小车定位追踪的应用,将AprilTag分为追踪Tag与停车Tag两部分。布置场景时,将AprilTag粘贴于追踪轨道的上方和每个停车位的上方,并提供适当的光源,车辆顶部安装摄像头,使得AprilTag在摄像头中的图像清晰可见。开始上电时,串口初始化。STM32单片机和OpenMV建立通信,OpenMV开始扫描环境。当摄像头检测到对应的AprilTag时,OpenMV摄像头通过识别AprilTag获取3D数据信息,从而定位出小车相对于停车位的空间位置,并将获得的距离以及相对中轴线的偏差等信息反馈到STM32单片机,STM32单片机将会发送指令驱动电机做出相应的转向和调整驱动,从而实现追踪定位。系统流程图如图2所示。
2.2 AprilTag的识别
对于Tag的识别,可以计算AprilTag相对于摄像头的精确3D位置,其中检测Tag空间位置一共有6个自由度,包括3个位置参数和3个角度参数。在单片机串口中可以输出为6个变量,X、Y、Z为空间坐标轴,TX、TY、TZ为空间的3个位置量,RX、RY、RZ为3个旋转量,如图3所示[8]。因此AprilTag同时具有距离,角度和偏角三个数据,可以很精确地判断出Tag相对于小车的位置。识别过程中需要辨别Tag种类,主要是能够识别并区分Tag的不同家族不同的ID。根据确定的AprilTag家族中的编号可以设定优先级以模拟自动循迹中出现的状况,Tag编号越靠前,读取优先级越高。因为停车的优先级要高于循迹(即有空车位优先停车,若无空位则继续循迹),所以本文采用的是1号~6号为车位,两侧车位分别用奇偶加以区分。7号开始用作自动循迹。
通过OpenMV将检测到的最高优先级的Tag的信息提取出来,反馈给STM32单片机,通过flag来判断左右,通过数据来判断距离,调整转弯速度和前进速度,当接收数据与设定值相等时,即可停车。
3 环境搭建
本实验采用的测试环境如图4所示。
车库的3D模型如图4(a)所示,上方的凸起部分表示AprilTag,下方凸起部分为其地面投影,一一对应(此处仅为举例,Tag在天花板的底部如图4(b)所示,部分AprilTag未画出)。
实验用的小车尺寸为19 cm×17 cm,车库模型俯视图如图4(c)所示。根据小车的长和宽,设计的停车位尺寸为20 cm×20 cm。停车位两侧各三个,再加上中间的行车道,我们搭建的停车场尺寸为80 cm×80 cm,再根据OpenMV放置在小车上的高度和OpenMV可识别的范围,搭建车库棚高为58 cm。这个高度刚好可以稳定识别Tag,也可以使OpenMV尽可能地识别更多的Tag,若高度过高OpenMV识别Tag时会不稳定,若高度过低则识别的Tag过少,不利于小车操作。车棚尺寸设置和停车场一样,AprilTag布局实物图如图4(d)所示。
实际模型中,将用到的AprilTag分类为停车Tag和追踪Tag。小车能识别视野以内的AprilTag,根据对应的数据调整自身姿态,入库模拟如图4(e)所示。在弱光环境中,可以为AprilTag增加背光,如图4(f)所示,作为车位为空的标志,增加识别成功率。当车位有车时,关闭AprilTag背光。
4 测试结果分析及处理
4.1 自动循迹
小车循迹根据模拟环境简单划分直道,转弯元素。可获取的空间元素有6个,可根据具体情况具体使用,本文根据模拟环境只采用了其中的一部分,如X轴的偏移量,用以矫正小车在运动过程中左右偏离,保证小车运行姿态的稳定。
直道元素中,根据具体电机型号、小车样式等,设置合适的运动速度以达到预期效果;
弯道元素中,除了考虑小车外,还需要考虑Tag的布置间隔、布置的角度偏移等影响因素,同时仍需考虑整体的Tag的布局间隔,以确保摄像头视野内Tag数量合适,处理稳定等细节性问题。
综合以上考量后,小车在最终测试中能够达到较好的预期效果,直道稳定,弯道圆滑,符合整体预期效果。
直线和弯道的相关代码:
x_line_range = 2;//X轴校正可偏移的误差限制
speed_high = 3000+(x-1)*20;
speed_low = 3000-(x-1)*20; //转向时左右车轮差速
if (x_flag == 1 && x > x_line_range)
//左转
else if (x_flag == 2 && x > x_line_range)
//右转
else if (x < x_line_range)
//偏移校正
参数说明:代码中的x表示AprilTag六个自由度中X自由度上的值;通过实验数据来设置小车X方向上的误差x_line_flag为2个单位(该单位值和OpenMV互相对应);小车电机在当前电池供电下PWM参数对应3 000为基础值,左右差速比例由实际测试得出;电机差速来实现小车的左右转动(大差速)和姿态微调(小差速)。
4.2 自动泊车
依托环境搭建,确保小车在自动循迹过程中,左右两侧的AprilTag在其摄像头视野范围之内同时可以稳定检测并获得对应的空间数据。数据交由STM32单片机进行针对处理。
当两侧有空位时:背光环境确保了AprilTag处在合适的灯光环境中;
当小车经过时识别Tag,做出简单判断(模拟发现空车位,在实际应用中,若车位已被占用则关闭背光灯,该Tag不再被识别);
隨后转变车轮的左右差速来进入车库,进入过程中STM32单片机通过OpenMV不断更新数据,同时调整对应的车速、差速(模拟车辆入库时左右间距判断);
通过对AprilTag的角度偏移量设置,小车最后进行一定程度的左右微调至停靠(模拟车辆即将停靠时车身前后左右的微调并减速至停靠)。
相关代码如下:
If (r >= 15)//根据旋转角判断是否进入微调
//电机差速
else if (r < 15)//进入微调模式{
if (y < 47){//微调
if (x_flag == 2 && x >= 28)//判断小车姿态向左偏离
//校正
If (x_flag == 1 && x >= 25)//判断小车方向偏右
//校正
else if (x <= 25)//正常运行
//保持
}
else if (y >= 47)//小车停车的安全距离
//停车
参数说明:x_flag表方向是左还是右,x_line_flag表限定值,后续由此进行细微调整;y表示Y方向上AprilTag的停车位置,r表角度偏移量,其设定值均源自实际测量;停车通过STM32单片机控制电机停转来实现。
5 结 论
本文利用AprilTag及OpenMV模块,在STM32单片机操控的智能小车上实现了循迹追踪和定位入库的功能。通过实验测试证明,小车自动定位和追踪的效果满足既定要求,可以为智能停车系统设计提供参考。在精度要求更高的场合下,可以有如下两个改进的方向:
一是受客观因素影响。本文采用两轮小车进行模拟,如何避免入库不准造成偏差出现碰撞等问题以完美入库是我们一直所思考的。从客观环境角度来说,比如采用斜式停车位可以在一定程度上减小车辆入弯的角度和所需要的空间以更贴合完美入库。
二是在日常生活中。倒车入库和侧方位泊车等特定环境对驾驶员的个人技术有较高程度的要求,如侧方位停车过程中,有前后距离窄,需要操纵次数多等问题。如果在车位不够深时实现车辆自动侧方停车,将使该系统更具实用价值。
参考文献:
[1] 田媛.工业机器人视觉测量系统的在线校准技术研究 [J].南方农机,2019,50(6):167-168.
[2] 裴小娜,潘洪刚,魏红彦.基于激光测量的机器人智能定位系统 [J].激光杂志,2019,40(4):45-49.
[3] 陈乐鹏,谭晓东,曹江浩,等.超声波定位系统智能跟随小车设计 [J].科技创新与应用,2019(35):24-26.
[4] 吴晓蝶,于金丽,李胜楠.一种车辆入库自动循迹停车系统的方案设计 [J].电脑知识与技术,2019,15(31):236-238.
[5] 姚锡钦,林烨,陈苏阳.基于April Tag标记定位的自动泊车系统实现 [J].电子产品世界,2018,25(8):39-42.
[6] ABBAS S M,ASLAM S,BERNS K,et al. Analysis and Improvements in AprilTag Based State Estimation [J]. Sensors,2019,19(24):1-32.
[7] 牛国臣.基于OpenMV的类人机器人教学实践[J].计算机教育,2019(10):38-41.
[8] 梅妍玭,傅荣.基于openMV的小车定位系统研究 [J].扬州职业大学学报,2017,21(4):46-48.
[9] WANG J,OLSON E. AprilTag 2:Efficient and robust fiducial detection [C]//2016 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS).Daejeon,South Korea:IEEE,2016:4193-4198.
[10] 宋雷震,李笑笑,林翔,等.基于OpenMv3视觉家庭安防机器人 [J].科学技术创新,2019(26):95-96.
作者简介:何浩楠(1999—),男,汉族,浙江台州人,本科,研究方向:电子信息工程;陈宇涛(1999—),男,汉族,浙江台州人,本科,研究方向:电子信息科学与技术;蒋占阳(1999—),男,汉族,浙江台州人,本科,研究方向:电子信息工程;陈健(1998—),男,汉族,浙江温州人,本科,研究方向:电子信息科学与技术;通讯作者:施一剑(1989—),男,汉族,浙江温州人,讲师,博士,研究方向:电子信息科学与技术。