PD控制算法在小车循迹中的应用 - P值和D值的影响
在PD控制中,P值和D值分别对小车循迹效果有不同的影响。
-
P值(比例控制):P值决定了响应误差的速度和力度。较大的P值会使小车更快地对误差做出响应,但可能会导致过冲和震荡。较小的P值则会导致响应较慢。
-
D值(微分控制):D值决定了响应误差的变化率。较大的D值可以减小过冲和震荡,但可能会导致响应过度,使小车变得不稳定。较小的D值可能导致过冲和震荡问题。
因此,选择合适的P和D值是很重要的,需要根据具体情况进行调试和优化,以达到稳定而快速的循迹效果。
以下是一个使用PD控制算法的小车循迹程序示例:
function run(P,D)
data2={}
PD=0
error=0
for i=1,5,1 do
res,data=sim.readVisionSensor(floorSensorHandles[i])
if(res>=0)then
data2[i]=data[11]
end
end
if(data2[4]<0.73) then
data2[3]=0
end
if(data2[2]<0.73) then
data2[1]=0
end
if(data2[2]<data2[4]) then
if(data2[3]<data2[1]) then
error=math.abs(data2[5]-0.095)+math.abs(data2[3]-0.85)+math.abs(data2[2]-0.85)
else
error=math.abs(data2[5]-0.095)+math.abs(data2[1]-0.85)+math.abs(data2[2]-0.85)
end
else
if(data2[3]<data2[1]) then
error=math.abs(data2[5]-0.095)+math.abs(data2[3]-0.85)+math.abs(data2[4]-0.85)
else
error=math.abs(data2[5]-0.095)+math.abs(data2[1]-0.85)+math.abs(data2[4]-0.85)
end
end
PD=P*error+D*(error-previousError)
previousError=error
previousdata=data2
if error<0.2 then
rightV=speed
leftV=speed
previousError=0
elseif data2[3]<0.75 or data2[4]<0.75 then
rightV=speed+PD*speed
leftV=speed-PD*speed
elseif data2[1]<0.75 or data2[2]<0.75 then
rightV=speed-PD*speed
leftV=speed+PD*speed
end
sim.setJointTargetVelocity(leftmotor,leftV)
sim.setJointTargetVelocity(rightmotor,rightV)
end
通过调整P和D的值,可以优化小车的循迹性能,使其更加稳定和快速。
原文地址: https://www.cveoy.top/t/topic/pAvV 著作权归作者所有。请勿转载和采集!