python提取bag文件数据——bagpy

python提取bag文件数据——bagpy

bagpy是一个 Python 包,用于方便读取基于语义数据类型的 rosbag 文件。

bagpy 提供了一个用 python 编写的包装类 bagreader,它提供了一个易于使用的接口,用于读取 rosbag record 命令记录的包文件。这个包装类在内部使用 ROS 的 python API rosbag 来执行所有操作。使用 bagreader 的有趣特性之一是用户无需提供 rostopic 名称即可提取相关数据。可以根据用户正在寻找的数据类型提取数据。

要求

Ubuntu 18.04 或更高版本

Python 3.5 或更高版本。实测python3.9安装失败,使用python3.8安装成功。

pip 安装,推荐使用 Python 3.x 虚拟环境。

安装

pip install python

根据作者介绍,开发这个项目背后的理念是让一切尽可能简单和不那么混乱。因此,bagreader类致力于用最简单的方式提取相关数据,没有提供太多选项或使用自由。如果您需要多种选择,用户可以直接使用 ROS 的 rosbag python 包或 MATLAB 提供的 Robotics System Toolbox API。但是,如果您正在寻找简单,bagpy 是一个优雅的选择。

例子

导入python包

import bagpy
from bagpy import bagreader
import pandas as pd

fpath = r"D:\Document\vrtk_292590_medium_2022-01-19-12-12-55_0.bag"
b = bagreader(fpath)
#查看所有的topics
b.topic_table
# topics = b.topic_table#['Topics']

[INFO]  Data folder D:\Document\vrtk_292590_medium_2022-01-19-12-12-55_0 already exists. Not creating.
Topics Types Message Count Frequency
0 /customer_output/poi/geodetic fixposition_msgs/PoseTwistWithVarStamped 2168 20.006506
1 /customer_output/poi/odometry nav_msgs/Odometry 2166 19.976681
2 /gnss1/epoch fixposition_msgs/GnssEpoch 541 5.005363
3 /gnss1/epoch/proc fixposition_msgs/GnssEpoch 541 4.997336
4 /gnss1/latency fixposition_msgs/GnssLatency 21 0.199996
5 /gnss1/raw fixposition_msgs/RawGnss 8863 11037.642105
6 /gnss1/status fixposition_msgs/GnssStatus 108 0.999607
7 /gnss2/epoch fixposition_msgs/GnssEpoch 539 4.999445
8 /gnss2/epoch/proc fixposition_msgs/GnssEpoch 539 4.988625
9 /gnss2/latency fixposition_msgs/GnssLatency 21 0.199960
10 /gnss2/raw fixposition_msgs/RawGnss 8945 11765.228612
11 /gnss2/status fixposition_msgs/GnssStatus 106 0.999911
12 /imu/data sensor_msgs/Imu 21222 206.504062
13 /magn/data sensor_msgs/MagneticField 10725 100.604543
14 /ntrip/latency fixposition_msgs/GnssLatency 21 0.199797
15 /ntrip/raw fixposition_msgs/RawGnss 450 9939.109005
16 /rosout_agg rosgraph_msgs/Log 166 2.903802
17 /tf_static tf2_msgs/TFMessage 1 NaN
18 /vio/diagnostics diagnostic_msgs/DiagnosticStatus 533 4.938510
19 /vio/imu_biases sensor_msgs/Imu 1919 19.041173
20 /vio/odometry nav_msgs/Odometry 1917 19.484963
21 /vio/status actionlib_msgs/GoalStatusArray 532 4.939386

读取某个topic

b.message_by_topic("/customer_output/poi/geodetic")
#该代码会在讲该topic提取到如下路径
'D:\\Document\\vrtk_292590_medium_2022-01-19-12-12-55_0/customer_output-poi-geodetic.csv'

也可以使用pandas包读取csv写入到指定文件夹

georesout=b.message_by_topic("/customer_output/poi/geodetic")
geo=pd.read_csv(georesout)
sdir='d://'
geo.to_csv(sdir+"georesult1.csv")
geo
Time header.seq header.stamp.secs header.stamp.nsecs header.frame_id p.frame_id p.vector3.x p.vector3.y p.vector3.z p_var.frame_id ... v_var.frame_id v_var.vector3.x v_var.vector3.y v_var.vector3.z omega.frame_id omega.vector3.x omega.vector3.y omega.vector3.z imu_clipping imu_noise_level
0 1.642594e+09 3029 1642594379 409827471 NaN GEODETIC 39.978816 116.340648 41.030391 ENU ... ENU 1.807072e-03 1.683540e-03 1.692392e-03 ENU -0.000459 0.030601 0.029922 False 0
1 1.642594e+09 3030 1642594379 459481478 NaN GEODETIC 39.978816 116.340648 41.030164 ENU ... ENU 3.773687e-03 3.650155e-03 3.659006e-03 ENU 0.002044 0.030743 0.023512 False 0
2 1.642594e+09 3031 1642594379 509822369 NaN GEODETIC 39.978816 116.340648 41.029772 ENU ... ENU 1.815601e-03 1.688440e-03 1.697381e-03 ENU 0.000041 0.029265 0.025929 False 0
3 1.642594e+09 3032 1642594379 559783936 NaN GEODETIC 39.978816 116.340648 41.029530 ENU ... ENU 1.812177e-03 1.686710e-03 1.695694e-03 ENU 0.000486 0.029039 0.027208 False 0
4 1.642594e+09 3033 1642594379 609865904 NaN GEODETIC 39.978816 116.340648 41.031945 ENU ... ENU 1.947760e-03 1.822090e-03 1.831144e-03 ENU 0.001055 0.029367 0.026176 False 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2163 1.642594e+09 5192 1642594487 559528540 NaN GEODETIC 39.978815 116.340617 41.108435 ENU ... ENU 1.819870e-05 1.807509e-05 1.810780e-05 ENU -0.000506 0.021536 0.022465 False 0
2164 1.642594e+09 5193 1642594487 609496314 NaN GEODETIC 39.978815 116.340617 41.108559 ENU ... ENU 1.535582e-08 6.339071e-09 9.016743e-09 ENU 0.000562 0.021945 0.021546 False 0
2165 1.642594e+09 5194 1642594487 659486088 NaN GEODETIC 39.978815 116.340617 41.108559 ENU ... ENU 1.535582e-08 6.339071e-09 9.016743e-09 ENU 0.000562 0.021945 0.021546 False 0
2166 1.642594e+09 5195 1642594487 710855245 NaN GEODETIC 39.978815 116.340617 41.108406 ENU ... ENU 3.829014e-05 3.779387e-05 3.792404e-05 ENU 0.001034 0.022955 0.021147 False 0
2167 1.642594e+09 5196 1642594487 759737647 NaN GEODETIC 39.978815 116.340617 41.108539 ENU ... ENU 5.943846e-06 5.922461e-06 5.928380e-06 ENU 0.000797 0.022454 0.021330 False 0

2168 rows × 35 columns

关于更多有关示例,请参阅 https://github.com/jmscslgroup/bagpy/tree/master/notebook 上的notebook和 python 脚本。

你可能感兴趣的:(python,rosbag,bagpy,python)