PID控制算法实现:基于视觉传感器数据进行机器人运动控制
function run(P,I) data2={} PI=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 PI=Perror+I(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+PI*speed
leftV=speed-PI*speed
elseif data2[1]<0.75 or data2[2]<0.75 then
rightV=speed-PI*speed
leftV=speed+PI*speed
end
sim.setJointTargetVelocity(leftmotor,leftV)
sim.setJointTargetVelocity(rightmotor,rightV)
end
这是PID控制。PD控制只包含比例项和微分项,而PID控制包含比例项、积分项和微分项。在给定的代码中,除了比例项P和微分项I,还有一个积分项PI。
原文地址: https://www.cveoy.top/t/topic/iiTm 著作权归作者所有。请勿转载和采集!