Загрузка набора сообщений из rosbag в Matlab

#matlab #time-series #ros #bag

#matlab #временные ряды #ros #пакет

Вопрос:

Мне любопытно, есть ли лучший способ загрузить информацию из файлов ROS bag в Matlab.

Мой текущий рабочий процесс:

 bag = rosbag(FILE_LOCATION)
bagSel = select(bag,'Topic','/mavros/imu/data')
X_imu_raw = timeseries(bagSel)
t_imu_angvel = X_imu_raw.Time - bag.StartTime
X_imu_angvel = X_immu_raw.Data(:,8:10) % indices of X,Y, and Z
  

При необходимости загружать много разных наборов сообщений это становится очень громоздким. Я не уверен, как извлекать наборы сообщений из временных рядов, например, я могу определить угловую скорость только одной оси, написав:

 timeseries(bagSel,'AngularVelocity.X')
  

В идеале я хотел бы написать что-то вроде:

 timeseries(bagSel,'AngularVelocity')
  

и извлеките все сообщения об угловой скорости из темы (x, y и z), но я не уверен, возможно ли это и как это сделать?

Ответ №1:

Я предполагаю, что вы пытаетесь получить данные ROSBAG в Matlab. По нашему опыту работы с сообщениями IMU мы обнаружили, что matlab toolbox работает очень медленно, поэтому раздвоили некоторый существующий код, чтобы разработать что-то, что эффективно работает для нас. Это немного громоздко, но как только вы добавляете свои собственные определения, этот код работает очень быстро. Мы могли бы обрабатывать пакеты за 10 секунд, что могло бы занять 10 минут с помощью Matlab toolbox. В основном он написан на C с жестко закодированными определениями сообщений и использует модуль Matlab mex для преобразования непосредственно в файл .mat. Надеюсь, вы найдете это полезным — https://github.com/neufieldrobotics/bag2mat

Комментарии:

1. о да, я вижу, что забыл написать matlab. Моя проблема на самом деле больше связана с тем, насколько громоздко загружать определенные наборы без выбора имен сообщений при использовании функции временных рядов. При этом я заметил задержку, поэтому я посмотрю на ваш репозиторий.