ROS2学习笔记(九)从turtlesim学习ROS2的bag录制

前言

学习ROS2的路,并不能通过学习ROS1代替,因为ROS2的“内核”不同于ROS1,必须认认真真从头开始重新学习。

Ubuntu版本:20.04

ROS版本:Foxy

学习笔记回顾

1.ros2 bag

ros2 bag是一个工具,用于记录系统中发布的主题数据。在我们实际开发的时候希望能在别人的现有数据集上做开发,又或者复现之前已经构建好的场景数据,这时可以使用ros2 bag工具。
确保已经安装了ros2 bag工具:

$ sudo apt-get install ros-foxy-ros2bag \
                     ros-foxy-rosbag2-converter-default-plugins \
                     ros-foxy-rosbag2-storage-default-plugins

2.启动小海龟模拟器

还是启动小海龟模拟器,来记录键盘输入并且稍后保存和回放。

$ ros2 run turtlesim turtlesim_node
$ ros2 run turtlesim turtle_teleop_key

同时创建一个文件夹用于保存录制的bag

$ mkdir bag_files
$ cd bag_files

3.选择topic来记录

ros2 bag只能记录所发布的主题,使用如下命令查看所要记录的主题。

$ ros2 topic list
----
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

我们想要记录小海龟的行动,由于/turtle1/cmd_vel主题是用来记录小海龟的移动,就需要录制它。

4.ros2 bag record

首先使用终端进入刚刚创建的bag_files文件夹下,因为ros2 bag文即将将保存在它的目录中

要记录发布到主题的数据,命令格式如下:

$ ros2 bag record <topic_name>

因为我们要记录/turtle1/cmd_vel主题,所以命令如下:

$ 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...

这时,正在记录该主题的数据。返回到teleop终端移动乌龟。

在这里插入图片描述

再回到记录的终端,使用ctrl+c停止录制,数据将会自动保存在一个包文件中,其名称的格式为:rosbag2_year_month_day-hour_minute_second

5.同时记录多个主题

可以使用以下命令实现同时记录多个主题消息~~

$ ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
----
[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...

其中 -o参数说明将两个主题的数据存进一个包里。subset是所保存的文件名。想要记录多个主题,只需要在主题间输入空格分隔即可。

  • 还有一个-a参数,说明可以记录系统上的所有主题。

同样控制小海龟移动,然后在记录终端按下ctrl+c终止。

6.ros2 bag info

使用如下命令查看录制包的详细信息:

$ 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

这里使用sqlite3数据库保存了话题数据

7.ros2 bag play

在play包之前,首先关闭键盘控制节点,确保目前没有人和节点给小海龟发送指令,接下去使用以下命令回放录制好的数据:

$ ros2 bag play subset
----
[INFO] [rosbag2_storage]: Opened database 'subset'.

在这里插入图片描述

可以看到小海龟会按照之前控制的命令运动。

总结

ROS2中录制数据集的神器,可以通过这种方式向别人风向自己的工作成果。

Reference:

https://docs.ros.org/en/foxy/Tutorials/Ros2bag/Recording-And-Playing-Back-Data.html

结语

本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~

为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接

猜你喜欢

转载自blog.csdn.net/xiaokai1999/article/details/119053743
今日推荐