基于单片机与LabVIEW的自动泊车系统设计与实现

2022-12-26 12:54袁子阳熊福力
计算机测量与控制 2022年12期
关键词:泊车舵机车位

袁子阳,熊福力

(西安建筑科技大学 信息与控制工程学院,西安 710055)

0 引言

在我国交通事业逐渐兴起的背景下,人们对汽车的功能需求逐渐提高,如何促进自动泊车系统的高效发展,促进其向智能化方向进行推进,变得尤为重要[1]。一方面,由于我国基础设施建设水平与汽车数量增长速度之间不匹配,汽车数量的爆炸性增长使得公路、街道、停车场变得拥挤不堪;另一方面,越来越多的新手司机上路,加剧了这一状况,增加了交通事故发生的概率[2]。复杂的停车环境和狭小的停车泊位,为新手驾驶员的安全停车带来了困扰,增加了停车过程中的风险,而自动泊车系统在汽车中的实际应用很好地解决了这一难题[3]。

自动泊车系统是一种通过探测车辆周围环境信息来找到合适的泊车位,从而控制车辆的转向、速度,使得车辆能够自主驶入泊车位的系统。相比于人工泊车事故率高、传统倒车雷达智能度低,自动泊车系统提高了车辆的智能化水平和安全性,进一步降低了新手司机驾驶车辆的难度,也为将来实现车辆的自动驾驶打下基础[4]。

国外汽车行业发展早,技术成熟,对自动泊车的研究开展的较早[5]。Cai等人[6]提出了一种在狭窄垂直停车位中停车的路径规划方法,根据环境感知空间和停车位大小。Shaaban等人[7]使用灰度图像识别停车位,通过实时监控停车位是否可用从而引导司机将车停入车位。Hongbo等人[8]提出了一种基于轨迹规划的自动泊车方案,对车辆的力学模型进行分析,建立车辆转向模型和泊车模型。Petrov等人[9]为实现对车辆转向的快速控制,提出了两种饱和控制,能够实现在不同大小的车位泊车操作。许多外国车企,如大众、福特和别克等多种车型都纷纷搭配了自动泊车系统,且技术愈发成熟[10]。

在国内,朱鹏飞等人[11]提出了一种基于多传感器融合的自动泊车框架,运用PreScan和Matlab/Simulink联合仿真,对建立的虚拟场景进行车位检测从而实现自动泊车。邢玲玲等人[12]通过程序控制硬件模块对周围环境信息的采集、计算,模拟出泊车路线,最终实现了自动泊车控制系统。叶林铨等人[13]结合了车辆运动学和避障的约束,建立最优控制模型,采用了伪谱法来解决泊车过程中时间最优的控制问题。李红等人[14]以汽车的运动学模型为基础,研究了自动泊车的自适应控制,提出以实时坐标作为车身航向角补偿的目标。在Matlab下进行了仿真实验,证明了其可行性。

学者对自动泊车系统的设计展开了较多研究,但大多数研究都基于仿真实验,且与实际车辆泊车过程存在一定偏差,因此本文设计了一种基于单片机与LabVIEW的自动泊车系统。采用与实际车辆运动规律类似的汽车模型作为研究对象,利用超声波传感器以及霍尔编码器测量泊车区域大小信息,依据车辆大小以及车辆运动规模搜索符合泊车条件的车位,通过预先设定的程序指令控制车辆自动泊车入位,并将车辆状态信息通过WIFI传输至上位机,通过上位机界面对泊车过程进行实时显示,确保车辆在安全的前提下完成整个自动泊车过程。

1 自动泊车系统方案

自动泊车系统结构如图1所示。系统由两大部分组成,即下位机(汽车模型)部分和上位机(PC机)部分,两部分之间采用WIFI进行无线通信。下位机部分主要包括一些控制模块如电机驱动模块、舵机驱动模块,同时还包括数据采集模块如超声波测距模块、红外避障模块以及测速模块。此外还包括与上位机之间进行数据传输的无线WIFI通信模块。上位机部分主要包括PC机,通过LabVIEW对下位机传输过来的数据进行处理计算从而实现车位轮廓显示、倒车轨迹绘制、障碍物报警以及车速实时显示功能。

图1 自动泊车系统结构框图

2 系统硬件结构设计

2.1 硬件总体方案设计

