求解simulink Interpreted MATLAB fcn模块连接的PID控制函数的编程问题?

如图

img

img

function [y_out] = homework4_HU_PID_fcn(yd,xt,yt,zt,vt,kp,ki,kd)
%HOMEWORK4_HU_PID_FCN 此处显示有关此函数的摘要
%   此处显示详细说明,这是一个PID控制器
% yd输入控制线,xt、yt、zt分别输入车辆的xy坐标及偏航角,vt为车辆速度;输出y_out为PID控制参数,这里为前轮角度的值
%% 定义初始参数
persistent err_i err_1         %定义持久性变量,防止从其他函数或MATLAB命令行中更改这些变量
err_i=0;err_1=0;               %用于后面计算误差的积分、微分
deta_interval=[-25,25]*pi/180; %限制前轮角度在-25°到25°之间
%% 开始控制计算
err=yd-yt;                  %设置误差为车辆到目标直线的距离,即PID控制的比例项
err_i=err_i+err;            %PID控制的积分项
if err_i>300
    err_i=300;
elseif err_i<-300
    err_i=-300;
end                         %限制积分项的大小,防止积分饱和
err_d=err-err_1;            %PID控制的微分项
u=kp*err+ki*err_i+kd*err_d; %PID控制的计算公式
y=u;                        %对前轮角度进行PID控制
if y>25
    y=25;
end
if y<-25
    y=-25;
end                         %限制前轮角度在-25°到25°之间(carsim的输入中前轮角度单位为度)
err_1=err;                  %更新下一循环err_1的值
y_out=[y];                  %保证左右前轮的角度一致
end

这个函数文件运行前要自己给一组kp,ki,kd的值才能运行,我现在想用蒙特卡洛法,用unifrnd生成1000组给定范围的kp,ki,kd随机值(如kp取0到120,ki取0到20,kd取0到30)代入到上面的m文件中运行,计算得到使车辆到目标路径y=5的距离err的绝对值的累加值为最小时的那组kp,ki,kd值,再把这组kp ki kd赋值到homework4_HU_PID_fcn中,使得simulink能以这组kp ki k值运行,并且能在MATLAB工作区看到用上面方法计算出来的err的绝对值的累加值。

建议把代码用代码块圈一下,这样可以复制下来看一下代码。

朋友是根据哪篇论文写的matlab的PID模型,可以看看嘛,这样也好解决呢,谢谢啦