10-记录和播放bag数据

背景

基础准备

任务

    1 设置

    2 选择一个topic

    3 ros2 bag record

    4 ros2 bag info

    5 ros2 bag play

总结

背景

    ros2包是一个命令行工具,用于记录系统中关于主题发布的数据。它累积在任意数量的主题上传递的数据,并将其保存在数据库中。然后,您可以重播数据以重现测试和实验的结果。

基础准备

    已安装ros2 中包含ros2 bag,如果需要安装完整的ROS 2,请参见之前的安装教程。
    本教程涉及以前教程中的概念,如节点和话题,同时也使用turtlesim包。
    通常,在每个打开的每个新终端中source一下。

任务

1 设置

    您将在turtlesim系统中记录键盘输入,以便稍后保存和重播,因此首先启动/turtlesim和/teleop_turtle节点。

    打开一个新的终端并运行:

ros2 run turtlesim turtlesim_node

 

    打开另一个终端并运行:

ros2 run turtlesim turtle_teleop_key

    创建一个新目录来存储我们保存的bag记录数据:

mkdir bag_files
cd bag_files

2 选择一个topic

    ros2包只能记录话题中发布消息的数据。要查看系统的话题列表,打开一个新终端并运行命令:

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发布。返回到您运行teleop的终端并选择它,使其处于活动状态。使用箭头键移动海龟,您将看到运行ros2话题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

3.1 记录某一个单独的话题数据

    记录发布到话题的数据,使用如下命令:

ros2 bag record <topic_name>

    在对所选话题运行此命令之前,打开一个新终端并移到前面创建的bag_files目录中,因为rosbag文件将保存在运行它的目录中。

    运行如下命令:

ros2 bag record /turtle1/cmd_vel

    您将在终端中看到以下消息(日期和时间会有所不同):

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2019_10_11-05_18_45'.
[INFO] [rosbag2_transport]: Listening for topics...
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'
[INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...

    现在ros2包正在记录发布在/turtle1/cmd_vel主题上的数据。回到teleop终端,再次移动乌龟,乌龟的移动数据将会被保存在bag数据中,并且可以回放数据查看细节。

    按Ctrl+C停止录制。
    数据将累积在一个新的包文件夹中,其名称的模式为rosbag2_year_month_day-hour_minute_second。这个目录将包含一个metadata.yaml以及录制格式的包文件。

3.2 记录多个话题数据

    您还可以记录多个主题,以及更改ros2包保存到的文件的名称。
    执行如下命令:

ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose

    -o选项允许您为您的包文件选择一个唯一的名称。-o后面紧跟的字符串是文件名(本例中是subset)。
    要一次记录多个话题,只需将每个话题以空格分隔写出来即可。
    终端中您将看到以下消息,确认正在记录两个主题。

[INFO] [rosbag2_storage]: Opened database 'subset'.
[INFO] [rosbag2_transport]: Listening for topics...
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/pose'
[INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...

 

    你可以移动海龟并在录包完成后按Ctrl+C。

    注意:您可以在命令中添加另一个选项-a,它记录系统上的所有话题。

4 ros2 bag info

    您可以通过运行命令查看bag的详细信息:

ros2 bag info <bag_file_name>

    在subset包文件上运行此命令将返回该文件的信息列表:

ros2 bag info subset

    终端返回信息如下:

Files:             subset.db3
Bag size:          228.5 KiB
Storage id:        sqlite3
Duration:          48.47s
Start:             Oct 11 2019 06:09:09.12 (1570799349.12)
End                Oct 11 2019 06:09:57.60 (1570799397.60)
Messages:          3013
Topic information: Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 9 | Serialization Format: cdr
                 Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 3004 | Serialization Format: cdr

5 ros2 bag play

    在重放包文件之前,在teleop运行的终端中输入Ctrl+C。然后确保turtlesim窗口是可见的,这样您就可以看到包文件的回放数据情况。
    在bag所在的目录下(本例中是bag_files)输入命令:

ros2 bag play subset

 

    终端将返回信息:

[INFO] [rosbag2_storage]: Opened database 'subset'.

    您的海龟将遵循您在记录时输入的相同路径(虽然不是100%准确;Turtlesim对系统时间的微小变化很敏感)。

    subset文件记录了/turtle1/pose话题,所以只要turtlesim在运行,ros2 bag play命令就不会退出,即使您没有移动海龟。

    这是因为只要/turtlesim节点处于活动状态,它就会定期发布/turtle1/pose话题上的数据。您可能已经注意到,在上面的ros2 bag info示例结果中,/turtle1/cmd_vel话题的Count信息只有9,这是我们在录制时按下方向键的次数。

    注意/turtle1/pose的Count值超过3000;在我们录包的时候,这个话题的数据被发布了3000次。
    要了解位置数据发布的频率,可以运行命令:

ros2 topic hz /turtle1/pose

总结

    可以使用ros2 bag命令记录在ROS 2系统中的话题上传递的数据。无论你是在与他人分享你的工作,还是在自查你自己的测试验证,这都是一个很好的工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值