YARP
Yet Another Robot Platform
yarpdataplayer: replay recorded data

A module that reproduces in a synchronized way, previously acquired data (using yarpdatadumper: the YARP data recorder) from a source of input.

Description

This module provides the user a simple but informative user-interface in order to manipulate the previously acquired data. When playing it uses the timestamps provided from the time of acquisition to synchronize the sending of the data as if the robot was present.

Libraries

  • OpenCV libraries.
  • GTKMM or Qt5 libraries.

Running

yarpdataplayer can run with or without the GUI (for server use and commands are sent via the rpc port) For gui run normally yarpdataplayer. Without GUI run with the extra parameter hidden:

  yarpdataplayer --hidden

yarpdatadumper file example

yarpdatadumper data.log file example:

  9566    1324373535.040288   -2.32967 0.043956 1.450549 -0.56044 1.704894 4.136408
  etc...

yarpdatadumper info.log file example:

  Type: Bottle;
  [1324373535.040288] /foo/state:o [connected]
  etc...

Type: is used to identify what kind of data the player is required to send.

The names of the ports open up by the player are initially set up based on the content of info.log file. This can be then changed using the GUI.

Parameters

--hidden
  • run with or without gui
--withExtraTimeCol index
  • loads the log files created by the datadumper with both rx and tx time. The user must select which timestamp to use (txTime index = 1 or rxTime index = 2)
--name modName
  • The parameter modName identifies the stem-name of the open ports.

Ports Interface

The interface to this module is implemented through dataSetPlayer_IDL.

  • The ports belonging to each of the parts are dynamically created and can be changed using the GUI.

Input Data Files

The player will look, in a recursive way, into directories in order to create the parts needed and retrieve the data.

The data name is the default yarpdatadumper names: data.log and info.log.

An example directory tree containing data (data.log+info.log) can be:

/experiment1/
/head/data.log;info.log
/torso/data.log;info.log;
/images/leftCamera/data.log;info.log
/images/rightCamera/data.log;info.log
/left_leg/data.log;info.log
/right_leg/data.log;info.log

If the directory indicated is either experiment1 or within experiment, the player will successfully load all required data.

The parts name will be taken from each subdirectory of the /experiment1 forder.

Topic/ros compatibility

Yarpdataplayer allows also to reproduce topics which can be subscribed by ROS nodes. For example, you can record a topic (e.g. /mytopic+@/mynode) as a standard yarp port using the Bottle format provided by yarpdatadumper. The Bottle format is needed because yarpdatadumper is currently not able to automatically detect the type of the incoming messages. After the recording, you have to manually edit the info.log file created by yarpdatadumper and replace the type Bottle with the type of the ROS message you want to publish. For example, if you want to publish a sensor_msgs/LaserScan ROs Message, replace Bottle with sensor_msgs/LaserScan. That's all. When Yarpdataplayer plays the recorded data, it will open the /mytopic+@/mynode port and will publish LaserScan data. The corresponding topic will be visible also by ROS.

Note
Currently, if the directory selected is (in this example) head, torso etc, the player will not load the files as it will not be able to find subdirs.
Todo:
  • main slider bar selection. This needs an on-click and on-release event in order not to interfere with update and playback
  • when the search for a directory has not provided anything (user selected directory containing only *.log files)
See also
yarpdatadumper: the YARP data recorder
yarpdataplayer example application
yarpdataplayer recording example