PI (比例積分) コントローラーとして Matlab を使用しています。ファイル経由で「仮想ロボット」エージェントを制御しようとしてい.txt
ます。シミュレートされたエージェントは、エラーをファイルに書き込み.txt
ます。これを Matlab で実行し、エージェントが読み取る 2 つ目のファイルを介して速度を設定.txt
します。すべてリアルタイムです。
問題は、エージェントが使用しているときに Matlab がエラー ファイルを読み込もうとすることがあり (少なくともそれが起こっていると思います)、次のエラー メッセージが表示されることです。
??? Error using ==>
rfinputs>LocalTimeRespCheck at 421
Final time must be a positive
number.
Error in ==> PI_REG at 42
[v,t]=lsim(pid_d,E,t);
それを回避し、毎回完全に同期させる方法はありますか? 私が使用しているコードは次のとおりです (E.txt
はエラー ファイル、V.txt
はスピード ファイルです)。
clc, clear all, close all
Kp=1.3;
Ki=0.32;
Kd=0;
Ts=0.008;
pid_c = tf([Kd Kp Ki],[1 0]);
pid_d = c2d(pid_c,Ts);
fid=fopen('E.txt');
r=textscan(fid,'%f','\r\r');
fclose(fid);
E=r{1};
while length(E)<2464
s = dir('C:\Robot_1\E.txt');
if s.bytes == 0
pause(0.003)
else
fid=fopen('E.txt');
r=textscan(fid,'%f','\r\r');
fclose(fid);
E=r{1}; %E is error in mm
t=[0:Ts:(length(E)-1)*Ts];
[v,t]=lsim(pid_d,E,t);
v;
V=v(length(E)) %V is speed in mm/s
fid=fopen('V.txt','w');
fprintf(fid,'%V6.4f\n',V);
fclose(fid);
end
end