本系统所采用的四轮汽车模型如图2所示。通过舵机控制车辆前轮转向,利用直流减速电机提供后轮驱动,同时电机自带霍尔编码器,可以用来测量车辆行驶距离以及车速。车辆侧面安装的超声波传感器用来测量车辆与侧方障碍物之间的距离,红外传感器用来避免车辆与前后方物体发生碰撞,无线WIFI模块用来发送或接收数据。

图2 汽车模型

2.2 硬件电路设计

2.2.1 硬件选型及总体电路设计

本系统采用STC89C52单片机[15]作为汽车模型的主控芯片,其具有性价比高、体积小、控制能力强、低功耗以及易扩展等优点。超声波传感器采用RCWL-1601,其测量周期为50 ms,相较于HC-SR04更短,同时对于棉质及不规则物体的测量精度也优于HC-SR04[16]。由于超声波传感器在测距的过程中需要关闭单片机中的系统中断,以减小测量结果与实际距离之间的误差。而在利用霍尔编码器测量车辆行驶距离时,需要利用单片机的外部中断,若关闭中断,则会丢失关闭中断期间霍尔编码器所产生的脉冲信号,从而导致测量结果产生较大误差,进而影响到自动泊车过程。针对该问题,本系统所采用的解决方案为:使用第二个单片机作为从单片机,专门测量霍尔编码器所产生的外部中断信号,并将数据通过17根信号线发送至主单片机。电机选择520编码器直流减速电机,其具有寿命长,动力强劲,力矩大等优点[17]。同时电机自带AB双向霍尔编码器,电机每转动一圈,编码器输出390个脉冲,方便测量车速与车辆行驶距离。舵机所采用的型号为MG995,其工作扭矩为13 kg/cm,最大转动角度为180°,可以实现汽车前轮的转向。无线WIFI通信模块采用ESP8266,其具有串口透传功能,传输可靠性好,最大传输速率为460 800 bps。红外检测模块通过红外线的发射与接收来检测障碍物,其测量距离为2~30 cm,可通过电位器旋钮进行调节。系统总体硬件电路设计如图3所示。

图3 系统总体硬件电路图

2.2.2 电机驱动模块电路设计

本系统所采用的电机为520编码器减速电机,其额定电压为12 V,因此电源使用12 V充电电池组,电机驱动模块采用L298N,其接口说明如表1所示。

表1 L298N电机驱动模块接口说明

若使用该模块分别控制两个电机,则需要单独调速以使它们的转速相同,因此本系统将两个电机并联,以使它们的电压相同,进而转速相同,使用L298N的一对输出来控制两个电机。L298N控制直流电机状态如表2所示。

表2 L298N控制电机状态表

2.2.3 舵机驱动模块电路设计

本系统所采用的舵机型号为MG995,其工作电压为3.0~7.0 V,工作电流为200 mA,而单片机输出电流为几十毫安,无法驱动舵机,解决方案是使用一个降压模块给舵机单独供电。此外,由于舵机的控制需要20 ms的周期信号[18],且转动角度随高电平占空比的变化而变化,即需要使用单片机中的定时器中断来控制。而当超声波测距时又需要关闭系统中断,以提高测量精度。解决方案是通过一个继电器来控制舵机的电源,当需要控制舵机转动时,首先打开继电器,然后再控制舵机,否则关闭继电器。5 V继电器模块接口说明如表3所示。

表3 5 V继电器模块接口说明

MG995舵机的控制需要一个20 ms的周期信号,其中高电平范围为0.5~2.5 ms,总间隔为2 ms。在这20 ms内,高电平的占空比决定了舵机转动的角度。在20 ms内,若高电平为1.5 ms,舵机将向90°的方向转动(通常称为中立位置,对于180°舵机来说,就是90°位置);若高电平小于1.5 ms,舵机将向0°方向转动;若高电平大于1.5 ms,舵机将向180°方向转动。

3 系统软件结构设计

3.1 软件总体设计

系统软件总体流程如图4所示,首先单片机上电后系统初始化。初始化完成之后电脑端连接系统中WIFI模块所发出的WIFI信号,连接成功之后运行上位机程序,与下位机建立连接。当上位机向下位机发送自动泊车命令后,车辆开始执行自动泊车过程,同时每隔一段时间发送车速数据至上位机进行显示。自动泊车过程开始时首先需要搜索合适的停车区域即车位,当搜索到合适的车位之后,系统开始控制车辆自动泊车入位,与此同时发送车位大小数据(长和宽)并每隔一段时间发送车辆相对车位的位置数据,上位机通过计算实时绘制车辆运动轨迹。在自动泊车过程中若车辆前后方有障碍物距离过近,则车辆停止并将提示信息发送至上位机,待障碍物消失后继续完成自动泊车过程。

