在 Ubuntu 和 Windows 中使用相同的代码读取 ros bag 文件会产生不同的格式
Posted
技术标签:
【中文标题】在 Ubuntu 和 Windows 中使用相同的代码读取 ros bag 文件会产生不同的格式【英文标题】:Reading ros bag file in Ubuntu and Windows using the same code yields different formats 【发布时间】:2021-02-09 17:52:33 【问题描述】:我目前正在尝试使用 python bagpy 库从 ros 包中读取数据。我已经在 Windows 中编写了代码,但最近切换到了 Ubuntu。如果我现在尝试在 Ubuntu 中运行相同的代码,则输出的格式会有所不同。这是我用来读取数据的代码:
import pandas as pd
import bagpy
from bagpy import bagreader
class import_DVS:
def __init__(self, dir):
#Directory of event data
self.dir = dir
def read_data(self):
#Reading data
b = bagreader(self.dir)
#Selecting relevant entries
newmsg = b.message_by_topic(topic = 'raw_data')
return newmsg
dir_event = 'path'
DVS_data = import_DVS(dir_event)
newmsg = DVS_data.read_data()
当我在 Windows 中运行此代码时,变量“newmsg”是一个包含所有包数据的列表。这是该列表的第一个条目:
newmsg[0]
header:
seq:10
stamp:
secs: 1455208733
nscecs: 468284623
frame:_id: ´´
height: 180
width: 240
events:
-
x: 90
y: 47
ts:
secs: 1455208733
nsecs: 468284623
polarity: False
-
x: 82
y: 135
ts:
secs: 1455208733
nsecs: 468330623
polarity: False
-
x: 73
y: 150
ts:
secs: 1455208733
nsecs: 468333623
polarity: False
-
....
该列表包含另一个列表(事件),其中每个条目都有一堆数据,我都可以单独访问这些数据。使用newmsg[0].events[0].x
例如让我访问事件列表的第一个元素中的 x。
但是,当我在 Ubuntu 中运行相同的代码时,会返回一个 csv 文件:
newmsg
'//home/yvonne/Documents/uni_stuff/thesis/code/DVS_data/08_17/DVS-IMU-RADAR/trial1/DVS_BAG/aw_data.csv'
我尝试通过使用 pandas 读取生成的 csv 文件来访问事件列表中的元素,如下所示:
newmsg = pd.read_csv(newmsg)
newmsg.events[0]
'[x: 167\ny: 86\nts: \n secs: 0\n nsecs: 27729000\npolarity: False, x: 127\ny: 112\nts: \n secs: 0\n nsecs: 27729000\npolarity: False, x: 128\ny: 5\nts: \n secs: 0\n nsecs: 27730000\npolarity: False, x: 205\ny: 39\nts: \n secs: 0\n nsecs: 27730000\npolarity: False, x: 233\ny: 179\nts: \n secs: 0\n nsecs: 27731000\npolarity: False, x: 89\ny: 91\nts: \n secs: 0\n nsecs: 27731000\npolarity: False, x: 213\ny: 28\nts: \n secs: 0\n nsecs: 27733000\npolarity: False, x: 83\ny: 8\nts: \n secs: 0\n nsecs: 27734000\npolarity: False, x: 226\ny: 9\nts: \n secs: 0\n nsecs: 27734000\npolarity: False, x: 143\ny: 121\nts: \n secs: 0\n nsecs: 27735000\npolarity: False, x: 183\ny: 176\nts: \n secs: 0\n nsecs: 27735000\npolarity: False, x: 207\ny: 132\nts: \n secs: 0\n nsecs: 27736000\npolarity: False, x: 48\ny: 32\nts: \n secs: 0\n nsecs: 27736000\npolarity: False, x: 193\ny: 69\nts: \n secs: 0\n nsecs: 27739000\npolarity: False, x: 229\ny: 60\nts: \n......
这将返回一个包含所有事件数据的字符串,这样我就无法再访问各个条目了。对于可能导致这种差异的原因,我非常迷茫,所以如果有人知道为什么会发生这种情况,或者我如何仍然可以访问事件列表的各个元素而无需遍历大量字符串,我将非常感激: )
【问题讨论】:
【参考方案1】:您检查过 Windows 和 Ubuntu 中的 bagpy 版本吗?
您可以通过输入pip list
来检查版本,然后检查哪个版本
bagpy
已安装在您的 Windows 和 Ubuntu 中。
根据当前文档: https://jmscslgroup.github.io/bagpy/bagpy_example.html
调用message_by_topic
以CSV 格式返回解码消息的文件名。
因此,在您的 code-sn-p 之后添加这两行代码:
import pandas as pd
df = pd.DataFrame(newmsg)
【讨论】:
以上是关于在 Ubuntu 和 Windows 中使用相同的代码读取 ros bag 文件会产生不同的格式的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 上的特定或当前文件夹中启动 WSL Ubuntu
从 Windows 部署到 aws 上的 ubuntu 实例