归一化

智能车为什么要归一化处理?

在当时我也对电磁同时进行了差比和以及归一化的处理,后来发现在对中间电感进行差比和处理之后,实际产生的数值与原先差比和所产生的数值并无太大区别,遂放弃了继续归一化,全部采用了差比和的处理。

差比:

duty = 750(中间值)

duty = duty + (AIN7 - AIN1)

归一化:

1
2
3
4
5
6
7
8
9
10
11
12
13
//该代码为网上所找的历程
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); //求偏差
}
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; //上一次的偏差

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 //电机控制
if(SteerDutyRatio1<1365)
// DF=(1470)/3;
MotorDutyRatio += IncPIDCalc(count,Car_target_speed-DF); //计算出电机控制增量 -
MotorDutyRatio=MotorDutyRatio*1-(MotorDutyRatio-Last_MotorDutyRatio)*0.4-1*(count-L_count);
// MotorDutyRatio=MotorDutyRatio*0.7+Last_MotorDutyRatio*0.3-1*(count-L_count);
if((MotorDutyRatio-Last_MotorDutyRatio)>100) MotorDutyRatio=Last_MotorDutyRatio+100;
if((MotorDutyRatio-Last_MotorDutyRatio)<-100) MotorDutyRatio=Last_MotorDutyRatio-100;
L_count=count;
MotorDutyRatio1 += IncPIDCalc(count1,Car_target_speed+DF); //计算出电机控制增量 +
MotorDutyRatio1=MotorDutyRatio1*1-(MotorDutyRatio1-Last_MotorDutyRatio1)*0.3-1*(count1-L_count1);
// MotorDutyRatio1=MotorDutyRatio1*0.7+Last_MotorDutyRatio1*0.3-1*(count1-L_count1);
L_count1=count1;
if((MotorDutyRatio1-Last_MotorDutyRatio1)>100) MotorDutyRatio1=Last_MotorDutyRatio1+100;
if((MotorDutyRatio1-Last_MotorDutyRatio1)<-100) MotorDutyRatio1=Last_MotorDutyRatio1-100;

if(MotorDutyRatio >900) MotorDutyRatio = 900; //电机控制量限幅
if(MotorDutyRatio <100) MotorDutyRatio = 100;
if(MotorDutyRatio1>900) MotorDutyRatio1 = 900;//电机控制量限幅
if(MotorDutyRatio1<100) MotorDutyRatio1 = 100;
Left__P_motor_pwm(MotorDutyRatio1);
Right_P_motor_pwm(MotorDutyRatio);
Last_MotorDutyRatio=MotorDutyRatio;
Last_MotorDutyRatio1=MotorDutyRatio1;


80:/$27s


文章作者: 小熊大大
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小熊大大 !
  目录