路虎 揽胜
- 18 -
高 新 技 术
0 引言
自动汽车驾驶系统对提高驾驶员的安全和进一步减少交通事故中的伤亡产生了积极影响[1]。近年来,各种各样的传感器和控制器凭借成本低和精度高的优点,可以很容易解决现实生活中自动驾驶汽车的许多问题。目前,已经安装了半自动或全自动泊车辅助系统的汽车有福特福克斯、丰田普锐斯和梅赛德斯。特斯拉、奥迪和谷歌等公司也在向市场推出安全可靠的
自动驾驶系统[1]
。Arduino 是一个操作方便、
易于使用的开源编程平台[2]
它可以在Windows、Macintosh OS X 和Linux 三大主流操作系统上运行。对于初学者来说,极易掌握,同时它在编程方面也有足够的灵活性。简单的开发方式使学习者能更快地完成项目的研究开发工作,大大节约了学习的成本,缩短了开发的周期。它具有C 语言的开发环境,主要包括Arduino 电路板和 Arduino IDE 开发环境。选择Arduino 作为智能小车控制器的原因是它能通过控制各种各样的传感器来感知周围环境,具有大量的可用库和丰富的接口,例如数字I/O 口、模拟I/O 口,同时它还支持SPI、IIC 和UART 串口通信。自动并行泊车技术需要小车精确控制移动轨迹以及仔细观察周围的环境,因此,通过Arduino 实现自动并行泊车是一个可行的计划。
1 系统介绍
根据合理假设来编写泊车算法和放置超声波传感器。模拟小车在真实环境的道路右侧以恒定的转速向前行驶,准备寻可用泊车位进行泊车。在这种情况下,假设小车的右侧由已经停放的车辆和泊车位组成,小车上共设置2个超声波传感器,分别设置在小车的正前方和右侧后方。在向前直行的过程中,右侧超声波传感器检测车辆与右侧障碍物的距离,判断该距离是否大于预设的泊车位宽度。如果车辆与右侧障碍物的距离达不到预设值,那么小车将继续行驶。如果宽度满足要求,那么小车继续行驶,从而测量泊车位的长度;如果长度也达到程序中设计的数值,那么小车停止前进,并执行并行泊车的动作。否则,小车会继续前进寻合适的停车位。自主泊车过程如图1所示。
2 系统硬件
2.1 ArduinoMega2560
Arduino 是一个功能强大的控制器,它可以用来构建数字设备和交互对象,从而感知和控制周围的物理环境。
5月汽车销量ATmega2560是一款基于AVR 增强RISC 架构的低功耗CMOS 8位微控制器,它有54路数字输入/输出端口(其中15个可以作为PWM 输出)和16路模拟输入,电路板如图2所示。通过pinMode()、digitalWrite()和digitalRead()等功能,Mega 上的54个数字引脚都可以用作输入或输出。Arduino Mega 2560在5 V 的电压下工作,可以通过3种方式供电,而且能自动选择供电方式。在自动泊车实验中,选择USB 接口直接供电。Mega 2560作为小车的控制中枢,驱动小车的直流减速电机使小车按照设
计者的意愿进行运动,超声波传感器也连接到Arduino 板并集成到自动泊车系统中。因此,可以将程序上传至Arduino Mega 2560电路板,从而实现智能小车的自动泊车[3]。
图2  ArduinoMega2560
2.2 超声波传感器
在智能小车上搭载2个HC-SR04超声波传感器,分别放置在小车的正前方和右后侧,测量小车与前方障碍物和右侧障碍物的距离,该传感器可以在2 cm~400 cm 的距离内提供测距功能,测距精度可以达到0.3 cm。HC-SR04有4个引脚,其中“Trig”引脚和“Echo”引脚与Arduino Mega 2560的数字口相连,并以高低电平的方式传输距离信息[4]。另外2个引脚为传感器供电。超声波传感器可以使智能小车在行进过程中及时发现障碍物,并及时引导智能小车转向,从而避开障碍物。
基于Arduino的智能小车自动并行泊车系统
荆 鑫
(1.黑龙江科技大学研究生学院,黑龙江  哈尔滨  150028 ;
卡玛洛
2.布达佩斯科技和经济大学电气工程与信息学院,匈牙利  布达佩斯  1114)
摘 要:随着城市内汽车数量的不断增长,停泊在泊车位上的汽车越来越多,司机在泊车过程中会面临浪费时间和燃料等问题。由于并行泊车需要倒车,在司机把车辆停在正确位置之前,必须要用眼睛对停车路径进行多次评估,否则就有可能会导致事故的发生。与手动泊车的缺点相比,自动并行泊车系统凭借自身安全快速的一键式泊车服务受到用户的喜爱。设计一个基于Arduino 控制的自动并行泊车系统,该系统可以在最短时间内检测出可用的泊车位并进行自动泊车操作,将汽车正确地停放在检测到的泊车位上。该系统集成超声波传感器和Arduino 对车辆的运动轨迹进行控制,该文还探讨了相应的泊车策略和算法。关键词:并行泊车;Arduino ;超声波传感器;智能小车中图分类号:TN 911      文献标志码:A
图1  自动泊车过程
(a)
(b)
(c)
- 19 -
高 新 技 术
2.3 A、B 相位编码器直流减速电机
采用尾部带A、B 相位编码器的直流减速电机,该电机可以直接输出方波,不需要添加电路。在编写程序时,把前一个A、B 相位的输出值保存起来,将其与下一个A、B 相位的输出值做比较,循环往复,就可以得出码盘转动的方向和转速,再用码盘转动的方向和转速判断小车的行进方向和行进速度[5]。可以据此设计一个PID 算法来保持小车左右电机的转速相同,使其稳定地向前行驶。
3 系统软件
3.1 超声波传感器测距程序设计
超声波测距装置的主要原理是根据发射超声波和接收超声
波产生的时差测算小车与障碍物的距离[6]。
超声波传感器向一定方向发射超声波,同时开始计时,超声波在空气中传播,遇到障碍物后超声波立即返回,超声波传感器收到反射波就会立即停止计时。已知超声波经过的总路程L =[(T ×344)/2],则T =(2L )/344=0.0058L(T 为时间)。具体原理如下:1) 先在Trig 端输入1个长为2 μs 的低电平
方波,再在Trig 端输入1个长为10 us 的高电平方波。2) 输入方波后,传感器会自动发射8个40 kHz 的超声波,检查是否有信号返回。如果有信号返回,那么发射超声波测距,Echo 端的电平由0变为1,定时器开始计时。3)  当返回的超声波被传感器接收时,Echo 端的电平由1变为0,定时器停止计时,定时器记录的时间差即为超声波由发射到返回的时长。
3.2 电机转速PID 控制程序设计
在小车行驶的过程中,保证小车笔直前进的前提是要保持小车左右电机的转速相同。PID 调节器是一种算法简单、鲁棒性好和可靠性高的控制策略,适用于可建立精确数学模型的控制系统。在自动并行泊车系统中选择使用增量式PID 控制算法。如图3所示,给定参考值r (t )和实际输出值c (t )构成控制偏差e (t ),PID 调节器通过线性组合将偏差的比例、积分以及微分构成控制量u (t ),用控制量对被控对象进行控制。r (t )为
预先设定小车电机的转速,
c (t )为小车实际电机的转速,e (t )=c (t )-r (t )为转速误差,将e (t )作为PID 控制器的输入、u (t )为PID 控制器的输出,并作用到小车电机上。比例系数的作用是对速度偏差作出反应。电机转速偏差一旦产生就会使小车速度向偏差减少的方向变化。积分环节会消除静态误差,只要存在转速偏差,积分作用就会不断增大。微分环节的作用是阻止偏差的变化,偏差变化越快,微分环节的输
出就越大[7]。
PID 调节器通过改变输出PWM 的值(范围为0~255)来改变电机的转速。r 为设定转速,n 为实际转速,u 为PWM 的输入。通过A、B 相位测出电机的转速,与设定值比较得到转速误差,将转速误差送进PID 调节器进行处
理,最终消除小车的转速误差,使左右
电机的转速相等。
3.3 自动并行泊车程序设计
小车以恒定的转速直线行驶,与右侧路沿保持固定距离d ,此时变量park _status 的值为0。当小车经过一个泊车位时,侧面超声波传感器将判断该泊车位的宽度是否大于设定的宽度B 。如果
宽度不够,小车将继续行驶;如果宽度足够,小车将继续行驶以测量泊车位长度L (如图4所示),此时变量park _status 的值为1。右侧传感器首次测量到距离大于设定的停车宽度为t 1时刻,变量park _status 的值变为2。右侧传感器测量到距离小于设定的停车宽度为t 2时刻,变量park _status 的值变为3。再根据已知的电机转速就可以得出泊车位的长度。由此可以完成对泊车位的选择。泊车位的判断程序如下。
boolParking_Place_Control(){ go();
Right_Distance=Distance_test2();//测量右侧障碍物距离Front_Distance=Distance_test();//测量前方障碍物距离
if((Right_Distance<=minimum_limit)&&(park_status==0))//开始寻泊车位
{go();
delay(3000);park_status=1;
Serial.println(park_status);}
if((Right_Distance>minimum_limit)&&(park_status==1))//检测泊车位宽度
{
times3=millis();go();
delay(1000);park_status=2;
Serial.println(park_status);}
if((Right_Distance<=minimum_limit)&&(park_status==2))//结束检测泊车位宽度并计算此泊车位长度
{
times4=millis();
len=(times4-times3)*n1;park_status=3;
Serial.println(park_status);}
if((len>=minimum_limit1)&&(park_status==3))//判断泊车位是否符合要求
returnpark_status ;}
在到合适的泊车位后,小车开始倒车。首先,当变量park _
图3  PID 调节器
r (t )
e (t )
u (t )
6万以内suvc (t )
比例积分
执行机构对象
微分
- 20 -
高 新 技 术
status =4时,小车先向后倒退一段距离,这是为了留出缓冲区,避免在倒车时与其他障碍物碰撞。其次,让小车右侧电机停止转动,左侧电机向后转动,调整姿态后,向后倒退。再次,保持小车左侧电机停止转动,右侧电机向后转动。此时小车车体几乎全部进入泊车位。最后,只需要对小车姿态进行
微调,就可以完成泊车,该操作完成后给变量park _status 赋值为5。当变量park _status =5时,2个传感器测量小车与右侧障碍物和前方障碍物的距离。如果距离大于设定值,就再次微调小车的姿态,直到两侧距离都小于设定值。完成之后给变量park _status 赋值为6,小车停止运动,完成整个自动泊车过程。自动泊车的程序如下。
voidPark()//自主泊车过程{
Parking_Place_Control();if(park_status==3){
brake(6);
Serial.println(park_status);delay(400);park_status=4;}
if(park_status==4){
back(14);//留出缓冲区back_right(3);back(4);
back_right(13); brake(5);back(16); // 调整姿态后,向后倒退back_left(13); //基本进入泊车位go();delay(200);back_right(4);go();delay(300);back(5);back_left(5); //微调调整小车姿态delay(200);park_status=5;
Serial.println(park_status);}
if(park_status==5){if((Right_Distance>8)||(Front_Distance>8)) //检测前方与右侧距离是否符合要求
{
spin_right(5);go();delay(600);back_right(1);back(0);}
delay(400);park_status=6;别克英朗价格
Serial.println(park_status);}
if(park_status==6){
foreverstop();//完成泊车过程}}
图4  测量泊车位长度
t 1
t 2
泊车位长度L
泊车位宽度B
超声波传感器
超声波传感器
固定距离d
4 测试
测试时将小车放置在模拟道路的起点,在小车的前方右侧预留1个足够小车泊车的泊车位。如果小车在不碰撞的情况下完全进入泊车位,就说明自动并行泊车系统设计成功。由于每次测试时小车的运动轨迹并不完全一致,例如电机编码器的精度限制和小车的车轮滑移都会导致小车的运动轨迹发生改变。因此多次测试泊车过程并手动调试代码后,消除了实际误差,证明自动泊车实验成功。
5 结论
该设计开发的自动并行泊车系统具有良好的性能。根据测试的成果,该设计实现了基本目标。但是仍
有许多方法可以提高自动泊车系统的质量和性能,例如添加其他传感器(激光雷达传感器)或者使用更高级的算法(SLAM 算法)等。综上所述,在现代社会中,自动泊车系统是非常有前景的,但是由于真实交通的不可预测性,因此还需要对该系统进行更多的研究。参考文献
[1]付菊芳,张小龙,东亚斌.国外汽车自动停车系统的介绍与分析[J].中国科技信息,2009(2):259-260,263.
[2]李兴泽,王福平.基于CCD 摄像头的小区自动循迹停车系统[J].计算机应用,2013,33(增刊1):321-323.
[3]郭芸君,张麟.基于Arduino 的智能停车场设计[J].无线互联科技,2017(6):47-48.
[4]闫博扬,李玉衡,姚磊.基于Arduino 开发板的自动循迹避障智能车控制系统设计[J].软件,2020,41(7):57-60.
[5] M.Y.I. Idris,Y.Y. Leng,E.M. Tamil,et al. Car Park System : A Review of Smart Parking System and its Technology[J]. Information Technology Journal,2009,8(2):101.
大众新宝来怎么样[6]刘南君,毛培宏.基于Arduino Mega 2560单片机的简易智能割草机器人的设计与实现[J].安徽农业科学,2012(36):17899-17901.[7]Igor Belai,Mikulás Huba,Kevin Burn,Chris Cox. PID and fil te
red PID control design with application to a positional servo drive[J]. Kybernetika,2019,55(3):540-560.