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 <your bagfile>


Вы должны увидеть что-то вроде:
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 <your bagfile>


В этом окне, вы сразу же должны увидеть что-то вроде:
[ 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 <your bagfile>


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

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
  • 0
  • 31 декабря 2011, 12:56
  • noonv

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.