ROS — Урок 17 — Запись и воспроизведение данных



Содержание

1. Запись и воспроизведение данных

Описание: Этот урок научит вас, как записывать данные из работающей системы ROS в .bag-файл, а затем воспроизводить данные для воспроизведения поведения работающей системы.

1.1 Запись данных (создание bag-файла)

Этот раздел урока научит вас, как записывать данные тем(topic) из работающей системы ROS. Данные тем будут накапливаться в bag-файле.

Во-первых, выполните следующие две команды:

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

Это приведет к запуску двух узлов — визуализатора turtlesim и узла, позволяющего контролировать turtlesim с помощью стрелок на клавиатуре. Если выбрать окно терминала, из которого вы запустили turtle_teleop_key, вы должны увидеть что-то вроде:

Reading from keyboard
---------------------------
Use arrow keys to move the turtle.

Нажатие клавиш со стрелками должно вызывать перемещение черепахи по экрану. Обратите внимание, что управление движением черепахи вы должны установить активным терминал с которого вы запустили turtle_teleop_key, а не окно turtlesim.

1.1.1 Запись всех опубликованных тем

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

rostopic list -v

Должна появиться информация вроде:

Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/command_velocity [turtlesim/Velocity] 1 publisher
 * /rosout [rosgraph_msgs/Log] 2 publishers
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/command_velocity [turtlesim/Velocity] 1 subscriber
 * /rosout [rosgraph_msgs/Log] 1 subscriber

Это список опубликованных тем с типом сообщений, которые потенциально могут быть записаны в лог-файл данных, так как записываются только опубликованные сообщения. Темы /turtle1/command_velocity — это командные сообщения, опубликованные turtle_telelop, которые принимаются в качестве входных данных в процессе turtlesim. Сообщение /turtle1/color_sensor и /turtle1/pose — это выводимые сообщения, публикуемые turtlesim.

Теперь запишем публикуемые данные. Откройте новое окно терминала. В этом окне выполните следующие команды:

mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a

Здесь мы просто создаём временный каталог для записи данных, а затем запускаем rosbag record с опцией -a, которая указывает, что все опубликованные темы должны быть накоплены в bag-файле.

Вернитесь в окно терминала с turtle_teleop и подвигайте черепаху в течении 10 секунд (или около того).

Вернитесь в окно запуска rosbag record и нажмите Ctrl-C. Теперь, проверьте содержимое каталога ~/bagfiles. Вы должны увидеть файл с именем, которое начинается с года, даты, времени и суффиксом .bag. Это и есть bag-файл, содержащий все темы опубликованные любым узлом за время, пока программа rosbag record была запущен.

1.2 Проверка и проигрывание bag-файла

Теперь, когда мы записали bag-файл, используя rosbag record, мы можем изучить и воспроизвести его, используя команды rosbag info и rosbag play. Сначала, посмотрим, что за данные записаны в bag-файле. Для этого, мы должны вызвать подкоманду info — это подкоманда проверяет содержимое bag-файла без его воспроизведения. Выполните следующую команду из каталога ~/bagfiles:

rosbag info 

Вы должны увидеть что-то вроде:

path:        2011-12-29-10-03-17.bag
version:     2.0
duration:    13.8s
start:       Dec 29 2011 10:03:18.31 (1325142198.31)
end:         Dec 29 2011 10:03:32.13 (1325142212.13)
size:        120.1 KB
messages:    1594
compression: none [1/1 chunks]
types:       rosgraph_msgs/Log  [acffd30cd6b6de30f120938c17c593fb]
             turtlesim/Color    [353891e354491c51aabe32df673fb446]
             turtlesim/Pose     [863b248d5016ca62ea2e895ae5265cf9]
             turtlesim/Velocity [9d5c2dcd348ac8f76ce2a4307bd63a13]
topics:      /rosout                       4 msgs    : rosgraph_msgs/Log  (2 connections)
             /turtle1/color_sensor       790 msgs    : turtlesim/Color
             /turtle1/command_velocity    10 msgs    : turtlesim/Velocity
             /turtle1/pose               790 msgs    : turtlesim/Pose

Это говорит нам об именах тем и типах их сообщений, а также число (count) сообщений каждой темы, содержащейся в bag-файле. Мы видим, что из опубликованных тем, которые мы видели в выдаче rostopic, только четыре из пяти были опубликованы во время нашей записи. Так как мы запустили rosbag record с флагом -a, то были записаны все опубликованные сообщения узлов.

