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

这是 PD 控制还是 PID 控制内容:这是一个 PID 控制函数。在该函数中,P 代表比例控制器的增益,I 代表积分控制器的增益。通过计算误差和上一个误差的差值,以及乘以对应的增益参数,来计算 PI 控制器的输出值。

PID 控制函数:用于机器人路径跟踪的代码示例

原文地址: https://www.cveoy.top/t/topic/iiU5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录