如何有效地访问数据从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消息,使过程极其漫长。有更有效的方法吗?

答案(2)

塞巴斯蒂安·卡斯特罗
我认为你可以这样做……试一试:
b = [msg.Poses]
——塞巴斯蒂安
1评论
Vikrant沙
Vikrant沙 2017年7月21日
b = [msg.Poses]
抛出一个错误
结构体内容从non-struct数组对象的引用。
b =[味精{1}.Poses]
有同样的效果
b =味精{1}.Poses
b =
10000年×1 ROS构成消息数组的属性:
MessageType
位置
取向
只是创建一个消息数组。还不让我访问数据。

登录置评。


Saurabh古普塔
Saurabh古普塔 2017年7月21日
您可以使用 arrayfun 执行操作。我不知道它是否会更快,但你将能够避免循环。
例如,对于计算b.Position的总和。X值,下面应该工作。
> > anonX = @ (var) var.Position.X;
> > sumX =总和(arrayfun (anonX, b));
2的评论
chef13
chef13 2018年3月6日
嗨,你解决你的问题吗?
我试图用PoseArray消息模型(但如果成功的话我也可以使用matlab)但我有万博1manbetx很多问题。
谢谢

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!