概要:这篇主要介绍使用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.相关内容
ros2 bag
是一个命令行工具,用于录制系统话题发布的数据.它可以记录经过任意个话题的数据,并保存到一个数据库中.你可以回放这些数据进行复现测试或实验的结果.记录话题也是一个很好分享你工作内容的方式,让别人进行再创造(你的工作).
你应该将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
一次了).
你将要记录turtlesim
系统的键盘输入,保存并且用于后面回放,所以开始之前,需要启动节点/turtlesim
和节点/teleop_turtle
新开终端运行:
ros2 run turtlesim turtlesim_node
另一终端运行:
ros2 run turtlesim turtle_teleop_key
创建一个目录用来存储记录数据,很好的练习:
mkdir bag_files
cd bag_files
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
---
为了记录话题发布的数据,使用以下指令语法:
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
终端,再次驱动小乌龟.怎么运动无所谓,但尽量跑一个合理的图形方便后面回放观看.
输入ctrl+c
停止录制.
收集到的数据保存在bag
文件中,其名字样式如同rosbag2_year_month_day-hour_minute_second
.
你也可以录制多个话题,(记得)修改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
表示录制系统所有系统话题.
你可以查看录制内容,通过运行:
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知识范围了.
在回放数据集之前,输入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
ros2
系统中,你可以使用ros2 bag
指令来录制传输到话题的数据.无论你是跟别人分享你的工作还是研究自己的实验,它都是一个很好工具.
你已经完成了"初级阶段:CLI 命令行界面工具"课程!下一步是"初级阶段:客户端库"课程,第一个课程是创建一个工作空间.
这里(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
#动作时,还是无数据输出;小乌龟还是只能转动
这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.
#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