ROS2学习笔记之rosbag篇

学习目标:记录发布在话题上的消息,方便我们后期查看

背景

ros2 bag是一个命令行工具用于记录话题上发布的消息。他可以保存任意数量话题上的消息内容。我们可以通过数据回放实现实验场景的重现。同时这也是和他人分享数据的好方法。

准备条件

我们首先安装ros2 bag

sudo apt install ros-eloquent-ros2bag ros-eloquent-rosbag2*

学习内容

1. 准备活动

我们准备记录海龟教程中键盘的输入,首先我们启动相应节点。

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

我们新建一个文件夹用于存放rosbag文件

mkdir bag_files

2. 选择话题

ros2 bag只能记录话题的消息,我们首先查看当前的话题列表

ros2 topic list

目前所有的话题列表如下

/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

在之前的教程当中我们知道/turtle1/cmd_vel话题就是键盘控制的指令发送的话题,我们通过下面命令查看话题的消息内容。

ros2 topic echo /turtle1/cmd_vel

当我们在键盘控制终端没有操作的时候话题上是不会有消息的,我们按一下方向键消息才会发送到话题上。

3. ros2 bag record

我们使用下面的命令可以保存话题上的消息。

ros2 bag record <topic_name>

我们切换到刚刚新建的目录,应为默认情况下这个命令会将记录的结果保存到当前文件夹下面。

cd bag_files

我们通过下面的命令记录/turtle1/cmd_vel话题上的消息

ros2 bag record /turtle1/cmd_vel

然后我们可以看到终端输出下面的消息,表明开始记录消息

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2020_02_20-11_44_13/rosbag2_2020_02_20-11_44_13_0.db3' for READ_WRITE.
[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...

现在我们开始用键盘控制海龟运动
随便让海龟动一下就行,然后我们用Ctrl + C关掉ros2 bag的终端
然后文件会被保存在当前目录下的按照rosbag2_year_month_day-hour_minute_second方式命令的一个目录下面。

3.1 记录多个话题

例如我们可以使用下面的命令同时记录多个话题,我们还可以加上-o选项设置输出的名字,这样保存文件的名字就不会像默认那样是按时间命名了

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

同样我们随便控制几下海龟过后Ctrl + C关掉rosbag,我们可以看到bag_files文件夹下面又多出了一个文件夹

我们可以使用-a选项记录所有话题,但是一般不推荐使用这种方式,最好我们还是选择自己需要的话题

4. ros2 bag info

我们可以通过下面的命令查看rosbag的信息

ros2 bag info <bag_file_name>

例如

ros2 bag info subset

我们得到下面的输出

Files:             subset/subset_0.db3
Bag size:          100.6 KiB
Storage id:        sqlite3
Duration:          12.57s
Start:             Feb 20 2020 11:53:35.524 (1582170815.524)
End                Feb 20 2020 11:53:47.581 (1582170827.581)
Messages:          801
Topic information: Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 755 | Serialization Format: cdr
                   Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 46 | Serialization Format: cdr

5. ros2 bag play

在进行回放之前我们先关掉键盘控制节点,然后我们输入下面的命令进行回放

ros2 bag play subset

终端输出下面消息

[INFO] [rosbag2_storage]: Opened database 'subset/subset_0.db3' for READ_ONLY.

然后海龟会按照我们刚刚记录的控制轨迹进行运动
海龟停止运动过后并不会回放过程还在继续,因为我们还同时记录了/turtle1/pose话题的消息,rosbag会在回放完所有的话题消息过后才会退出

总结

rosbag是一个很有用的东西,ros2对rosbag进行了相应的改进,也带来了很多好处。

后续

到此ROS2基础教程结束,接下来是开发篇,正式开始讲如何写代码。

发布了64 篇原创文章 · 获赞 50 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38649880/article/details/104407033