基于Arduino的轮式移动机器人速度控制模式比较
2017-07-06王凯正张华达张会琪
王凯正,林 棻,张华达,张会琪
(南京航空航天大学 车辆工程系, 南京 210016)
基于Arduino的轮式移动机器人速度控制模式比较
王凯正,林 棻,张华达,张会琪
(南京航空航天大学 车辆工程系, 南京 210016)
目前对于Arduino平台的轮式移动机器人的控制都是基于硬件自带的IDE环境,但在该环境下程序可读性差、调试困难,且很难采用高级控制算法。针对以上问题,提出了2种基于Arduino平台的轮式移动机器人速度控制模式。第1种控制模式为离线模式,即将上位机中的控制模型下载至Arduino控制器进行离线运算,并将返回的数据通过Simulink的图形处理界面进行实时监控;第2种控制模式为在线模式,即将Arduino控制器采集的速度等信号返回上位机处理运算,将经过处理运算的数据反馈至Arduino控制器对轮式移动机器人进行在线控制。通过PID算法对2种控制模式进行了实车试验对比。结果表明:此两种模式均能对速度进行精确控制,在线模式具有更好的速度跟踪精度和响应速度。
轮式移动机器人;Arduino;速度控制;PID算法
轮式移动机器人可以工作在各种恶劣危险环境中,具有成本低、试验方便、试验重复性好、不易受到外界环境的干扰等优点,在许多领域得到了广泛应用[1]。因此,为了使轮式移动机器人在最佳状态工作,研究其速度控制方法是非常有必要的[2]。Arduino是一款便捷灵活、方便上手的开源电子原型平台,其显著特点是价格低廉,并具有丰富的功能引脚,能够简单地与各类传感器、电子元件和诸多扩展功能模块结合,实现系统级应用[3-4]。
通常轮式移动机器人对速度的控制是应用脉冲宽度调制(pulse width modulation,PWM)技术和PID控制策略直接编写成程序代码来实现的。这种方法对编程能力和逻辑思维能力要求高,存在控制算法复杂、程序调试不便、容易出错等缺点。Matlab已有高级算法集成工具箱,采用Matlab来编写控制算法,无需编程人员从底层编写。此外,Matlab强大的数据处理和监控功能也是IDE环境所不能比拟的。Matlab可以离线仿真调试,还可以硬件在环调试,提高了研究效率、缩短了开发周期,可快速完成设计任务。从2013版Matlab开始可以从官网下载Arduino支持包,这使得将Simulink作为Arduino的软件开发平台变得更加便捷和规范[5]。
利用Simulink和Arduino,将Simulink控制系统框图下载至Arduino控制器,使框图在控制器中独立进行离线运算,自行对速度进行控制,并将返回的数据通过Simulink的图形处理界面进行实时监控。本文称这种方法为离线模式。第2种方法是采用Arduino控制器采集速度等数据,并通过串口返回数据至上位机,利用Simulink进行运算处理。将经过运算处理的数据反馈至Arduino控制器对轮式移动机器人进行在线控制。本文称这种方法为在线模式。本文应用这两种思路,分别设计出了适合于两种处理器的速度PID控制框图,并进行了实物调试。
1 离线模式下Simulink控制模型的建立
本文采用的控制器为Arduino UNO。该控制板的I/O接口分为数字和模拟两种,有专门的PWM输入和输出,可以与Matlab进行交互式联合仿真,从而可以将复杂控制系统模型下载至控制器芯片中进行离线控制。
1.1 电机正反转判定
轮速控制可以通过测速传感器实现。本设计所使用的是光电编码器,所以这里仅介绍增量式编码器。增量式编码器的工作原理:将角位移转换成周期性的电信号,再把电信号转变成计数脉冲,用脉冲的个数表示位移的大小。增量式编码器输出为方波脉冲相位差90°的A、B相,根据两相脉冲的上升下降沿可方便判断出电机旋转的方向。
在Simulink中建立如图1所示的离线模式控制系统框图。电机通过Enable Motors模块控制。H型全桥式电路是最常见的、也是相对简单的直流电机驱动控制电路。当使用L293D 芯片来对直流电机进行驱动时,可通过施加电压的方向和电流的方向实现电机正反转,因此电机控制模块包含4个数字输出端口,通过给定的高电压和低电压来进行电机正反转控制。
1.2 轮速测量模块设计
离线模式控制系统框图有2个输入信号,分别对应电机的2个相位转速传感器信号,通过转速传感器传回的相位差判断电机的正反转。经过反复测试,Arduino支持包提供的算例中测速模块有较大的误差[6],因此本文采用自主编写的encoder 测速模块来采集固定时间的脉冲数,如图2所示。由于相位转速传感器有2个,因此可以采用平均值来减小误差。若采集的时间过短,采集周期内所采集的脉冲数过少,随着速度变化,脉冲数变化幅度比较小甚至不变,导致脉冲数和PWM值对应关系不明确,容易产生较大误差;若采集周期过大,则无法满足机器人对速度的实时性的要求。因此,经过反复尝试,本文采集0.1 s内的脉冲个数[7]。
图1 离线模式控制系统框图
图2 encoder测速模块
由于硬件传感器以及外界扰动等因素,转速传感器和控制器采集的0.1 s内的脉冲数会在稳定值附近波动。此误差会因多级转换运算而被放大,造成控制器难以对速度进行精确跟踪,轮速控制也无法快速收敛到稳定值。另外,轮速测量会产生毛刺,使控制器重新参与速度运算,造成转速频繁抖动。
为了使小车能平稳运行和变速,本研究增加了change模块(如图3所示),滤除掉幅值为1的波动误差,旨在不影响机器人自主数据采集以及数据运算精度的前提下,减小甚至消除处理器采集脉冲数据时产生的误差。
图3 误差消除change模块
1.3 轮速控制与实时监控
通过脉冲数和PWM对应转化模块计算出相应的PWM数值输入到Arduino控制器的PWM引脚。直流电机的PWM控制是通过调节驱动送到电机电枢电压的幅值达到改变直流电机转速的目的。PWM的取值范围为0~255,当输入为0时,输出占空比为0的PWM信号;当输入为255时,输出占空比为1的PWM信号。在驱动过程中,通过改变PWM占空比等参数即可实现车速大小、方向的改变,从而实现对车速的控制。
由Simulink编写的控制系统框图可完全在Arduino控制器中运行,并通过Arduino支持包里自带的Serial Transmit模块[8]将控制器的数据通过串口发送至上位机。由于控制器传回的数据为当前速度对应的PWM值,并非速度值,所以需要进行相应的转化。上位机将数据进行接收后转化为对应的速度在示波器中显示,并存储数据以便后期处理,如图4所示。由此可实现对电机转速的实时监控。
2 离线模式下PID控制模型的建立
2.1 PID控制原理
PID控制[9]是发展较为成熟的控制策略之一,它将偏差的比例(P)、积分(I)和微分(D)通过线性组合综合构成控制量,对被控对象进行控制。在控制系统建模仿真中,该算法简单实用,并有较高的可靠性,因此在生产过程中是一种普遍采用的控制方法。PID 控制系统原理如图5所示。
图4 上位机数据接收框图
图5 PID 控制系统原理框图
1) 比例部分的作用是为了及时成比例地反映控制系统的偏差信号,以最快速度产生控制作用,使偏差减小。
2) 积分部分的作用主要是为了保证被控量在稳态时对设定值的无静差跟踪。
3) 微分部分的作用主要是为了改善闭环系统的稳定性和动态响应的速度。
以微处理器为硬件核心的控制系统为离散时间控制系统。PID控制采用的差分方程表示如下:
(1)
式中:u(n)为第N采样周期时的输出;en为第N采样周期的偏差;N为采样周期。
令Δen=en-en-1,则有
(2)
令Ki=Kp/Ti,Kd=Kp/Td,则有
(3)
为了避免在求取控制量u(t)时对偏差求和运算,在实际应用中通常采用增量式:
Δu(n)=u(n)-u(n-1)
(4)
由于
并且
Δen=en-en-1
Δen-1=en-1-en-2
所以有
Δu(n)=Kp(en-en-1)+KiTen+
(5)
也可以写作
(6)
2.2 PID控制模型调试
本文研究的轮式移动机器人如图6所示,由Arduino控制器、直流减速电机、超声波传感器、速度传感器等几个部分组成,只需要将Simulink中的相关控制程序下载至Arduino控制器中,就可以离线驱动小车进行前进、后退、转弯、避障、循迹等。
图6 轮式移动机器人实物模型
需要注意的是,实物中设置的采样时间和Simulink串口接收模块必须保持一致,并且上位机和控制器必须采用同样的通信串口。本文选取0.005 s作为的Arduino控制器和Simulink控制系统的采样时间,即控制器端和上位机每隔0.005 s传输和接收1次数据,因此选取离散化的PID控制器。将Arduino控制器与Simulink进行仿真交互,实时监控串口返回的数据,改变PID参数进行调试。经反复尝试,当参数P=10,I=35,D=0时,控制效果最好。
图7和图8为当参数P=10,I=35,D=0时的PWM曲线和对应的速度曲线。
图7 离线模式下PWM曲线
图8 离线模式下速度曲线
由图7和图8可以看出:采用离线模式能对电机转速进行良好的控制。本文预设PWM参数稳定值为200,对应速度值为0.838 m/s。在此参数下PWM峰值为209,对应速度值为0.855 m/s。电机在0.4 s时间内从静止达到预定的转速并保持稳定,最终稳定值为196,对应速度为0.821 m/s,超调量为6.63%,稳态误差为2%。由此可见,此控制器将0.1 s作为脉冲数的采集周期,符合图7和图8所示的每0.1 s速度发生变化的曲线规律。
3 上位机在线模式下PID控制模型的建立
3.1 数据采集模块设计
因上位机和Arduino采用不同的处理器进行运算,并且涉及到串口接收和发送数据的同步问题,在该模式下,控制器采集数据,上位机处理数据。针对这种情况设计如图9所示的控制结构在上位机中进行运算,同时设计控制器信息接收模块仅用于接收和传递数据,如图10所示。该部分仍需下载至控制器。
图9 上位机处理PID控制系统原理框图
图10 控制器信息接收模块框图
在线模式下处理PID控制系统模型与离线模式下有区别,因此串口接收模块采用能读取二进制数据的Serial Receive和Serial Send模块进行数据传输。由于上位机和Arduino控制器默认字符类型分别为double(双精度十进制)和unit8(无符号二进制),所以将数据传入串口前需要进行字符类型转换[10]。同时因为uint8字符类型的范围为0~255,所以为了防止数据溢出,要在数据传输之前进行相应减小,并在控制器接收数据后进行还原。
根据图10中的Serial Receive串口接收数据模块的使用特性,当有数据输入时,Status口判定为1,Data口输出串口数据;当无数据输入时,Status口判定为0,Data口输出255。上位机选取的采样时间为0.005 s,数据传输并非连续,且在真值和255之间跳动,如图11所示。这主要是因为上位机和控制器建立连接需要时间,以及数据的测量精度问题。
图11 未处理的接收数据
当Status状态为0时,需要将Data口输出的255滤掉,防止干扰对正确速度的判断和计算。处理后的数据如图12所示。
图12 处理后的输入数据
3.2 PID控制模型调试
将图10中的控制系统框图下载至控制器中进行实车试验。确认采样时间相同、串口匹配,将Arduino与上位机相连,改变PID参数进行调试。为方便比较,本方法采用与离线模式相同的参数,即P=10,I=35,D=0,采样时间为0.005 s。图13和14分别为在线模式下PWM值和对应转换的速度。
图13 在线模式下PWM曲线
图14 在线模式下速度曲线
由图13和图14可以看出:采用在线模式能对电机转速进行良好的控制。在线模式与离线模式采用同样的参数,即 PWM参数稳定值为200,对应转速为0.838 m/s。在线模式在此参数下的PWM峰值为207,对应速度值为0.838 m/s,能使机器人在0.4 s时间内从静止达到预定的转速并保持稳定,最终稳定值为199.98,对应速度为0.838 m/s,超调量为3.5%,稳态误差为0.01%由此可见,此控制器将0.1 s作为脉冲数的采集周期,符合图13和图14所示的每0.1 s速度发生变化的曲线规律。
将图7和图13以及图8和图14对比可以看出:在相同参数下离线模式和在线模式均能在0.4 s 达到稳定速度;但是在线模式下超调量仅为3.5%,低于离线模式下的6.63%,且静态误差只有0.01%。与离线模式相比,在线模式更能精确地对速度进行控制。
由于采用在控制器独立运行的方法,存在每次参数调整都要重新对框图进行下载烧录以及控制器对Matlab个别框图支持不到位的缺点,使得用上位机进行运算处理的方法更胜一筹。随着算法研究的不断深入和控制框图容量的增大,对处理器性能要求也逐渐增加,因此采用上位机进行在线运算处理的方法对大型控制算法的运算能力要强于Arduino处理器单独运算的方法。
4 结束语
本文提出了2种基于Arduino的轮式移动机器人速度控制模式,即离线模式和在线模式。以轮式移动机器人速度为控制对象,分别编写两种模式下的PID控制框图,并进行实车对比和验证。
实验结果表明:采用相同控制参数,在线模式对于速度控制的超调量更小、稳态误差也低于离线模式。因此,在线模式具有更好的速度跟踪精度和响应速度。
采用此两种方法,只须将精力放在控制算法上,大大缩短设计和调试周期,有着传统c语言程序编写算法无法比拟的巨大优势,可为以后更高级的控制算法开发奠定基础。
[1] 陈懂.轮式移动机器人运动控制系统的研究与实现[D].南京:东南大学,2005.
[2] YU H,KARIMIH R,ZHU X.Research of smart car’s speed control based on the internal model control[J].Abstract and Applied Analysis,2014(7):1-5.
[3] 蔡睿妍,Arduino的原理及应用[J].电子设计工程,2012(16):155-157.
[4] ALESSANDRO D’Ausilio.Arduino:A low-cost multipurpose lab equipment[J].Behavior Research Methods,2012,44(2):305-313.
[5] BARBER R,HORRA M,CRESPO J.Control Practices using Simulink with Arduino as Low Cost Hardware[J].IFAC Proceedings Volumes,2013,46 (17):250-255.
[6] Mathworks Corp.User’s Guide R2013a[Z].2013.
[7] 李山,王民慧.智能车车速检测与控制模块设计[J].工业控制计算机,2013, 26(9):135-136.
[8] 梁湘,基于MATLAB的数据实时采集与处理的实现[J].科技信息,2008(9):44-45.
[9] 李晓丹.模糊PID控制器的设计研究[D].天津:天津大学,2005.
[10] 刘秀,用Matlab实现硬件端口采集的方法[J].兵工自动化,2003,22(3):58-60.
(责任编辑 刘 舸)
Comparison of Speed Control Modes of Wheeled Mobile Robot Based on Arduino
WANG Kai-zheng, LIN Fen, ZHANG Hua-da, ZHANG Hui-qi
(Department of Automotive Engineering, Nanjing University of Aeronautics and Astronautics, Nanjing 210016,China)
Currently the control of wheeled mobile robot based on Arduino is dealt with the IDE programming environment. Under the environment, the program is difficult to read and debug, and it is also complex to use the advanced control algorithm. In order to overcome the above defects, two kinds of speed control modes are proposed. The first mode is offline mode, and the control model of host computer is downloaded to the Arduino controller for operation, and the returned data is monitored in real time through the graphical interface of Simulink. The second mode is online mode, the speed and other signals collected from the Arduino controller are returned to the host computer to process. The processed data is fed back to the Arduino controller to control the wheeled mobile robot. Two control modes are compared by PID algorithm under real robot condition. Test results show that the speed can all be accurately controlled in the two modes, online mode has better speed tracking accuracy and response speed.
wheeled mobile robot;Arduino;speed control;PID algorithm
2017-02-21
中央高校基本科研业务费专项资金资助项目(NS2015015);中国博士后科学基金资助项目(2016M601799);南京航空航天大学研究生创新基地(实验室)开放基金资助项目(kfjj20160207,20170215)
王凯正(1992—),男,山东青岛人,硕士,主要从事车辆动力学与控制,E-mail:653935270@qq.com;通讯作者 林棻(1980—),男,江苏南京人,博士,副教授,主要从事车辆动力学与控制研究,E-mail:flin@nuaa.edu.cn。
王凯正,林棻,张华达,等.基于Arduino的轮式移动机器人速度控制模式比较[J].重庆理工大学学报(自然科学),2017(6):70-77.
format:WANG Kai-zheng, LIN Fen, ZHANG Hua-da,et al.Comparison of Speed Control Modes of Wheeled Mobile Robot Based on Arduino[J].Journal of Chongqing University of Technology(Natural Science),2017(6):70-77.
10.3969/j.issn.1674-8425(z).2017.06.010
TP273
A
1674-8425(2017)06-0070-08