ros2学习笔记10--使用ros2bag进行录制和回放数据(代码片段)

鸿_H 鸿_H     2022-12-03     518

关键词:

概要:这篇主要介绍使用ros2 bag进行录制和回放数据

环境:ubuntu20.04,ros2-foxy,vscode

最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.

2.1.10录制和回放数据(原文:https://docs.ros.org/en/foxy/Tutorials/Ros2bag/Recording-And-Playing-Back-Data.html

>>教程>>录制和回放数据

你正阅读的是ros2较老版本(Foxy),但仍然支持的说明文档.想查看最新版本的信息,请看galactic版本链接( https://docs.ros.org/en/galactic/Tutorials.html

录制和回放数据

目标:记录话题发布的数据,你任何时候都可以回放并检查(它)

课程等级:初级

时长:10min

目录

1.背景
2.预备知识
3.步骤
3.1设置
3.2选择一个话题
3.3 ros2 bag record
3.4 ros2 bag info
3.5 ros2 bag play
4.总结
5.下一步
6.相关内容

1.背景

ros2 bag是一个命令行工具,用于录制系统话题发布的数据.它可以记录经过任意个话题的数据,并保存到一个数据库中.你可以回放这些数据进行复现测试或实验的结果.记录话题也是一个很好分享你工作内容的方式,让别人进行再创造(你的工作).

2.预备知识

你应该将ros2 bag作为ros2常规配置,之前已安装了.

如果你已经从linux发行版本进行了安装,但系统不能识别这个指令,(也可以)像这样子安装它:

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

本课程谈到一些概念都在前面课程介绍了,如节点和话题.这里也使用到turtlesim包.

老规矩,别忘记在新打开终端source一下配置文件(环境变量)(个人,如果ros2的环境变量写到启动脚本.bashrc里面,没必要再source一次了).

3.步骤

3.1设置

你将要记录turtlesim系统的键盘输入,保存并且用于后面回放,所以开始之前,需要启动节点/turtlesim和节点/teleop_turtle

新开终端运行:

ros2 run turtlesim turtlesim_node

另一终端运行:

ros2 run turtlesim turtle_teleop_key

创建一个目录用来存储记录数据,很好的练习:

mkdir bag_files
cd bag_files

3.2选择一个话题

ros2 bag只能记录从话题发布出来的数据.看看你系统的话题清单,打开终端输入:

ros2 topic list

返回:

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

在话题课程中,你知道/turtle_teleop节点发布指令到话题/turtle1/cmd_vel,使得小乌龟在仿真窗口运动.

为了查看/turtle1/cmd_vel正在发布的数据,输入指令:

ros2 topic echo /turtle1/cmd_vel

一开始什么数据都没有,因为teleop没有发布任何数据.返回运行teleop的终端,单击窗口以激活.键入指定的字母来移动小乌龟,终端使用ros2 topic echo指令的话,你会看到有数据发布了.

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
  ---

3.3 ros2 bag record

为了记录话题发布的数据,使用以下指令语法:

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 bag指令正在记录发布在/turtle1/cmd_vel话题的数据.返回运行teleop终端,再次驱动小乌龟.怎么运动无所谓,但尽量跑一个合理的图形方便后面回放观看.
图片.png
输入ctrl+c停止录制.

收集到的数据保存在bag文件中,其名字样式如同rosbag2_year_month_day-hour_minute_second

3.3.1录制多个话题

你也可以录制多个话题,(记得)修改ros2 bag指令运行保存得到的包名字

运行下面指令:

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

-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表示录制系统所有系统话题.

3.4 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

为了看更加个性化信息,你肯定要打开数据库来查看,这里是一种轻量级数据库,这(数据库查看操作)不属于ros2知识范围了.

3.5 ros2 bag play

在回放数据集之前,输入ctrl+c终止teleop窗口的运行.然后保证turtlesim仿真窗口一直可见,这样子你就可以看见录制包在行动.

输入指令:

ros2 bag play subset

终端会返回信息:

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

你的乌龟会跟着记录你输入的路径走(尽管实际上不是百分百,由于系统的时间特性,小乌龟仿真有一些小的变化)

因为subset文件记录的是/turtle1/pose话题,只要你的turtlesim一直在跑,ros2 bag play指令都不会退出,除非你不跑了.

这是由于只要/turtlesim节点处于活动状态,它(录制包)周期性读取数据到话题/turtle1/pose上.你可能注意到上面ros2 bag info 例子的结果,话题/turtle1/cmd_vel信息条数仅为9.这表示录制时按字母的次数.

注意到/turtle1/pose的统计数值超过3000;当我们录制时,数据发送到该话题3000次.

为了了解位置信息发布的频率,你可以运行指令:

ros2 topic hz /turtle1/pose

4.总结

ros2系统中,你可以使用ros2 bag指令来录制传输到话题的数据.无论你是跟别人分享你的工作还是研究自己的实验,它都是一个很好工具.

5.下一步

你已经完成了"初级阶段:CLI 命令行界面工具"课程!下一步是"初级阶段:客户端库"课程,第一个课程是创建一个工作空间.

6.相关内容

这里(https://github.com/ros2/rosbag2)对ros2 bag做了更加彻底的解析.关于QoS兼容性和ros2 bag的更多信息,可以看课程,rosbag2:颠覆QoS策略(https://docs.ros.org/en/foxy/Guides/Overriding-QoS-Policies-For-Recording-And-Playback.html#ros2bag-qos-override)。

其他

个人认为重点:

ros2 bag record <topic_name> #录制话题的数据信息,数据包名字根据日期自动生成

ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose #同时录制多个话题,并且自定义数据包名字为subset

ros2 bag info <bag_file_name>  #查看包的规格参数

ros2 bag play <bag_file_name>  #回放包内容

碰到问题:

ros2 topic echo /turtle1/cmd_vel #动作时,还是无数据输出;小乌龟还是只能转动

这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.

#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈

ros2学习笔记17--在类中使用参数(c++)(代码片段)

概要:这篇主要介绍在类中使用参数(C++)环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.9在类中使用参数(C++)(... 查看详情

ros2学习笔记22--使用launch启动/监听多个node节点(代码片段)

概要:这篇内容主要介绍如何使用launch启动/监听多个node节点环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现3.4使用launch启动/监听多个node节点ÿ... 查看详情

ros2学习笔记26--使用快速dds查找服务作为查找协议(社区贡献)(代码片段)

概要:这篇内容主要介绍使用快速DDS查找服务作为查找协议(社区贡献)环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现4.2使用快速DDS查找服务作为... 查看详情

lr学习笔记10-html和url比较

主要学习Web(HTTP/HTML)协议的两种录制方式,重点包括以下内容:--脚本录制的基本原则--HTML和URLbasedscript介绍--选择录制方式的原则--HTML basedscript设置介绍 1、脚本录制的基本原则(1)充分考虑脚本的执行效率。性能测... 查看详情

ros2学习笔记12--创建ros2包(代码片段)

概要:这篇主要介绍如何创建ros2包环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.2创建自己第一个ros2包(原文:https://docs.ros.org/en/foxy/Tutor... 查看详情

ros2学习笔记16--详述ros2接口(代码片段)

概要:这篇主要进一步介绍ros2接口.环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.8拓展ros2接口(原文:https://docs.ros.org/en/foxy/Tutorials... 查看详情

jmeter学习笔记——参数化

JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现。参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统。这个时候... 查看详情

jmeter学习笔记3-参数化

以实战为例,进行讲解参数化,本次讲解采用sogou.com搜索为例。两种方式:一种可以在badboy里进行参数化,另一种在jmeter中进行,本例中采用在jmeter中进行参数化。使用的脚本在badboy里进行录制后,在导入到Jmeter中。1.导入录制... 查看详情

ros2学习笔记25--ros2话题统计编写教程(c++)(代码片段)

概要:这篇内容主要介绍用c++编写能够统计话题的侦听器环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现4.1ros2话题统计教程(C++)(... 查看详情

ros2学习笔记19--探索ros2doctor工具(代码片段)

概要:这篇主要介绍ros2doctor工具环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.11探索ros2doctor工具(原文:https://docs.ros.org/en/foxy/Tutorials/Get... 查看详情

ros2学习笔记15--创建自定义ros2接口文件msg和srv(代码片段)

概要:这篇主要介绍如何创建定制型ros2接口文件msg和srv环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.7创建自定义ros2消息msg和srv文件(原文&#x... 查看详情

ros2学习笔记28--ros2环境下,多激光雷达启动的launch文件编写样式参考(代码片段)

背景:一次需要读取多个velodyne的雷达点云数据,但是ros2知识缺少,一番折腾终有成果.1.准备velodyne的ros2版本驱动链接:https://github.com/ros-drivers/velodyne/tree/ros22.launch文件编写2.1官方 查看详情

ros2学习笔记20--创建一个action(代码片段)

概要:这篇内容主要介绍如何创建一个action环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.3.1创建一个动作(原文:https://docs.ros.org/en/foxy/Tutori... 查看详情

ros2学习笔记11--工作空间的创建(代码片段)

概要:这篇主要介绍工作空间的创建环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.1创建工作空间(原文:https://docs.ros.org/en/foxy/Tutorials/Wor... 查看详情

ros2学习笔记29--项目从ros1迁移到ros2的经验参考(代码片段)

环境:ubuntu20.04,ros-foxy(ros2),vscode背景:项目需要,一直折腾把ros1下面的包升级到ros2版本.以下纯属个人查找资料摸索,自我理解所得,有错误的地方,望大佬们不吝赐教.1.消失的句柄ro... 查看详情

ros2学习笔记9--创建一个launch文件(代码片段)

概要:这篇主要介绍launch文件环境:ubuntu20.04,ros2-foxy,vscode最后没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.1.9创建一个launch文件(原文:https://docs.ros.org/en/foxy/Tutorials/Launch-Files... 查看详情

ros2学习笔记21--编写action服务器和客户端(c++)(代码片段)

概要:这篇内容主要介绍如何使用C++来编写动作服务器和客户端环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.3.2编写动作服务器和客户端(... 查看详情

ros2学习笔记18-velodyne16雷达点云在ros2中可视化案例参考(代码片段)

环境:ubuntu20.04,ros-foxy,vscode,velodyne-16背景:练习如何将velodyne-16雷达点云数据在ros2中读取并可视化.折腾了很久,并没有找到类似案例,所以自己总结一下.1.修改电脑ip这里修改自己电脑ip,跟大多数... 查看详情