归一化
智能车为什么要归一化处理?
在当时我也对电磁同时进行了差比和以及归一化的处理,后来发现在对中间电感进行差比和处理之后,实际产生的数值与原先差比和所产生的数值并无太大区别,遂放弃了继续归一化,全部采用了差比和的处理。
差比:
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;
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)
MotorDutyRatio += IncPIDCalc(count,Car_target_speed-DF); MotorDutyRatio=MotorDutyRatio*1-(MotorDutyRatio-Last_MotorDutyRatio)*0.4-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); 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