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 脚本。

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值