How to get an array from a Rosbag
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi, I'm trying to plot a data from a rosbag, here what i did until now:
bag=rosbag('/home/paolino/bagfiles/subset.bag');
wh_gaz=select(bag,'Topic','/joint_states');
wh_gazStruct=readMessages(wh_gaz,'DataFormat','struct');
This struct is a 19153x1 cell and each element is a 1x1 struct with a velocity record, a 2x1 array.
Now, what i need is to create 1 column array with each wh_gazStruct.Velocity first element, but I can't find a solution. Until now I tryed:
wh_gaz_mat=cellfun(@(m) double(m.Velocity),wh_gazStruct);
but since the .Velocity record has two elements it doesn't work. How may I solve my problem?
0 commentaires
Réponses (1)
Cam Salzberger
le 16 Sep 2021
I provided some guidance and sample code to a similar question here. That should help get you moving in the right direction!
-Cam
2 commentaires
Paolino De Risi
le 17 Sep 2021
Modifié(e) : Paolino De Risi
le 17 Sep 2021
Cam Salzberger
le 17 Sep 2021
Well, I don't know exactly what your messages look like. But if I set up my messages like this (to simulate using readMessages with DataFormat='struct'):
msg = rosmessage('sensor_msgs/JointState', 'DataFormat', 'struct');
n = 4;
msgs = cell(n, 1);
for k = 1:n
msgs{k} = msg;
msgs{k}.Velocity = [k ; -k];
end
Then I can do this:
[wh1, wh2] = cellfun(@getwheelsvelocities, msgs);
with your code as-provided, and it works just fine.
If you have any messages that do not have two entries in the Velocity field, then this code will fail.
-Cam
Voir également
Catégories
En savoir plus sur ROS Log Files and Transformations dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!