图4 系统软件总体流程图

3.2 数据采集

3.2.1 超声波传感器测距

超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离[19]。RCWL-1601超声波传感器工作原理如下:

1)给引脚Trig输入一个长为10~20 μs的高电平方波;

2)引脚Echo端的电平会由0变为1,此时启动定时器计时;

3)当超声波返回被模块接收到时,回波引脚端的电平会由1变为0;此时停止定时器计数,定时器记下的这个时间即为超声波由发射到返回的总时长,结果除以2即超声波单程传播时间;

4)根据声音传播速度为340 m/s,即可计算出所测的距离。

3.2.2 车辆行驶距离及车速测量

本系统所采用的直流减速电机自带霍尔编码器,电机每转动一圈,编码器输出390个脉冲。当需要测量车辆水平位移距离时,主单片机将与从单片机所连接的一根数据线先置为低电平,以便重新开始测量。之后延迟2 ms作为从单片机反应时间。接着再将数据线置为高电平,再延迟2 ms,此时便可以计算车辆水平位移距离。当从单片机检测到高电平,便将外部中断计数器清零,然后重新开始计数外部中断,车辆位移距离等于外部中断数除以390再乘以车轮的周长,从单片机将位移距离值通过8位信号线实时发送至主单片机。

3.3 数据发送与接收

系统初始化完成并与上位机建立连接之后,主单片机每隔100 ms向上位机发送一次数据,包括车速、泊车时车辆状态、搜索的车位大小以及其他相关信息,之后上位机向单片机返回一个字节的数据,具体过程如下:

第一步,单片机向上位机发送数据。在单片机通过WIFI向电脑发送数据之前,每次需要发送一条AT指令即:“AT+CIPSEND=0,12 ”,12表示一次性发送的字节数,接着再发送真正有用的数据;

第二步,上位机接收并处理数据。上位机接收的是字符串,通过LabVIEW中的字符串转无符号字节数组VI将其转换为数组,并通过数组索引VI,将每个数据索引出来再进行相应处理;

第三步,上位机向单片机发送数据。当上位机接收到单片机发送来的数据并进行相应处理之后,上位机向单片机发送一个字节的数据,不同的值代表了上位机向单片机发送的不同命令;

第四步,单片机接收上位机发送来的数据。由于单片机通过WIFI接收到的数据格式为:“+IPD,0,1:0”,其中0代表客户的索引,1代表收到数据的字节数,而冒号后才是收到的有效数据,因此需要对其有效数据进行提取。

通过以上4步便完成了单片机(下位机)与上位机之间一次完整的相互通信。

3.4 自动泊车过程设计

3.4.1 最小泊车区域分析

如图5(a)所示,当车辆从A点开始拐弯并倒车,其右后车轮运动轨迹为半径为R的圆的一部分,圆心在后轮车轴延长线上。前轮转弯幅度越大,转弯半径R就越小。当车辆到达B点时,运动轨迹为圆的四分之一,此时车身恰好与初始位置车身垂直。

最小泊车区域是指满足自动泊车所需的最小区域,只有存在此区域,才能完成自动泊车过程。其大小与车辆大小以及车辆最小转弯半径有关。如图5(b)所示,当汽车从O处开始进行自动泊车时,图中灰色区域(将其分为S1和S2两个区域)为满足停车条件的最小泊车区域,只有存在大于等于该区域面积且形状类似的区域才能完成自动泊车过程。

图5(a)车辆倒车轨迹 图5(b) 车辆泊车轨迹

为方便研究,依据图6定义最小泊车区域相关参数如表4。

图6 最小泊车区域参数分析

表4 最小泊车区域相关参数

最小泊车区域相关参数与汽车本身的属性有关,对于同一辆车,这些参数固定不变。本设计所采用的汽车模型与实际车辆运动规律类似,经过测量,车长l为21 cm,车宽为w为18 cm,最小转弯半径R为24 cm,安全距离设定s为5 cm,因此其最小泊车区域各参数计算如下(单位:cm):

L=l+R+s=21+24+5=50

W=w+s+s=18+5+5=28

V=R=24

H=R+w+s=24+18+5=47

D=2×π×R/4=2×3.14×24÷4=37

X=l+s=21+5=26

以上是理论计算结果,但部分参数与实际情况有所偏差,例如汽车后轮与汽车后边沿还有一定距离,汽车车轮中心与汽车两侧边缘也有一定距离,因此需要通过多次试验对最小泊车区域相关参数进行修正。经过反复实验,最终参数V修正为15,参数L修正为45,参数H修正为30。

