Данная статья является внеочередной в серии. Ее можно рассматривать как полезное дополнение к статье. Здесь я расскажу о таком полезном инструменте в ROS как rosbag. Кого заинтересовало, прошу под кат.
Что это rosbag?
rosbag позволяет сохранять данные, публикуемые в топики ROS в специальные файлы с раширением bag. Затем эти файлы можно воспроизвести посредством того же rosbag; данные при этом будут публиковаться в те же самые топики, в которые они публиковались изначально. Это позволяет, например, имитировать получение данных с сенсоров при отсутствии таковых.
Запись данных с топика в bag файл
Для примера, мы будем записывать данные с камеры Raspberry Pi. Если вспомнить статью, где мы получали видеопоток с камеры и публиковали его в топик image_raw. Сейчас мы как раз воспользуемся этим же узлом ROS для получения данных для записи. Мы запишем видеопоток из топика image_raw в rosbag файл raspicam_image_raw.bag, а затем воспроизведем его, получив оригинальный поток без использования камеры.
Итак запустим узел raspi_cam_ros:
rosrun raspi_can_ros capture
Покажем список активных топиков:
rostopic list
Среди топиков будет наш топик image_raw. Теперь воспользуемся rosbag для записи топика:
rosbag record /image_raw -o raspicam_image_raw
Запишем несколько минут видеопотока. Лучше не записывать очень длинные потоки, поскольку bag файлы занимают приличное место в памяти. Например, у меня запись длиной в минуту с половиной заняла 90 Мб.
Сначала посмотрим, что содержит наш bag файл:
rosbag info <имя файла>
path: 2016-05-07-13-00-23.bag version: 2.0 duration: 55.1s start: May 07 2016 15:00:24.86 (1462626024.86) end: May 07 2016 15:01:19.96 (1462626079.96) size: 89.7 MB messages: 102 compression: none [102/102 chunks] types: sensor_msgs/Image [060021388200f6f0f447d0fcd9c64743] topics: /image_raw 102 msgs : sensor_msgs/Image
Прогрывание данных bag файла
Теперь остановим наш узел и воспроизведем запись:
rosbag play raspicam_image_raw.bag -r 1 --loop
Покажем данные с топика image_raw в окне rqt_image_view:
rosrun rqt_image_view rqt_image_view
Воспроизведение записи bag файла на Raspberry Pi 2 можно посмотреть на видео.
Команда rosbag play также имеет несколько полезных параметров:
- -r FACTOR определяет фактор скорости (частота смена кадров умножается на эту величину)
- -hz=HZ определяет частоту кадров в Гц (по умолчанию 100)
- —loop зацикливает воспроизведение («перематывает» в начало при достижении конца записи)
Существует специальный инструмент rqt_bag для записи и работы с bag файлами. На официальной странице вы можете подробнее узнать об этой утилите.
Пока на этом все о rosbag. Думаю, вы найдете множество применений для утилиты rosbag. Это довольно мощная утилита и без нее трудно обойтись при полноценном использовании ROS.
Желаю удачи в проектах с использованием ROS!