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.
TopicsTypesMessage CountFrequency
0/customer_output/poi/geodeticfixposition_msgs/PoseTwistWithVarStamped216820.006506
1/customer_output/poi/odometrynav_msgs/Odometry216619.976681
2/gnss1/epochfixposition_msgs/GnssEpoch5415.005363
3/gnss1/epoch/procfixposition_msgs/GnssEpoch5414.997336
4/gnss1/latencyfixposition_msgs/GnssLatency210.199996
5/gnss1/rawfixposition_msgs/RawGnss886311037.642105
6/gnss1/statusfixposition_msgs/GnssStatus1080.999607
7/gnss2/epochfixposition_msgs/GnssEpoch5394.999445
8/gnss2/epoch/procfixposition_msgs/GnssEpoch5394.988625
9/gnss2/latencyfixposition_msgs/GnssLatency210.199960
10/gnss2/rawfixposition_msgs/RawGnss894511765.228612
11/gnss2/statusfixposition_msgs/GnssStatus1060.999911
12/imu/datasensor_msgs/Imu21222206.504062
13/magn/datasensor_msgs/MagneticField10725100.604543
14/ntrip/latencyfixposition_msgs/GnssLatency210.199797
15/ntrip/rawfixposition_msgs/RawGnss4509939.109005
16/rosout_aggrosgraph_msgs/Log1662.903802
17/tf_statictf2_msgs/TFMessage1NaN
18/vio/diagnosticsdiagnostic_msgs/DiagnosticStatus5334.938510
19/vio/imu_biasessensor_msgs/Imu191919.041173
20/vio/odometrynav_msgs/Odometry191719.484963
21/vio/statusactionlib_msgs/GoalStatusArray5324.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
Timeheader.seqheader.stamp.secsheader.stamp.nsecsheader.frame_idp.frame_idp.vector3.xp.vector3.yp.vector3.zp_var.frame_id...v_var.frame_idv_var.vector3.xv_var.vector3.yv_var.vector3.zomega.frame_idomega.vector3.xomega.vector3.yomega.vector3.zimu_clippingimu_noise_level
01.642594e+0930291642594379409827471NaNGEODETIC39.978816116.34064841.030391ENU...ENU1.807072e-031.683540e-031.692392e-03ENU-0.0004590.0306010.029922False0
11.642594e+0930301642594379459481478NaNGEODETIC39.978816116.34064841.030164ENU...ENU3.773687e-033.650155e-033.659006e-03ENU0.0020440.0307430.023512False0
21.642594e+0930311642594379509822369NaNGEODETIC39.978816116.34064841.029772ENU...ENU1.815601e-031.688440e-031.697381e-03ENU0.0000410.0292650.025929False0
31.642594e+0930321642594379559783936NaNGEODETIC39.978816116.34064841.029530ENU...ENU1.812177e-031.686710e-031.695694e-03ENU0.0004860.0290390.027208False0
41.642594e+0930331642594379609865904NaNGEODETIC39.978816116.34064841.031945ENU...ENU1.947760e-031.822090e-031.831144e-03ENU0.0010550.0293670.026176False0
..................................................................
21631.642594e+0951921642594487559528540NaNGEODETIC39.978815116.34061741.108435ENU...ENU1.819870e-051.807509e-051.810780e-05ENU-0.0005060.0215360.022465False0
21641.642594e+0951931642594487609496314NaNGEODETIC39.978815116.34061741.108559ENU...ENU1.535582e-086.339071e-099.016743e-09ENU0.0005620.0219450.021546False0
21651.642594e+0951941642594487659486088NaNGEODETIC39.978815116.34061741.108559ENU...ENU1.535582e-086.339071e-099.016743e-09ENU0.0005620.0219450.021546False0
21661.642594e+0951951642594487710855245NaNGEODETIC39.978815116.34061741.108406ENU...ENU3.829014e-053.779387e-053.792404e-05ENU0.0010340.0229550.021147False0
21671.642594e+0951961642594487759737647NaNGEODETIC39.978815116.34061741.108539ENU...ENU5.943846e-065.922461e-065.928380e-06ENU0.0007970.0224540.021330False0

2168 rows × 35 columns

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

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
### 回答1: 你好,可以使用Python中的pandas库来提取Excel文件数据。具体操作可以参考以下代码: ```python import pandas as pd # 读取Excel文件 df = pd.read_excel('文件路径') # 查看数据 print(df.head()) ``` 其中,'文件路径'需要替换为你要读取的Excel文件的路径。另外,如果Excel文件中有多个工作表,可以使用以下代码来指定要读取的工作表: ```python # 读取指定工作表 df = pd.read_excel('文件路径', sheet_name='工作表名称') ``` 同样,'工作表名称'需要替换为你要读取的工作表的名称。希望能帮到你! ### 回答2: Python是一种高级编程语言,它提供了丰富的库和模块,可以用来处理各种任务,包括提取Excel文件数据。 在Python中,有一个广泛使用的库叫做pandas,它提供了各种方法和功能,可以轻松地将Excel文件中的数据提取出来。使用pandas库,我们可以首先导入数据,然后对数据进行各种操作。 首先,我们需要安装pandas库。在安装完成之后,我们就可以开始使用它了。首先,我们需要导入pandas库,并使用read_excel方法读取Excel文件。这个方法可以接受Excel文件的路径作为参数,并返回一个包含文件数据的DataFrame对象。接下来,我们可以使用DataFrame对象的方法来处理数据,例如筛选、排序和聚合等。 除了pandas库,还有其他一些库也可以用来提取Excel文件数据。例如,xlrd库可以用来读取Excel文件,openpyxl库可以用来读取和写入Excel文件。这些库都提供了相应的方法和功能,可以根据需要进行选择和使用。 总的来说,Python提供了多种方式和工具来提取Excel文件数据。无论是使用pandas库还是其他类似的库,都可以根据具体的需求选择最适合的方法。通过使用Python,我们可以轻松地从Excel文件提取数据,并进行灵活的处理和分析。 ### 回答3: Python提取Excel文件数据可以使用多种方法,下面以使用pandas库为例进行说明。 首先,需要通过pip命令安装pandas库,可以执行以下命令进行安装: ``` pip install pandas ``` 然后,需要导入pandas库并读取Excel文件,如下所示: ```python import pandas as pd # 读取Excel文件 data = pd.read_excel('文件路径/文件名.xlsx') ``` 读取Excel文件后,可以对数据进行一系列操作,例如查看数据的前几行: ```python # 查看前5行数据 print(data.head()) ``` 还可以选择指定的列进行提取: ```python # 提取指定列的数据 column_data = data['列名'] ``` 若需要提取多个列的数据,可以在列名中传入一个列表: ```python # 提取多个列的数据 columns = ['列名1', '列名2', '列名3'] column_data = data[columns] ``` 此外,还可以根据条件提取数据: ```python # 根据条件提取数据 condition_data = data[data['列名'] > 10] ``` 提取数据后,可以将数据保存为新的Excel文件: ```python # 将数据保存为Excel文件 column_data.to_excel('保存路径/保存文件名.xlsx', index=False) ``` 以上就是使用Python提取Excel文件数据的简单介绍。当然,还有其他库和方法可以实现相同的功能,选择适合自己的方法进行数据提取即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值