3.4.2 泊车区域测量与判断

当上位机发送自动泊车命令后,将有关自动泊车的变量进行初始化,随后开始进行自动泊车。首先需要搜索符合条件的停车位。将实际泊车区域分为两个区域S1和S2依次进行测量和判断,当两个区域的大小都满足时,才能进行下一步的倒车入库操作,否则需要重新搜索满足条件的车位。

首先测量并判断第一个区域S1,超声波模块安装在车辆右侧,当开始执行自动泊车过程时,车辆开始前进,在单片机中每隔60 ms测量一次车辆右侧与右方障碍物的距离。

当超声波测量的距离大于L,即汽车右侧与车库底部应保持的最小距离时,表明到达了车位边缘,此时开始记录车辆水平位移,并且实时判断超声波测量距离是否大于L且车辆水平位移小于W。当其中一个值不满足条件时,即超声波测量距离小于L或汽车水平位移大于W,此时判断超声波测量距离是否大于L并且汽车水平位移大于W,即S1区域是否满足要求,若满足要求则进行下一步测量与判断,否则重新测量下一个车位的第一个边缘。

当第一个区域S1满足时,同理,进行下一个区域S2的测量与判断。此时实时判断超声波测量距离是否大于V并且车辆水平位移小于H,当其中一个值超出设定值时,即当超声波测量距离小于V或汽车水平位移大于H,此时判断超声波测量距离是否大于V并且汽车水平位移大于H,若成立,则表明区域S2满足要求,此时便完成了车库测量与判断,并且车辆已行驶到设定位置并准备下一步的倒车入库。否则重新开始测量并判断区域S1与S2,其流程如图7所示。

图7 泊车区域测量与判断

3.4.3 泊车入位

当搜索到符合条件的停车区域时,车辆已行驶到指定位置,接下来便执行泊车入位。首先打开继电器,然后前轮转动相应角度,开始倒车。与此同时开始记录车辆右后轮转弯弧长。当其长度为D时停车,接着前轮回正并开始向后倒车,倒车距离为X-s。至此,便完成了自动泊车过程。

3.4.4 障碍物检测与响应

车辆前后方的障碍物通过红外避障模块来检测,该模块测量速度快,测量结果实时性高,可以有效避免车辆与周围物体发生碰撞。当车辆前进时,若前方有障碍物过近时,车辆会自动停止,直到障碍物消失后继续完成自动泊车。同理,当车辆倒车时,若后方有障碍物过近时,车辆也会自动停止,直到障碍物消失后继续完成自动泊车。系统每20 ms检测一次车辆前后方的障碍物信息。

3.5 车位及车辆倒车轨迹显示

在搜索到满足最小泊车区域的停车位后,主单片机向电脑发送车位大小以及车辆与车位的距离,包括车位长和宽以及车辆与车位的水平距离与垂直距离。接着通过LabVIEW[20]图形控件显示车位与车辆,其效果如图8(a)所示。

图8(a)中,矩形左上角为坐标起点(0, 0),向下为y轴正方向,向右为x轴正方向。设O点的坐标为(x0,y0),则ABCDE五个点的绝对坐标计算如下(其中AB=H-W+l/2):

A:(x0-l/2,y0-V)

B:(x0-l/2+AB,y0-V)

C:(x0-l/2+AB,y0-V-X)

D:(x0-l/2+AB+W,y0-V-X)

E:(x0-l/2+AB+W,y0-V)

F:(x0-l/2+AB+W+AB,y0-V)

完成车位显示接下来是车辆倒车过程的实时动态显示,其在LabVIEW中的显示效果如图8(b)所示。通过图9车辆坐标计算示意图对abcd四个点的坐标进行分析计算。

图8 车辆位置显示示意图

图9 车辆坐标计算示意图

在图9中,设O点坐标为(x0,y0),则θ=α÷(2×3.14×R)×360,α为汽车右后轮转弯弧长,通过单片机实时发送给上位机,abcd四个点的x轴和y轴绝对坐标计算如下:

ax=x0+R×sin(θ)-l×cos(θ)

ay=y0-R+R×cos(θ)+l×sin(θ)

bx=ax+w×sin(θ)

by=ay+w×cos(θ)

cx=bx+l×cos(θ)

cy=by-l×sin(θ)

dx=cx-w×sin(θ)

dy=cy-w×cos(θ)

