将运行的ROS软件上的数据记录到一个.bag文件,然后重放数据再产生相同的效果。
1. 记录数据(创建一个bag文件)
从一个运行的ROS系统中记录topic的数据,这个topic数据会在一个bag文件中积累。
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
(1) 记录所有发布的topics
$ rostopic list -v
Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
* /rosout [rosgraph_msgs/Log] 2 publishers
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher
Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
* /rosout [rosgraph_msgs/Log] 1 subscriber
这些发布的topic只是可能被记录在数据记录文件上的message文件类型。
mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a
2. 检验和回放bag文件
(1) 用info命令检查bag的内容而不用回放它:
$ rosbag info
path: your bagfile
version: 2.0
duration: 1:38s (98s)
start:
end:
size: 865.0 KB
messages: 12471
compression: none [1/1 chunks]
types: geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
rosgraph_msgs/Log [acffd30cd6b6de30f120938c17c593fb]
turtlesim/Color [353891e354491c51aabe32df673fb446]
turtlesim/Pose [863b248d5016ca62ea2e895ae5265cf9]
topics: /rosout 4 msgs : rosgraph_msgs/Log (2 connections)
/turtle1/cmd_vel 169 msgs : geometry_msgs/Twist
/turtle1/color_sensor 6149 msgs : turtlesim/Color
/turtle1/pose 6149 msgs : turtlesim/Pose
显示了topic的名字和类型还有每个topic在bag文件中包含的messages数量。
(2) 重放bag文件,以在运行系统上产生相同的效果。
在运行turtle_teleop_key的终端用Ctrl+c杀死上个部分还在运行的teleop程序。让turtle继续运行。
在产生原始bag文件的目录中运行以下命令:
$ rosbag play
[ INFO] [1418271315.162885976]: Opening your bagfile.bag
Waiting 0.2 seconds after advertising topics... done.
Hit space to toggle paused, or 's' to step.
等待可以用-d来特别指定。而是使用-s参数在不是bag文件开始的其他部分开始回放。
rosbag play -r 2
通过一个特定的因子改变发布数据的速度
===================================细节===========================
3. 记录数据子集
允许用户值记录它们感兴趣的topics。在bag文件目录中运行:
$ rosbag record -O filename /turtle1/cmd_vel /turtle1/pose
检查bag文件的内容rosbag info subset.bag):
path: filename.bag
version: 2.0
duration: 12.6s
start:
end:
size: 68.3 KB
messages: 813
compression: none [1/1 chunks]
types: geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
turtlesim/Pose [863b248d5016ca62ea2e895ae5265cf9]
topics: /turtle1/cmd_vel 23 msgs : geometry_msgs/Twist
/turtle1/pose 790 msgs : turtlesim/Pose
4. rosbag record/play的局限
注意到小乌龟的路径跟你用键盘控制的路径不是非常准确的吻合,即使大概的形状是一样的,但是小乌龟没有非常完全跟踪那个路径。原因是小乌龟跟踪的路径对系统中时间变化非常敏感。在系统中,在messages被roscore记录和处理时以及使用rosplay 产生和处理messages时,rosbag复制运行系统的行为的能力是有限的。