我写了下面的MATLAB代码,以便从UR5的TCP/IP 30003端口读取一些数据流。我得到的结果与我的机器人(我使用的是URSim 3.5.3虚拟环境)上的结果不同,但它假定是相同的。尽管它看起来很接近,因为正如预期的那样有6个数据。
我相信这是可能的,因为有人使用python来实现它的http://www.zacobria.com/universal-robots-knowledge-base-tech-support-forum-hints-tips/knowledge-base/client-interfaces-cartesian-matlab-data/,但我被指示使用MATLAB。
MATLAB代码
clear all
HOST = '192.168.56.101';
PORT_30003 = 30003;
while (true)
s = tcpclient(HOST, PORT_30003);
disp('connected and starting program');
disp('data received:');
data = read(s, 80, 'double');
disp(data(56:61));
pause(1);
end获得的结果:
>> ur5
connected and starting program
data received:
1.0e-15 *
-0.4406 0.0000 -0.0000 0.0000 0.0000 -0.0000
connected and starting program
data received:
1.0e-15 *
-0.4406 0.0000 -0.0000 0.0000 0.0000 -0.0000连续相同,因为机器人没有移动,但与我的机器人中的值非常不同。第一行是笛卡尔坐标(X,Y,Z,RX,RY,RZ),但在运行程序时,我的机器人上的值是:-120.11 my,-431.76 my,146.07 my,0.0012,-3.1664,-0.0395,第二行是夹子状态(X,Y,Z,RX,RY,RZ)。有没有人知道这是不是转换问题?我怎样才能纠正它呢?
发布于 2018-06-10 17:28:14
Universal Robots Matlab接口(实时客户端/端口30003)发送数据包结构的数据:
int LENGTH
double PAYLOAD_0
double PAYLOAD_1
double ...
double PAYLOAD_n长度因软件版本不同而不同,建议先读取长度,然后再读取剩余的双精度值。如果您没有读取包的完整长度,那么在您的输入缓冲区中可能会有一些“最后一个包的剩余部分”,那么您读取的下一个包就会变得毫无意义。
因此,我建议阅读长度,缓冲剩余的包,然后提取感兴趣的包。
length = read(s, 1, 'int64')
payload = read(s, length, 'double')
disp(payload(x:y))您可以找到UR TCP interfaces here的官方文档。请注意,端口30003接口有时会被扩展,最后会有新的变量。双打的完整长度应该是139双。
https://stackoverflow.com/questions/49833878
复制相似问题