如何有效地访问数据从ROS PoseArray消息吗?
18视图(30天)
显示旧的评论
我试图从rosbag turtlebot运行分析数据。我有Pose_Array消息包含大约10000个粒子和我想计算机X和Y的均值这些粒子的位置。当我试图访问如下:
rb = rosbag (“test.bag”);
tb_particle_bag =选择(rb,“主题”,' / particlecloud ');
味精= readMessages (tb_particle_bag, 1);
当我运行下面的我看到……
b =味精{1}.Poses
b =
10000年×1 ROS构成消息数组的属性:
MessageType
位置
取向
但是当我尝试访问的所有粒子的坐标我看到下面的错误:
b.Position.X
预期一个输出从一个花括号或点索引表达式,但有10000条结果。
唯一解决我发现这是单独访问每一个粒子和读取其x值在一个for循环,这是极其缓慢的如下:
为我= 1:tb_particle_bag.NumMessages
味精= readMessages (tb02_gt_particle_bag,我);
b =味精{1}.Poses;
和= [0 0];
为j = 1:尺寸(b, 1)
p = b (j) .Position;
和=和+ (p。X p.Y];
结束
tb_mp(我:)= /尺寸(b, 1)总和;
结束
这个方法大约需要2.5秒以上每个rosbag PoseArray消息,使过程极其漫长。有更有效的方法吗?
0评论
答案(2)
Saurabh古普塔
2017年7月21日
例如,对于计算b.Position的总和。X值,下面应该工作。
> > anonX = @ (var) var.Position.X;
> > sumX =总和(arrayfun (anonX, b));