0

我使用 Matlab 作为 PI(比例积分)控制器。我正在尝试通过.txt文件控制“虚拟机器人”代理。模拟代理将错误写入.txt文件。我通过 Matlab 运行它并通过.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
4

1 回答 1

0

您正在使用文本文件在机器人和 matlab 之间建立通信吗?

您的问题没有正确说明,因为它没有说机器人“在哪里”:它是远程 mcu,还是在您自己/另一台 pc 上运行的一些代码?

在第一种情况下,我强烈建议使用串行接口。

在第二种情况下,使用套接字(更健壮/灵活并且有大量代码)或管道之类的东西(不知道如何在 matlab 中干净地完成它)。使用文件进行通信只是一种不好的做法。

于 2013-07-21T16:10:36.327 回答