将以上公式通过LabVIEW进行编程,从而实现车辆位置坐标的实时计算,LabVIEW车辆位置坐标计算程序如图10所示。

图10 LabVIEW车辆位置坐标计算程序

在LabVIEW中绘制车辆的同时还需要绘制车辆倒车轨迹,其效果如图11(a)所示。

图11(a)中L1和L2的绘制方式如下:

图11 倒车轨迹显示示意图

根据LabVIEW中绘制弧VI的使用方法,对于L1的显示,需要计算图11(b)中A点横坐标、B点纵坐标、C点横坐标以及D点纵坐标。设D点坐标为(x0,y0),则A点横坐标为(x0-R),B点纵坐标为(y0-2×R),C点横坐标为(x0+R),D点纵坐标为y0,且弧L1的起始角为90°,大小为90°,根据以上信息便可绘制出指定圆弧,同时还可以设置线条的颜色和类型等。弧L2的绘制方法与L1相同,此处不再叙述。图12为LabVIEW总程序。

图12 LabVIEW总程序

4 实验结果

按照系统硬件电路图对实物进行连接并调试,其目的是排除在接线的过程中可能发生的各种错误,确保硬件连接正确,确保每个接口都是正确可靠的[21]。接着与上位机进行联合测试,确保数据发送和接收正常并同步。系统硬件实物图见图13。

图13 小车实物图

在完成对系统的软硬件检查并确保无误之后接着进行自动泊车实验。用物品模拟车位的环境,并将小车模型放至车位不远处。首先打开小车模型的电源开关,接着在电脑上连接小车模型发出的WIFI信号,然后打开上位机软件并运行上位机程序。最后通过上位机给小车模型发送自动泊车命令,小车开始执行自动泊车过程。

首先是泊车区域的检测,当泊车区域不符合要求时,车辆继续前进并测量,当找到符合要求的车位时,在电脑端等比例显示车位和车辆等相关信息。当车辆倒车入库时,上位机界面进行倒车入库动作的同步模拟显示。具体过程如下:

首先检测车位边缘,超声波每60 ms测量一次距离并判断。当检测到车位边缘时,开始测量车位(即区域S1)大小,包括车位长和宽。当车位大小满足要求时,继续测量区域S2并判断,否则重新开始测量S1(见图14(a)、(b))。

当搜索到合适车位时,停止超声波测距,此时车辆已行驶到指定位置,并准备倒车(见图14(c))。接着舵机(即前轮)转动相应角度,然后电机反转并开始倒车。此后上位机进行倒车过程的同步模拟显示,车库大小、车辆大小、倒车轨迹以及车辆与车库的位置关系都与实物成等比例(见图14(d))。

当倒车距离达到设定值时,车辆已基本与车位平行,此时前轮回正,并继续倒车。倒车距离根据车辆与车位底部的垂直距离决定(见图14(e)、(f))。

图14 自动泊车过程

通过实验可用看出,本设计能够检测出符合泊车条件的停车位,控制小车完成自动停车,并通过上位机实时显示车辆运动轨迹,最终完成整个自动泊车过程,实验结果达到预期目标。

5 结束语

目前我国汽车数量逐年剧增,车辆停放空间在不断缩小,将车辆安全的泊入车位也变得更加困难。本系统正是基于这样的现实问题而设计的,目的就是解决车辆在较狭窄空间内的泊车困难问题,通过设计自动泊车系统从而解决此问题。本设计以汽车模型作为研究对象,通过在汽车模型上面安装超声波测距传感器,电机编码器,避障传感器等,来采集相关数据。通过研究车辆的运动规律从而制定相应的自动泊车方案。

本设计是基于单片机的自动泊车系统设计与实现,采用的是51单片机作为主控芯片,其单片机性能存在一定的不足之处,所采用的超声波传感器测量结果存在一定误差与抖动。未来将采用更高级的主控芯片如STM32系列,同时提高传感器精度,不断完善系统,提高自动泊车系统稳定性与可靠性。

猜你喜欢
泊车舵机车位
基于MATLAB的平行泊车路径规划
基于CarSim的平行泊车仿真分析
为了车位我选择了环保出行
我自己找到一个
Arrive平台新增智能泊车推荐引擎 帮助找到最佳泊车地点
含齿隙弹载舵机的全局反步模糊自适应控制
基于dsPIC单片机的飞艇舵机控制实现
一个车位,只停一辆?
基于高速同步485总线通信的多通道舵机控制器设计
基于云模型的舵机同步控制