电磁循迹作为智能车相对简单的入门循迹方式,一直都是大部分人刚开始接触时所使用的方案。而对于电磁处理的方法,主要有差比和处理以及归一化处理。最近在看吴恩达老师的人工智能课程时,在一节课程中讲解了关于归一化的一些好处,由此联想到自己在做智能车比赛时所采用的电磁循迹算法。
在当时我也对电磁同时进行了差比和以及归一化的处理,后来发现在对中间电感进行差比和处理之后,实际产生的数值与原先差比和所产生的数值并无太大区别,遂放弃了继续归一化,全部采用了差比和的处理。也没有去想过为什么好多学校都采用了归一化处理的方式的原因。
所谓归一化,最简单的理解就是将你所需要的数据限制到一个很小的范围之内,方便之后的处理。而同时,归一化其实也有多种的表达方式:
1.最大最小值归一化:将采集的数值缩放到[0,1]之间
//该代码为网上所找的历程 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; //上一次的偏差
2.均值归一化:将你所采集的数值缩放到[-1,1]之间,使数据的均值变为0
3.标准值归一化:将数值缩放到0附近,且数据的分布变为均值为0,标准差为1的标准正态分布。
σ(x)是x xx的标准差,计算公式为:
其实以上的方法,也可以归做特征缩放,它对基于距离的算法特别重要。运用到智能车电感循迹上就显现在了不同位置的,不同摆放形式的电感在磁场线中的相对距离位置。
而对于归一化处理的优点,就在于:
1.可以消除特征间单位和尺度差异的影响 (电感在采集电磁信号值时,最大值和最小值之间的差距较大)
2.能提高梯度下降法求解最优解的速度(收敛所需的迭代次数更少)
关于第二点,以下图为例,左图为未进行归一化处理的损失函数,右图是进行归一化后处理的损失函数。红线可以简单理解为找到最优解的方式。不理解上面的一些术语没关系,但是我们可以很明显的看出,在进行归一化处理后,右图红线部分可以很快的找到最优解。
以上仅为我个人对电磁为什么要用归一化处理的理解, 如有错误,还望指正。