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基础教程结束,接下来是开发篇,正式开始讲如何写代码。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要读取rosbag并保存到新的rosbag文件,你可以使用ROS提供的Python API来实现。首先,你需要导入rosbag库并加载要读取的rosbag文件。你可以按照以下方式进行操作: ```python import rosbag input_bag_file = '/your/path/xxx.bag' output_bag_file = '/your/path/new_xxx.bag' input_bag = rosbag.Bag(input_bag_file, "r") output_bag = rosbag.Bag(output_bag_file, "w") for topic, msg, t in input_bag.read_messages(): # 在这里对消息进行处理或者筛选 # 然后将消息写入新的rosbag文件 output_bag.write(topic, msg, t) input_bag.close() output_bag.close() ``` 在上述代码中,我们首先导入rosbag库并指定输入和输出的rosbag文件路径。然后,我们使用`rosbag.Bag`函数分别打开输入和输出的rosbag文件。接下来,我们使用`read_messages`函数遍历输入的rosbag文件中的所有消息。你可以在循环中对消息进行处理或筛选,然后使用`write`函数将消息写入新的rosbag文件。最后,记得关闭输入和输出的rosbag文件。 请注意,上述代码只是一个示例,你可以根据自己的需求进行修改和扩展。同时,确保你已经安装了ROSrosbag库,并且将路径替换为你自己的文件路径。 #### 引用[.reference_title] - *1* [【python/ros】python小程序实现rosbag数据包解析保存](https://blog.csdn.net/baidu_35692628/article/details/125126722)[target="_blank"] [.reference_item] - *2* [【python/ros】python小程序实现rosbag数据包解析保存](https://blog.csdn.net/baidu_35692628/article/details/125126722)[target="_blank"] [.reference_item] - *3* [【python/ros】python小程序实现rosbag数据包解析保存](https://blog.csdn.net/baidu_35692628/article/details/125126722)[target="_blank"] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值