首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从UR5机器人的TCP/IP端口读取数据时出现问题

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

Stack Overflow用户
提问于 2018-04-15 00:51:36
回答 1查看 705关注 0票数 0

我写了下面的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代码

代码语言:javascript
复制
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

获得的结果:

代码语言:javascript
复制
>> 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)。有没有人知道这是不是转换问题?我怎样才能纠正它呢?

EN

回答 1

Stack Overflow用户

发布于 2018-06-10 17:28:14

Universal Robots Matlab接口(实时客户端/端口30003)发送数据包结构的数据:

代码语言:javascript
复制
int LENGTH
double PAYLOAD_0
double PAYLOAD_1
double ...
double PAYLOAD_n

长度因软件版本不同而不同,建议先读取长度,然后再读取剩余的双精度值。如果您没有读取包的完整长度,那么在您的输入缓冲区中可能会有一些“最后一个包的剩余部分”,那么您读取的下一个包就会变得毫无意义。

因此,我建议阅读长度,缓冲剩余的包,然后提取感兴趣的包。

代码语言:javascript
复制
length = read(s, 1, 'int64')
payload = read(s, length, 'double')
disp(payload(x:y))

您可以找到UR TCP interfaces here的官方文档。请注意,端口30003接口有时会被扩展,最后会有新的变量。双打的完整长度应该是139双。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49833878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档