In this post, we will learn how to record and play back data that is published on topics in your ROS 2 application.
The official tutorial is located in the ROS 2 Foxy documentation, but we’ll run through the entire process step-by-step below.
You Will Need
In order to complete this tutorial, you will need:
Prerequisites
It is helpful if you’ve completed this tutorial on the Turtlesim package in ROS 2, but it is not required.
Setup
Open a new terminal window, and type the following command to launch the turtlesim simulation:
ros2 run turtlesim turtlesim_node
Open another terminal window, and launch the keyboard executable, which will enable us to navigate the robot using the keyboard.
ros2 run turtlesim turtle_teleop_key
Let’s create a new directory to save the data that is published to topics. ROS 2 calls these recordings “bag files”. In another terminal window, type the following commands:
mkdir bag_files
cd bag_files
Select a Topic You Want to Record
Let’s see what the currently active topics are.
ros2 topic list

Type the following command to see the relationship between active nodes and topics.
rqt_graph

You can see that the /teleop_turtle node (which is the keyboard-related node) publishes velocity commands to the /turtle1/cmd_vel topic. The /turtlesim node subscribes to these velocity commands, and the turtle moves around the screen accordingly.
Press CTRL + C in the terminal window to close rqt_graph.
Let’s explore the data that is being published to the /turtle1/cmd_vel topic. To do this, we need to use the ros2 topic echo command.
ros2 topic echo /turtle1/cmd_vel
Select the terminal window where you launched the turtle_teleop_key node.

Move the turtle around using the keyboard.
Return to the terminal window where you launched the ros2 topic echo /turtle1/cmd_vel command.
You should see a printout of the velocity commands.

Record Data
Let’s record the data that is published to the /turtle1/cmd_vel topic. Open a new terminal window, and navigate to the bag_files directory you created earlier in this tutorial.
cd bag_files
ros2 bag record /turtle1/cmd_vel
The data that is published to /turtle1/cmd_vel is now being recorded.

Go back to the teleop terminal window, and move the turtle around.

Go back to the terminal where you ran the ros2 bag command, and press CTRL + C to stop recording.
Let’s see if the bag file is recorded properly. Inside the bag_files directory on your computer, type the following command to see what files are inside.
dir

The format for the bag file is:
rosbag2_year_month_day-hour_minute_second
To see detailed information about this bag file type:
ros2 bag info <name_of_bag_file>

Play Back Data
Let’s play back the data that was recorded in the bag file.
Return to the teleop window.
Press CTRL + C to stop keyboard control.
Navigate to the bag_files directory, and play back the bag file you recorded earlier. Make sure you can see the turtlesim window.
ros2 bag play <name_of_bag_file>

You will see the turtle replicate the motion you commanded earlier.
That’s it for bag files. Keep building!