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
![1-list-ros2-topicsJPG](https://automaticaddison.com/wp-content/uploads/2021/03/1-list-ros2-topicsJPG.jpg)
Type the following command to see the relationship between active nodes and topics.
rqt_graph
![2-rqt-graphJPG](https://automaticaddison.com/wp-content/uploads/2021/03/2-rqt-graphJPG.jpg)
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.
![3-turtle-teleop-key-nodeJPG](https://automaticaddison.com/wp-content/uploads/2021/03/3-turtle-teleop-key-nodeJPG.jpg)
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.
![4-print-out-of-velocity-commandsJPG](https://automaticaddison.com/wp-content/uploads/2021/03/4-print-out-of-velocity-commandsJPG.jpg)
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.
![5-record-bag-dataJPG](https://automaticaddison.com/wp-content/uploads/2021/03/5-record-bag-dataJPG.jpg)
Go back to the teleop terminal window, and move the turtle around.
![6-move-turtlesim-aroundJPG](https://automaticaddison.com/wp-content/uploads/2021/03/6-move-turtlesim-aroundJPG.jpg)
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
![7-bag-file-recorded-properlyJPG](https://automaticaddison.com/wp-content/uploads/2021/03/7-bag-file-recorded-properlyJPG.jpg)
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>
![8-ros2-bag-infoJPG](https://automaticaddison.com/wp-content/uploads/2021/03/8-ros2-bag-infoJPG.jpg)
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>
![9-ros-playbackJPG](https://automaticaddison.com/wp-content/uploads/2021/03/9-ros-playbackJPG.jpg)
You will see the turtle replicate the motion you commanded earlier.
That’s it for bag files. Keep building!