【STM32平衡小车】电磁巡线归一化算法(二)

一、归一化的概念

归一化处理,由于各个电感的性能特性存在很大差异特别是电压波动范围相差较大。因此为了给算法制定统一的标准给数据处理带来方便须对 A/D传感器采集来的信号做归一化处理。此设计中的具体方法是通过公式将各传感器电压值都处理成相对该传感器最大电压和最小电压使得传感器输出电压值都保持在 0到 100之间。

归一化之后的传感器数据如图所示横坐标表示距离中心线的距离单位是毫米,纵轴是电压值。

【STM32平衡小车】电磁巡线归一化算法(二)_第1张图片

二、归一化的原因

假设不用归一化处理时,距离中线零偏差时,电感A的值是1000,偏离赛道20厘米时,电感A值是200.当赛道电源不准时,比如输出电流由100ma变成了120ma,这时,电感A在零偏差的值和偏离赛道20厘米时候的值都会变大,设分别变成了1200和240,这时,你设定的阈值会出问题了。比如,你设置在电感A值小于等于200的时候(偏差20cm)判定丢线,电流变大之后,偏差为20cm,A电感值为240,大于了200,这时本来该判丢线,却没法判丢线了,车辆路径就相应会变化了(当然,阈值判定的不一定是丢线,具体看个人算法)。如果用归一化处理,按上例的数据,当电流100ma时,偏差时,记录下电感A的“最大值”(这里不一定最大,不过把零偏差当做最大,具体不细说)为1000,把车移到偏差为20cm时,记录下“最小值”(跟最大同理,只是选个参考点)为200,这时,归一化公式算出值为0到1(即“归一”),偏差为零是,电感A归一值为1((1000-200)/(1000-200)),偏差20cm时,电感A归一值为0((200-200)/(1000-200)),这时,如同前例,你只需要设置阈值的归一值为0,则判定丢线,那么在赛道电源电流是120ma时,采用同样的处理,在偏差为20cm的时候,电感A归一值也为0((240-240)/(1200-240)),即电源变化对你的阈值已经没有影响了(这是理想化情况,实际考虑其他各种因素,会有很微弱的影响)。

这样的处理算法,其本质其实就是在每次车跑之前,重新快速校准偏差和电感值的对应关系。

通过归一化处理,能保证电磁车有更强的适应性,适应更宽的赛道电源电流参数,而路径将不容易受电源的不同而影响。

三、归一化步骤

将 AD值做归一化处理,即根据各个传感器接收赛道的最高电压和最低电压,计算出各个传感器的相对值,最后来计算黑线位置。

信号归一化的方法如下:
求取电压值最大的传感器位置,然后和它周围两个传感器采样值进行加权计算即可求得小车的偏差。

网上的一个参考例程

Sensor_Left =   analogRead(1);    //左边电感采集值
Sensor_Middle = analogRead(2);    //中间电感采集值
Sensor_Right =  analogRead(3);    //右边电感采集值
if (Sensor_Left + Sensor_Middle + Sensor_Right > 25)
{
	sum = Sensor_Left * 1 + Sensor_Middle * 50 + Sensor_Right * 99; //归一化处理
	Sensor = sum / (Sensor_Left + Sensor_Middle + Sensor_Right);    //求偏差
}
Velocity = 35;                                                    //电磁巡线模式下的速度
Bias = Sensor - 50;                                               //提取偏差
Angle =Bias * 0.65 + (Bias - Last_Bias) * 0.1;                    //方向PID
//Angle = abs(Bias)*Bias * 0.02 + Bias * 0.074 + (Bias - Last_Bias) * 1;
Last_Bias = Bias; //上一次的偏差
一些帖子记录

归一化是纵向处理(即对各个探头的处理),差比和是横向处理(即对探头之间的处理)

差比和同样可以消除放大率的影响 基础放大倍数已经约掉 这一点和归一化没有区别。但是却不能消除不对称

每次把归一值和实际偏差从新对应,从而保证在不同电源下计算实际偏差误差小。

跑前测。最大最小只是参考点,只要每次在固定的实际偏差时测,就可以保证准确性。

我说的这种方法是本质是每次跑之前都重测电压值与实际偏离赛道的距离的对应,通过归一抵消掉电感值(电感值不再参加控制部分数据处理),使之适应不同的赛道电源。

差和比应该在电感信号对称\一致的前提下,意义才更大。

就像给尺子标刻度,你不需要一直重标刻度吧?你的0刻度也不一定要标在尺子最边缘吧?我们需要的只是一个准确的相对刻度。

运动过程的归一,除了两个电感范围之间的差比和,还没其他思路。

这篇贴的方法只是数据的调零和归一,相当于现场快速标定。左边最大时,右边距离中线25cm,右边最大时,左边距离中线25cm,设计一个方法校准就行了。竖着的就把车横过来再扫。

这里说的归一化采值是指传感器数据自动标定(校准),过程是归一的方法。差比和是跟这里的归一采值是可以并存的;差值与和值,都包含一个放大倍率,不考虑精度的情况下,分子分母把放大倍率约掉了;差比和不能解决不对称,因为传感器本身可能不对称,重新标定后,能极大的改善对称性。

参考:

1、http://www.znczz.com/thread-220290-1-1.html

2、http://www.znczz.com/thread-213532-1-2.html

你可能感兴趣的:(#,STM32平衡小车)