当前位置:网站首页>ROS2初级知识(9):bag记录过程数据和重放
ROS2初级知识(9):bag记录过程数据和重放
2022-08-02 21:44:00 【无水先生】
Recording and playing back data — ROS 2 Documentation: Humble documentation
一、背景知识
ros2 bag 是一个命令行工具,用于记录系统中发布的主题数据。它累积在任意数量的主题上传递的数据并将其保存在数据库中。然后,您可以重放数据以重现您的测试和实验的结果。录制主题也是分享您的工作并允许其他人重新创建它的好方法。
二、准备活动
先安装bag相关组件:作为常规 ROS 2 设置的一部分,您应该安装 ros2 bag。 如果您在 Linux 上从 Debians 安装并且您的系统无法识别该命令,请像这样安装它:
sudo apt-get install ros-humble-ros2bag \
ros-humble-rosbag2-storage-default-plugins
本教程讨论以前教程中涵盖的概念,例如节点和主题。它还使用了turtlesim 包。
(不要忘记在您打开的每个新终端中获取 ROS 2)
三、用海龟包进行测试
您将在 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
列出全部topic名称:
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
在主题教程中,您了解到 /turtle_teleop 节点在 /turtle1/cmd_vel 主题上发布命令以使海龟在 turtlesim 中移动。
要查看 /turtle1/cmd_vel 正在发布的数据,请运行以下命令:
ros2 topic info /turtle1/cmd_vel
起初什么都不会出现,因为 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 包记录
要记录发布到主题的数据,请使用命令语法:
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 主题上发布的数据。返回远程终端并再次移动乌龟。动作无关紧要,但尝试制作可识别的模式,以便稍后重放数据时查看。
按 Ctrl+C 停止录制。
数据将累积在一个名称为 rosbag2_year_month_day-hour_minute_second 模式的包文件中。
六、记录多个主题
您还可以记录多个主题,以及更改 ros2 包保存到的文件的名称。
运行以下命令:
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
-o 选项允许您为包文件选择一个唯一的名称。以下字符串(在本例中为子集)是文件名。
要一次记录多个主题,只需列出以空格分隔的每个主题。
您将看到以下消息,确认正在录制两个主题。
[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...
注意:您可以在命令中添加另一个选项 -a,它记录系统上的所有主题。
七、ros2 包信息
您可以通过运行以下命令查看有关录制的详细信息:
ros2 bag info <bag_file_name>
在子集包文件上运行此命令将返回有关文件的信息列表:
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)来检查它。
八、ros2包重放
在重播包文件之前,在远程操作正在运行的终端中输入 Ctrl+C。然后确保你的 turtlesim 窗口是可见的,这样你就可以看到运行中的包文件。
输入命令:
ros2 bag play subset
终端将返回消息:
[INFO] [rosbag2_storage]: Opened database 'subset'.
您的海龟将遵循您在录制时输入的相同路径(尽管不是 100% 完全准确;turtlesim 对系统时间的微小变化很敏感)。
因为子集文件记录了 /turtle1/pose 主题,所以只要你有 turtlesim 运行,ros2 bag play 命令就不会退出,即使你没有移动。
这是因为只要 /turtlesim 节点处于活动状态,它就会定期发布有关 /turtle1/pose 主题的数据。您可能已经注意到,在上面的 ros2 bag info 示例结果中,/turtle1/cmd_vel 主题的 Count 信息只有 9;这就是我们在录制时按下箭头键的次数。
注意: /turtle1/pose 的 Count 值超过 3000时;在我们记录的时候,关于该主题的数据被发布了 3000 次,超过部分将不予执行。
要了解发布位置数据的频率,您可以运行以下命令:
ros2 topic hz /turtle1/pose
九、总结
使用 ros2 bag 命令记录在您的 ROS 2 系统中传递的主题数据。无论您是与他人分享您的工作还是自省自己的实验,它都是一个很好的工具。
边栏推荐
猜你喜欢
命令行启动常见问题及解决方案
行业 SaaS 微服务稳定性保障实战
Matplotlib drawing core principles explain (more detailed)
Intensive reading of the Swin Transformer paper and analysis of its model structure
Add and delete all these years, finally planted in MySQL architecture design!
Zabbix 5.0 监控教程(二)
饥荒联机版Mod开发——制作简单的物品(三)
Sentinel vs Hystrix 限流对比,到底怎么选?
TDengine 在中天钢铁 GPS、 AIS 调度中的落地
刚安装完win10专业工作站版,系统变量中Path默认值有哪些?重新建一个“PATH”变量名,会覆盖掉原先的“Path”。
随机推荐
UDP(用户数据报协议)
JumpServer open source bastion machine completes Loongson architecture compatibility certification
终于明白:有了线程,为什么还要有协程?
增删改查这么多年,最后栽在MySQL的架构设计上!
If the watermark according to how to realize the function
JS Date 时间戳 getTune data.parse 倒计时小程序
双轴晶体中的锥形折射
Win10怎么开启自带的游戏录屏功能?
“百日行动”进行时:700余交通安全隐患被揪出
RuoYi-App启动教程
Flink优化的方方面面
多租户的多种实现方案
js函数防抖和函数节流及其他使用场景
Intensive reading of the Swin Transformer paper and analysis of its model structure
【Unity】Unity开发进阶(六)UnityEvent使用与源码解析
How does Redis easily achieve system instant kill?
Word operation: adjust the English font individually
从月薪10k到30k的必走之路:自动化测试
word操作:单独调整英文字体
【学习笔记】博弈论