Импорт Rosbag в Python 3

Я пытаюсь читать файлы rosbag из Python 3.
Я установил 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, но они не помогают.

Что мне делать, чтобы открыть файл rosbag из Python 3?

[РЕДАКТИРОВАТЬ]
Это результат после вызова 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)

person Lovro    schedule 17.01.2020    source источник
comment
Насколько я понимаю, библиотека rosbag - это только python2.7, и из того, что я смог исследовать, еще не существует на Python3. pyrosbag не является стабильной библиотекой, и я бы не стал ее предлагать. Есть несколько руководств по использованию библиотек python2.7 в python3, хотя мне это кажется хакерским. Я сейчас в одной лодке с тобой.   -  person castaway2000    schedule 18.01.2020


Ответы (5)


Я написал чистый модуль python3 для импорта данных rosbag. Он автономный - установка ROS не требуется. Он работает только для выбранного подмножества типов сообщений, но должен служить примером, которому вы можете следовать, чтобы распаковать типы сообщений, которые вас интересуют: https://github.com/event-driven-robotics/importRosbag

person simbamford    schedule 01.04.2020

Вы можете использовать пакет bagpy для чтения файла .bag в Python. Его можно установить с помощью 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')

person Astra Uvarova - Saturn's star    schedule 12.10.2020
comment
Как реализация bagreader обходится без использования import rosbag внизу и как ее установить? - person nimig18; 22.02.2021
comment
Не уверен, что понял ваш вопрос. - person Astra Uvarova - Saturn's star; 23.02.2021

Согласно http://wiki.ros.org/rosbag/Cookbook говорится, что у вас есть сделать следующее в pip3, чтобы rosbag заработал:

pip3 install pycryptodomex python-gnupg

У меня пока работает. Надеюсь, что это поможет и всем остальным.

Настраивать:

  • Ubuntu 18.04
  • ROS Melodic
  • Python3
person Steven    schedule 30.03.2021

Вы можете использовать индекс PyPI для ROS для rosbag и других пакетов Python для ROS:

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

Если у вас уже есть исходный код /opt/ros/$ROS_DISTRO/setup.bash, который добавляет свои пакеты Python в PYTHONPATH, вам также может потребоваться сначала выполнить unset PYTHONPATH.

person Martin Valgur    schedule 12.07.2021

Попробуйте это, и это сработает:

pip3 install pyrosbag
person Shahryar    schedule 17.01.2020
comment
pyrosbag - это не тот пакет, который запрашивает OP. - person castaway2000; 18.01.2020
comment
Если вы проверите пиросбаг, вы увидите, что это именно то, что он просил. - person Shahryar; 18.01.2020