[英]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-rosbag
, sudo apt install python3-rospkg
和pip3 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作为一个更快的替代方案。
运行这个:
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 bagpy
为rosbag
的不同二进制可执行文件安装了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脚本顶部使用的内容。
我正在尝试从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-rosbag
, sudo apt install python3-rospkg
和pip3 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
到目前为止为我工作。 希望这也可以帮助所有其他人。
设置:
试试这个,它会起作用:
pip3 install pyrosbag
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.