显示输入数据从ROS的话题

12个视图(30天)
喂,
我新ROS在Matlab和试图建立一个程序,可以画出数据从一个话题。我安装了机器人系统工具箱。
这是我的程序使用一个例子网络:
%启动ROS的主人并连接到网络
rosinit;%连接ROS和初始化
exampleHelperROSCreateSampleNetwork;%创建一个示例ros网络
rostopic列表%显示所有主题
robotpose = rossubscriber (/构成的,@exampleHelperROSPoseCallback);%创建“robotpose”作为用户主题/构成的
全球pos%全局变量pos
全球东方%全局变量东方
%的当前价值构成和方向将存储在pos和东方
暂停(1);
一个= pos;
B =东方;
counter_1 = 1;
counter_2 = 1;
x_width = 100;
%图(1)设置
图(1)
次要情节(1、2、1)
标题(“位置”);
包含(“时间”);ylabel (“价值”);
网格;
持有;
%图(2)设置
图(2)%
次要情节(1、2、2)
标题(“定位”);
包含(“时间”);ylabel (“价值”);
网格;
持有;
1
暂停(0.25);% 0.25秒然后继续等待
图(1)%
次要情节(1、2、1)
如果(大小(A) < = (x_width))%的开始是新建立的
一个= [;pos];%从pos的新行填充数据
% pos %显示控制pos
情节([1:counter_1]”, (1: counter_1, 1),“颜色”,(1,0,0));%绘制x achsis
情节([1:counter_1]”, (1: counter_1, 2),“颜色”,(0,1,0));%的阴谋y achsis
情节([1:counter_1]”, (1: counter_1, 3),“颜色”[0,0,1]);% z achsis情节
如果counter_1 = = 1
传奇(“x”,“y”,“z”,“位置”,“southoutside”);%传说的情节
结束
其他的%是扩大和第一个元素删除
=[(2:大小(A):); pos);%从pos的新行填充数据
% pos %显示pos fA¼r控制
xlim ([(counter_1 - x_width), counter_1]);
情节([(counter_1 - x_width + 1): counter_1 + 1]”, (: 1),“颜色”,(1,0,0));
情节([(counter_1 - x_width + 1): counter_1 + 1]”, (:, 2),“颜色”,(0,1,0));
情节([(counter_1 - x_width + 1): counter_1 + 1]”, (:, 3),“颜色”[0,0,1]);
结束
counter_1 = counter_1 + 1;%的步数
图(2)%
次要情节(1、2、2)
如果(大小(B) < = (x_width))%一样像
B = [B;东方];%东方不是pos
情节([1:counter_2]”, B (1: counter_2, 1),“颜色”,(1,0,0));
情节([1:counter_2]”, B (1: counter_2, 2),“颜色”,(0,1,0));
情节([1:counter_2]”, B (1: counter_2, 3),“颜色”[0,0,1]);
如果(counter_2 = = 1)
传奇(“x”,“y”,“z”,“位置”,“southoutside”);
结束
其他的
B = [B(2:大小(B):);东方);
xlim ([(counter_2 - x_width), counter_2]);
情节([(counter_2 - x_width + 1): counter_2 + 1]”, B (: 1),“颜色”,(1,0,0));
情节([(counter_2 - x_width + 1): counter_2 + 1]”, B (:, 2),“颜色”,(0,1,0));
情节([(counter_2 - x_width + 1): counter_2 + 1]”, B (:, 3),“颜色”[0,0,1]);
结束
counter_2 = counter_2 + 1;
结束
当程序运行一段时间(大约2分钟,取决于电脑)反应很慢,故事情节不正常工作。有另一个无限循环的吗?

接受的答案

西班牙Mitra
西班牙Mitra 2016年2月24日
如果你可以创建一个从正在运行的ROS .bag文件,然后您可以阅读到MATLAB和提取数据作为timeseries的消息。这将是离线分析。
加快绘图部分一点——你可以初始化矩阵a和B,尾随零然后改变XData和YData线处理的内部循环,而不是使用plot命令。
例如:
X = 1:10 0;
日元= randn (1100);
Y2 = randn (1100);
图(1);持有;
h1 =情节(X, y₁,“颜色”,(1,0,0));
h2 =情节(X, Y2,“颜色”,(0,1,0));
(1)
暂停(0.25);
日元= [Y1 (2:10 0), randn (1)];
Y2 = [Y2 (2:10 0), randn (1)];
h1。YData = y₁;
h2。YData = Y2;
结束
如果“暂停”命令没有被使用,那么“drawnow”需要在循环强制MATLAB画线在每一个迭代。
1评论
Ignacio Arriscado
Ignacio Arriscado 2019年4月11日
你好,
能实时显示数据,当这些数据来自ros节点用户?我想设计一个桌面应用程序从turtlebot实时显示数据,这是可能的吗?

登录置评。

更多的答案(0)