Следующим шагом этого урока, является проигрывание bag-файла, служащее для воспроизведения поведения работающей ROS-системы. Сначала завершите работу программы teleop, которая была запущена в предыдущем разделе этого урока — для этого выполните Ctrl-C в терминале, где вы запустили turtle_teleop_key. Однако, оставьте работать узел turtlesim. В окне терминала, перейдите в каталог с вашим bag-файлом и выполните следующую команду:

rosbag play 

В этом окне, вы сразу же должны увидеть что-то вроде:

[ INFO] [1325142297.920774361]: Opening 2011-12-29-10-03-17.bag

Waiting 0.2 seconds after advertising topics... done.

Hit space to toggle paused, or 's' to step.

В стандартном режиме rosbag play будет ждать определенный период ожидания (0.2 секунды) после представления(advertising) каждого типа сообщений перед тем как начать публиковать содержимое bag-файла. Это ожидание позволяет уведомить всех подписчиков(subscriber) сообщений, , о том, что скоро могут последовать сообщения. Если rosbag play публикует сообщения сразу после представления, то подписчики(subscribers) могут не получить несколько первых опубликованных сообщений. Период ожидания может быть задан опцией -d .

Наконец, сообщения в теме /turtle1/command_velocity будут опубликованы и черепаха должна начать движение в окне turtlesim, причём движения будут походить на команды ручного управления, которые вы выполняли самостояятельно из программы teleop. Продолжительность между запущенными rosbag play и движением черепахи должно быть примерно равно времени между стартом rosbag record и выдачей команд с клавиатуры в первой части урока. Вы можете запустить проигрывание rosbag play не с начала bag-файла, а с определённого промежутка времени, используя опцию -s . Ещё одна опция, которая может представлять интерес — это опция -r , которая позволяет изменять скорость публикации сообщений на указанный фактор. Если вы выполните:

rosbag play -r 2 

Вы должны увидеть, что черепаха черепахи выполняет движение по несколько иной траектории — это траектория, которая возникла бы, если бы вы выдавали команды с клавиатуры в два раза быстрее.

1.3 Запись подмножества данных

При работе сложных систем, например, таких как пакет программного обеспечения pr2, могут публиковаться сотни различных тем, причём, некоторые темы, такие как потоки изображений с камер, публикуют огромные объемы данных. В таких системах, зачастую слишком непрактично записывать на диск лог-файлы, содержащие все темы в один bag-файл. Поэтому, команда rosbag record поддерживает журналирование отдельных тем в bag-файл, тем самым позволяя пользователям записывать только интересующие их темы.

Снова запустим узел turtlesim и узел управления с клавиатуры — teleop:

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

В каталоге bagfiles, выполните следующую команду:

rosbag record -O subset /turtle1/command_velocity /turtle1/pose

опция -O задаёт rosbag record два аргумента: имя лог-файла — subset.bag, и название тем. В результате rosbag record подписывается только на эти две темы. Подвигайте черепаху в течение нескольких секунд при помощи клавиш со стрелками на клавиатуре, а затем остановите rosbag record нажатием Ctrl-C.

Теперь проверьте содержимое получившегося bag-файла ( rosbag info subset.bag ). Вы должны увидеть, что bag-файл содержит , только указанные темы:

path:        subset.bag
version:     2.0
duration:    20.7s
start:       Dec 29 2011 10:06:25.47 (1325142385.47)
end:         Dec 29 2011 10:06:46.13 (1325142406.13)
size:        98.2 KB
messages:    1223
compression: none [1/1 chunks]
types:       turtlesim/Pose     [863b248d5016ca62ea2e895ae5265cf9]
             turtlesim/Velocity [9d5c2dcd348ac8f76ce2a4307bd63a13]
topics:      /turtle1/command_velocity     17 msgs    : turtlesim/Velocity
             /turtle1/pose               1206 msgs    : turtlesim/Pose

1.4 Ограничения rosbag record/play

В предыдущем разделе вы могли отметить, что путь черепахи, возможно, не совсем точно соответствует оригинальному вводу с клавиатуры — форма должна быть примерно та же, но черепаха, возможно, не совсем точно отслеживает путь. Причина этого заключается в том, что путь отображаемый turtlesim очень чувствителен к небольшим изменениям системы времени, а rosbag ограничен в своей способности точно дублировать поведение работающей системы с точки зрения, когда сообщения записываются и обрабатываются rosrecord, и когда сообщения создаются и обрабатываются при использовании rosplay. Для узлов, таких как turtlesim, где небольшие изменения во времени, приводят к изменениям команды обработки сообщений, пользователь не должен ожидать, отличной имитации поведения.

Ссылки
http://www.ros.org/wiki/ROS/Tutorials/Recording and playing back data


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение