@[toc]
参考官方文档:Recording and playing back data
ros2 bag 命令简介
ros2 bag 是一个命令行工具,用于记录在你的系统中的话题上发布的数据。它积累了在任何数量的话题上传递的数据,并将其保存在一个数据库中。然后你可以重放这些数据来重现你的测试和实验的结果。记录主题也是分享你的工作并允许他人重现的一个好方法。
1. 准备环境
安装软件包:
sudo apt-get install ros-humble-ros2bag \
ros-humble-rosbag2-storage-default-plugins
打开两个终端,分别运行:
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
新建一个文件夹用于保存录制的数据:
mkdir bag_files && cd bag_files
2. 选择一个话题
ros2 bag 只能记录已发布的话题中的数据。要查看你的系统的话题列表,请打开一个新的终端并运行命令:
ros2 topic list
返回结果如下:
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
在前面的教程中,已经知道 /turtle_teleop 节点在 /turtle1/cmd_vel 话题上发布命令,使乌龟在turtlesim中移动。
要查看 /turtle1/cmd_vel 正在发布的数据,运行命令:
ros2 topic echo /turtle1/cmd_vel
一开始不会有什么显示,因为节点没有发布数据。回到你运行teleop的终端,选择它,使它处于激活状态。使用方向键移动乌龟,你会看到运行ros2 topic echo的终端上正在发布数据:
linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---
3. ros2 bag record 命令
要记录发布到一个话题的数据,使用命令:
ros2 bag record <topic_name>
在你选择的话题上运行这个命令之前,打开一个新的终端,并进入你先前创建的bag_files目录,因为rosbag文件将保存在你运行它的目录中。
运行命令:
ros2 bag record /turtle1/cmd_vel
你会在终端看到以下信息(日期和时间会有所不同):
现在ros2包正在记录/turtle1/cmd_vel话题上发布的数据。回到teleop终端,再次移动乌龟。
移动几次之后按 Ctrl+C 停止记录,数据将被记录到一个 bag 文件中,名称命名模式为 rosbag2_year_month_day-hour_minute_second 。
3.1 记录多个话题
你还可以记录多个话题,以及改变ros2 bag保存的文件的名称。
使用以下命令:
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
-o 选项允许你为你的bag文件选择一个独特的名字。
要想一次记录一个以上的话题,只需将每个话题用空格隔开即可。
你会看到以下信息,确认两个话题都在录制中:
还有一个选项可以添加到命令中,即 -a ,它可以记录你系统中的所有话题。
4. ros2 bag info 命令
你可以通过运行以下命令查看关于录制的细节:
ros2 bag info <bag_file_name>
对 subset 文件运行此命令将返回文件的信息列表:
ros2 bag info subset
要查看单个信息,你必须打开数据库,在这种情况下是sqlite3,来检查它,这超出了ROS 2的范围。
5. ros2 bag play 命令
在重放bag文件之前,在teleop运行的终端上输入Ctrl+C。然后确保你的turtlesim窗口是可见的,这样你就可以看到bag文件的运行情况。
输入命令:
ros2 bag play subset
你的乌龟将遵循你在录制时输入的路径(虽然不是100%准确;turtlesim对系统时间的微小变化很敏感)。
因为 subset 文件记录了 /turtle1/pose 主题,所以只要你有turtlesim运行,ros2 bag play命令就不会退出,即使你没有移动。
这是因为只要/turtlesim节点处于活动状态,它就会定期在/turtle1/pose主题上发布数据。你可能已经注意到在上面的ros2 bag info例子结果中,/turtle1/cmd_vel主题的Count信息有56个;这就是我们在录制时按下方向键的次数。
请注意,/turtle1/pose的Count值有12436;在我们录制的时候,该话题的数据被发布了12436次。
为了了解位置数据的发布频率,你可以运行命令:
ros2 topic hz /turtle1/pose