繁体   English   中英

在 Python 3 中导入 Rosbag

[英]Importing Rosbag in Python 3

我正在尝试从 Python 3 读取 rosbag 文件。
我安装了 ROS2 (Eloquent Elusor),它应该支持 Python 3。

当我跑

import rosbag
bag = rosbag.Bag('test.bag')

从 Python 2.7 开始,它可以工作。
当我在 Python 3 中尝试相同时,我得到:

ModuleNotFoundError: No module named 'rosbag'

我也尝试过: sudo apt install python-rosbagsudo apt install python3-rospkgpip3 install rospkg ,但它们没有帮助。

我应该怎么做才能从 Python 3 打开 rosbag 文件?

[编辑]
这是调用pip3 install rospkg后的输出:

Requirement already satisfied: rospkg in ./rosbag-env/lib/python3.6/site-packages
Requirement already satisfied: catkin-pkg in ./rosbag-env/lib/python3.6/site-packages (from rospkg)
Requirement already satisfied: distro in ./rosbag-env/lib/python3.6/site-packages (from rospkg)
Requirement already satisfied: PyYAML in ./rosbag-env/lib/python3.6/site-packages (from rospkg)
Requirement already satisfied: pyparsing in ./rosbag-env/lib/python3.6/site-packages (from catkin-pkg->rospkg)
Requirement already satisfied: python-dateutil in ./rosbag-env/lib/python3.6/site-packages (from catkin-pkg->rospkg)
Requirement already satisfied: docutils in ./rosbag-env/lib/python3.6/site-packages (from catkin-pkg->rospkg)
Requirement already satisfied: six>=1.5 in ./rosbag-env/lib/python3.6/site-packages (from python-dateutil->catkin-pkg->rospkg)

我编写了一个纯 python3 模块来导入 rosbag 数据。 它是独立的 - 无需安装 ROS。 它仅适用于选定的消息类型子集,但它应该作为一个示例,您可以按照该示例解压您感兴趣的消息类型: https : //github.com/event-driven-robotics/importRosbag

您可以使用bagpy包在 Python 中读取 .bag 文件。 可以使用pip安装

pip install bagpy

简要文档位于https://jmscslgroup.github.io/bagpy/

以下是示例代码片段:

import bagpy
from bagpy import bagreader

b = bagreader('09-23-59.bag')

# get the list of topics
print(b.topic_table)

# get all the messages of type velocity
velmsgs   = b.vel_data()
veldf = pd.read_csv(velmsgs[0])
plt.plot(veldf['Time'], veldf['linear.x'])

# quickly plot velocities
b.plot_vel(save_fig=True)

# you can animate a timeseries data
bagpy.animate_timeseries(veldf['Time'], veldf['linear.x'], title='Velocity Timeseries Plot')

您可以将 ROS 特定的 PyPI 索引用于rosbag和其他 ROS Python 包:

pip install --extra-index-url https://rospypi.github.io/simple/ rosbag

如果您已经获取了/opt/ros/$ROS_DISTRO/setup.bash ,它将其 Python 包添加到PYTHONPATH ,您可能还需要先unset PYTHONPATH

我还建议检查embag作为一个更快的替代方案。

TLDR;

运行这个:

pip3 install bagpy
# OR, if that ends up failing in the end due to a "Permission denied" error, 
# do this:
sudo pip3 install bagpy

现在这将适用于您的 Python 3 脚本:

import rosbag

...只要你在你的 Python 3 文件的顶部有正确的 hash-bang,比如这个:

#!/usr/bin/env python3

细节

我在这里写了ros_readbagfile和这个 ROS 教程: 从包文件中读取消息,并且这个ModuleNotFoundError: No module named 'rosbag'错误似乎出现了很多:

 Traceback (most recent call last): File "./ros_readbagfile", line 50, in <module> import rosbag ModuleNotFoundError: No module named 'rosbag'

import rosbag在 Python 3 中工作的解决方案似乎是:

pip3 install bagpy

现在import rosbag起作用了,因此, 我的ros_readbagfile脚本ros_readbagfile

根据这个答案,你显然也可以这样做:

conda install -c conda-forge ros-rosbag 

……不过我没试过。

如果您运行了pip3 install bagpy并且由于权限错误而无法完成:

 ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied

...然后也尝试使用sudo

sudo pip3 install bagpy

现在,假设有效,如果import rosbag仍然不起作用,那么可能是因为pip3 install bagpyrosbag的不同二进制可执行文件安装了bagpy (和rosbag,而不是您的脚本通过其散列线调用的最佳。 要查看是否是这种情况,请运行which python3并在 Python3 脚本的顶部使用该路径。 例如:我的which python3输出是:

 /usr/bin/python3

所以,我的 Python3 脚本顶部的 hashbang (shebang) 应该是:

#!/usr/bin/python3

其他常见路径可能包括:

 /usr/local/bin/python3

或者(在这种情况下最好),为了让您的环境为您选择 python3 可执行文件,请在 Python 3 文件的顶部使用这个 hash-bang:

#!/usr/bin/env python3

这就是我现在在ros_readbagfile.py脚本顶部使用的内容

其他参考:

  1. 我自己的评论和这个答案
  2. [在 ROS 网站上交叉链接] https://answers.ros.org/question/12307/no-module-named-rosbag-error/?answer=387606#post-id-387606

我正在尝试从Python 3读取rosbag文件。
我安装了ROS2(口才的Elusor),它应该支持Python 3。

当我跑步时

import rosbag
bag = rosbag.Bag('test.bag')

从Python 2.7开始,它可以工作。
当我在Python 3中尝试相同的操作时,我得到:

ModuleNotFoundError: No module named 'rosbag'

我也尝试过类似的事情: sudo apt install python-rosbagsudo apt install python3-rospkgpip3 install rospkg ,但是它们没有帮助。

我应该怎么做才能从Python 3打开rosbag文件?

[编辑]
这是调用pip3 install rospkg之后的输出:

Requirement already satisfied: rospkg in ./rosbag-env/lib/python3.6/site-packages
Requirement already satisfied: catkin-pkg in ./rosbag-env/lib/python3.6/site-packages (from rospkg)
Requirement already satisfied: distro in ./rosbag-env/lib/python3.6/site-packages (from rospkg)
Requirement already satisfied: PyYAML in ./rosbag-env/lib/python3.6/site-packages (from rospkg)
Requirement already satisfied: pyparsing in ./rosbag-env/lib/python3.6/site-packages (from catkin-pkg->rospkg)
Requirement already satisfied: python-dateutil in ./rosbag-env/lib/python3.6/site-packages (from catkin-pkg->rospkg)
Requirement already satisfied: docutils in ./rosbag-env/lib/python3.6/site-packages (from catkin-pkg->rospkg)
Requirement already satisfied: six>=1.5 in ./rosbag-env/lib/python3.6/site-packages (from python-dateutil->catkin-pkg->rospkg)

根据http://wiki.ros.org/rosbag/Cookbook它说你必须在 pip3 中执行以下操作才能使 rosbag 工作:

pip3 install pycryptodomex python-gnupg

到目前为止为我工作。 希望这也可以帮助所有其他人。

设置:

  • Ubuntu 18.04
  • ROS旋律
  • 蟒蛇3

试试这个,它会起作用:

pip3 install pyrosbag

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM