电磁智能小车控制算法研究与编程实现
2022-08-12李全民贾林锋
李全民 贾林锋
(广州理工学院,广东 广州 510540)
1 引言
智能汽车是未来汽车的发展方向,在减少交通事故、发展自动化技术、提高舒适性等许多方面发挥很重要的作用[1],而电磁导航技术相对于其他技术有稳定性强、成本低且原理简单等特点。电磁导航是指在道路中线铺设有漆包线并通有20kHz、100mA交变电流,因而在导线周围产生磁场,智能小车上的电感传感器在磁场中产生感应电动势,靠检测电动势值来确定小车在道路上相对位置。算法和编程是智能汽车控制核心,决定了小车的行驶速度和方向。本文在信号归一化处理、差比和算法、速度控制等方面对传统控制方法进行改进,使智能小车控制更加线性化,小车的运行状态也更稳定和高速,从而优化了控制策略,并且实现了C 语言编程。最后完成的智能小车实现了自动起跑与停车、上下坡、沿道路自动行驶及转向等多种功能。
2 智能小车硬件支持
控制算法建立在硬件基础之上,一般智能小车硬件包括机械系统、含有最小系统的主板、电源模块、电机控制模块、信号检测与处理模块等部分。在信号检测和处理部分,本文采用两个10MH工字电感作为传感器,电感采用对称于小车中线的水平放置[2],且其轴线与漆包线垂直,离地高度15cm,距离中线12cm;采集的感应电动势经过LC选频和OPA2350运算放大后传给单片机AD接口;单片机采用由恩智浦公司生产的S9KEAZ128AMLK,它具有32 位MCU 内核、48MHz的CPU 频率、12 位16 通道的模数转换(ADC)及一个脉宽调制(PWM)定时器[3],由输出的PWM信号控制电机转速,进而控制智能小车的方向和速度。
3 控制算法的软件流程
经过单片机模数转换后,两个水平电感产生的感应电动势模拟信号分别转换成数字信号进行编程计算。为了防止干扰,首先采用软件均值滤波进行第一步的信号处理,对每个电感产生的感应电动势连续采集10次并求平均值作为当前控制周期的传感器信号;其次通过归一化算法处理两电感产生的电动势值,使其数字信号在一定范围内变化,如0~200;再次,对归一化处理后数值进行差比和计算,得到小车相对于道路中线的相对位置和偏差距离;最后将偏差输入PID控制器,得到当前控制周期的输出。方向控制通常利用单片机的定时器接口,输出PWM 信号对电机转速进行控制(本文研究的是三轮小车,通过两后轮的转速差来控制行驶方向)。
在速度控制方面,首先通过编码器采集目前速度信号,并输入单片机后转化为脉冲计数;然后判断直道还是弯道,前者高速后者低速;最后,将设定速度输入PID控制器,得到当前控制周期的速度输出,通过PWM 信号对电机进行速度控制。
控制流程如图1 所示,其中,中断子程序每1ms 执行一次,方向每2.5ms 控制一次,速度控制是每10ms 控制一次,速度控制的时间相对长一点,主要为了降低对方向控制的影响。因为对于三轮车来说,前轮是没有动力的随动轮,不论是方向控制还是速度控制,都是通过改变两后轮转速来实现的。
图1 程序控制流程图
4 归一化算法设计
4.1 传统归一化算法
归一化算法的目的是为了解决电感因加工质量不同带来的误差,将电感传感器输出的感应电动势的绝对值(因为C 语言定义时数据类型为无符号型,故这里只讨论绝对值)转换成相对值,以便于同时处理多个电动势数据。传统的归一化算法如公式1所示。
其中a表示电感归一后的值;b表示每次平均滤波后得到的值;c是转换系数,取决于设定的电动势参数范围,本文参数范围设在0~200,故c取200;公式中的Max和Min是单个电感在工作环境下采集到的最大电动势值和最小电动势值。归一化算法只能对单个电感进行计算,每个电感的Max和Min都不同,这取决于运算放大电路的增益倍数和电感的加工质量。一般在使用归一化算法前,都需要预先采集每个电感输出电动势的最大值和最小值。在实际的操作中,往往需要人工移动电感远离和靠近漆包线来取值,不仅操作繁琐,而且预先采集时电感高度与小车行驶时的实际高度也有误差。
4.2 改进的归一化算法
对传统归一化算法进行分析可以发现,预先采集的最大最小值是感应电动势在当前磁场环境的变化区间,而每一次采集到的值都与最小值相减并与区间长度相除。上述的处理方法实质上是将电动势实际变化值转换成相对于最小值的一个变化率,利用了变化率来解决电感加工质量带来的误差。
现假设小车先直线行驶然后转弯,小车每次转向产生的电动势变化值都是根据偏离中线的距离得来的,因而电动势的变化值则反映了小车偏离中线的距离。因此可以把小车处于直道中心位置时的电动势值作为中值,行驶后采集到的值与中值相减并算出相对误差,将原先相对于最小值的变化率转换成了相对于中值的变化率,归一化算法如下:
其中△d表示单个电感产生的电动势相对于中值的变化率;Z是归一化前采集到的小车位于跑道中间的电感中值;b是每次采集后平均滤波的电感值;c是转换系数,表示偏差变化的范围。在实际操作时只需要将小车放在跑道中间就能上电自动采集,用单次采集代替多次采集,操作上简单了好多,也较好解决了高度误差带来的采集精度问题。
4.3 算法改进的编程实现
由于小车的左右转向,电动势值会在中值左右变化,因此△d值也会出现负值,可以在归一后加上一个起点变化系数来避免负值,便于直接用于计算。C 语言代码实现如图2所示,110是电感的起点变化系数,通过限幅使感应电动势的变化率在0~200范围内。
图2 改进归一化C语言代码实现
5 差比和算法改进设计
5.1 传统的差比和控制方法
单个电感输出的电动势变化可以反映小车偏离中线的距离变化,但不能判断偏离中线的左右方向。因此在循迹中至少需要分别位于小车中线左右侧的两个电感,利用两个感应电动势的差值来判断方向。在实际布置时,为了对道路进行提前预测,电感一般靠支架布置在距小车头部前沿还有一段距离的前部。因此当小车转弯时,有可能两个电感都位于道路外面,两个电感的感应电动势都同时变小,其绝对误差也变得更小,不能达到驱动小车转向的要求,所以引进了差比和的概念,其算法如下:
其中e表示计算后的相对误差;L和R分别表示左右电感归一后的电动势值;c是系数,决定相对误差的变化范围。实际上即使这样处理,当转弯的角度很大时e还是很小,不能满足大转向要求,这时就需要丢线处理(又称“锁差值”),给小车一恒定的大偏差转向(舵机打死)。
这种处理方法比较简单,但存在两个问题:一是控制不线性,在丢线之前,输入和输出通过差比和控制,但丢线后,输出达到最大,输入不对这个控制系统有任何影响,所以小车会出现出弯抖动、入弯反应慢等现象;二是当小车直线行驶但稍微偏离中线时,绝对误差有可能比相对误差还要大,这时就应用绝对误差而不是相对误差。
5.2 改进后的差比和控制方法
为了解决使用单一差比和及丢线处理存在的问题,本文进行了两个改进:一是使公式(3)中的系数c取值在L与R最大和的范围内,当两电感绝对误差的值大于其差比和时采用绝对误差作为小车的偏差;当两电感绝对误差的值小于其差比和时采用差比和作为小车的偏差,这样就解决了单一使用差比和问题。二是把绝对误差转入差比和时的绝对误差值保存起来,该值作为后续差比和公式中的分子并保持不变,每次循环只改变分母值(即两电动势和值),使两电感在入弯时的差比和值不断增大,满足转弯需要;当出弯时两电感向中线靠近,其电动势值变大,作为两者之和的分母也变大,差比和值减小,达到判断条件后再由差比和转入绝对误差,这样就解决了入弯和出弯时控制不线性问题。把改进后算法与和PID 控制器的结合,小车入弯、弯内和出弯姿态都得到了良好的调整。
5.3 改进后的编程实现
改进后算法的C 语言代码实现如图3 所示,其中为了避免分母为零的情况出现,当两电动势值之和很小时,分母自动加1。
图3 改进差比和算法的C语言实现
6 速度控制
6.1 速度控制策略
速度控制重点在弯道,本文采用直道高速、入弯减速、出弯加速的控制策略,并预先设置直道、入弯和弯道内三种不同速度,作为小车不同姿态下速度PID控制器的期望值。由于单靠编码器无法判断三种速度的转换时机,所以另外引入D_1 和D_2 两个变量:D_1 是当前两电感电动势差值减去上次相应的差值,D_2是D_1的累加并对其限幅。由差值变化规律可知,直道时由于方向PID 控制器的调整,偏差波动范围小,D_1和D_2均较小;入弯时差值不断增大,D_1为正数,D_2系数不断增大至限幅值;在弯道内D_2系数由于入弯前的差值累加,数值较大,但D_1 在弯道内的偏差变化不大数值较小;小车出弯时,差值不断减小,D_2系数值降低。上述控制策略结合了方向的偏差变化,对小车整体的速度有极大的提高,C语言程序实现如图4所示,程序中的参数影响速度转换的灵敏度,可由实际测试得到。
图4 速度控制策略C语言实现
6.2 Bang-Bang 控制
在速度控制策略基础上,本文还采用了增量式PID+Bang-Bang 控制,C 语言实现如图5 所示。其中KOUPLUSMAX是设定的最大占空比,PSpeedCut是当前检测到的速度,ASPeed1是期望速度,程序里Bang-Bang控制区间为“-3”和“+1”,可由实际测试得到。当前速度远小于期望速度时,给最大占空比;当前速度超调一段距离时,给最小占空比;在这个区间内则使用增量式PID。这样可以使小车速度反应更灵敏,匀速性能更好。
图5 增量式PID+Bang-Bang控制C语言实现
7 结语
本文涉及的归一化算法、差比和算法、速度控制及Bang-Bang控制都是电磁智能小车控制的基础,结合PID控制器的原理,将计算后的偏差作为控制器的输入使得小车控制系统得到较大的改善。对于单根漆包线铺设的磁场环境,该算法的鲁棒性好、计算简便。对于多跟漆包线组成的跑道,如圆环等,可以增加多个电感辅助上述算法的路径判断。
最后在包括直道、弯道、十字交叉、环岛、坡道和颠簸等元素的道路上实地测试表明,改进后智能小车的速度提高了20%,并且在入弯、弯内和出弯都显示出良好的稳定姿态,说明该算法能大大提高智能小车的速度和稳定性,可操作性强。