robot_recorder repository

Repository Summary

Checkout URI
VCS Type git
VCS Version master
Last Updated 2019-01-24
CI status No Continuous Integration
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)


Name Version
recordit 1.0.1
robot_recorder 1.0.1
rviz_recorder_buttons 1.0.1


Look at me!


... catch more attention with the tool ...



"An animation is worth a thousand lines of markdown."

Build Status License Code style: black


>> See 3D animation >> Get started with the tutorial

This package can be used to record a ROS system for the web as a three.js animation. The result can e.g. be displayed in gh-pages or converted to a GIF.

Further examples

See 3D animation

>> See source code of application

See 3D animation


  • Show a 3D demo of your ROS application
  • Inspect failed CI test result(s)
  • Visualize parameter studies

How to use?

In order to reduce the recorded data it does not apply a fixed rate but keyframes.


  1. "Automatic mode": By default the node records* as soon as it is started and saves data as soon as it is closed. -> Set param ~manual to false

  2. "Manual mode": Control the tool via ROS services. -> Set param ~manual to true

    Available ROS services (private ns ~ is by default robot_recorder/):

    • ~preconfigure (OPTIONAL): Start ROS subscribers and load robot_description param (Requires 2 secs).
    • ~start: Preconfigures if not yet done and then starts recording*.
    • ~pause: Pause and unpause the recording.
    • ~stop: Stops the recording and saves it to the given file path (param ~output_file) ATTENTION: It will overwrite existing files! By default saved in the path ~.ros/ with a timestamped name.

*Once the recorder is started it will wait until the robot "moves" (new tf or joint_states msgs) before it starts the actual recording. Throttling by change (see What can be recorded?) is recommended.

By default the recorded .json file will be saved inside the robot_recorder_core package.

What can be recorded?

  1. /joint_states

    This topic provides the changes of the robot joints and represents the internal motion of the robot. It can be throttled by rate and by change to reduce the recorded keyframes.

  2. /tf

    This topic should be used to get the external motion of the robot with respect to a fixed world/map. It can be throttled by change to reduce the recorded keyframes. The referenced node considers by default only the tf change between the frames map <--> base_link.

Which output-format is used?

The recorded robot movements are saved as animation of the JSON Object format (three.js example) which can be utilized by the three.js animation system.

How is the URDF visualized in the three.js scene?

With the urdf-loader tool:

How to add animations and a GIF converter?

With the urdf-animation tool, which wraps the urdf-loader:



Install the pre-commit tool

$ pip install pipenv
$ pre-commit install

for auto code-formatting at every commit. Or trigger it manually for all files:

$ pre-commit run --all-files