从UR5机器人的TCP / IP端口读取数据时出现问题

时间:2018-04-14 16:51:36

标签: matlab robotics

我编写了下面的MATLAB代码,从UR5的TCP / IP 30003端口读取一些数据流。我得到的结果与我的机器人上的结果不同(I我正在使用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.11mm,-431.76mm,146.07mm,0.0012, - 3.1664,-0.0395,第二个用于Gripper状态(X,Y,Z,RX,RY,RZ)。有人知道这是否是转换问题?我该如何纠正呢?

1 个答案:

答案 0 :(得分:0)

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双打。