欢迎光临散文网 会员登陆 & 注册

4.4 录制回放工具——rosbag2

2023-10-18 10:32 作者:猛狮集训营  | 我要投稿

4.4 录制回放工具——rosbag2

场景

机器人传感器获取到的信息,有时我们可能需要时时处理,有时可能只是采集数据,事后分析,比如:

机器人导航实现中,可能需要绘制导航所需的全局地图,地图绘制实现,有两种方式,方式1:可以控制机器人运动,将机器人传感器感知到的数据时时处理,生成地图信息。方式2:同样是控制机器人运动,将机器人传感器感知到的数据留存,事后,再重新读取数据,生成地图信息。两种方式比较,显然方式2使用上更为灵活方便。

在ROS2 中关于数据的留存以及读取实现,提供了专门的工具: rosbag2。

概念

是用于录制和回放话题的一个工具集。

作用

实现了数据的复用,方便调试、测试。

案例

录制并读取数据。

实现步骤:

  1. 序列化;

  2. 反序列化;

  3. 编译执行。

准备:

终端下进入工作空间的src目录,调用如下两条命令分别创建C++功能包和Python功能包。

4.4.1 ros2 bag 命令工具

在 ROS2 中提供了 ros2 bag 命令工具,可以方便的实现数据的录制回放等操作,ros2 bag 的基本使用语法如下:

4.4.2 rosbag2 编程(C++)

1.序列化

功能包 cpp02_rosbag 的 src 目录下,新建 C++ 文件 demo01_writer.cpp,并编辑文件,输入如下内容:

2.反序列化

功能包 cpp02_rosbag 的 src 目录下,新建 C++ 文件 demo02_reader.cpp,并编辑文件,输入如下内容:

3.编辑配置文件

1.package.xml

在创建功能包时,所依赖的功能包已经自动配置了,配置内容如下:

2.CMakeLists.txt

CMakeLists.txt 中的相关配置如下:

4.编译

终端中进入当前工作空间,编译功能包:

colcon build --packages-select cpp02_rosbag

5.执行

当前工作空间下,启动两个终端,终端1执行录制程序,终端2执行回放程序。

终端1输入如下指令:

执行完毕后,会在当前工作空间下生成一个名为 my_bag 的目录。

终端2输入如下指令:

该程序运行会读取 my_bag 中记录的数据,其结果是在终端打印录制的速度指令最终的线速度和角速度。

4.4.3 rosbag2 编程(Python)

1.序列化

功能包 py02_rosbag 的 py02_rosbag 目录下,新建 Python 文件 demo01_writer_py.py,并编辑文件,输入如下内容:

2.反序列化

功能包 py02_rosbag 的 py02_rosbag 目录下,新建 Python 文件 demo02_reader_py.py,并编辑文件,输入如下内容:

3.编辑配置文件

1.package.xml

在创建功能包时,所依赖的功能包已经自动配置了,配置内容如下:

2.setup.py

entry_points字段的console_scripts中添加如下内容:

4.编译

终端中进入当前工作空间,编译功能包:

colcon build --packages-select py02_rosbag

5.执行

当前工作空间下,启动两个终端,终端1执行录制程序,终端2执行回放程序。

终端1输入如下指令:

执行完毕后,会在当前工作空间下生成一个名为 my_bag_py 的目录。

终端2输入如下指令:

该程序运行会读取 my_bag 中记录的数据,其结果是在终端打印录制的速度指令的话题、时间戳与其内容(二进制格式)。

B站有完整的ros系列教程视频,可以观看完整内容ros课程ROS2理论与实践

更多内容将在猛狮知识星球社区更新最新课程,后续将推出更多优质内容——详情可关注猛狮集训营公众号和猛狮集训营官方网站。

4.4 录制回放工具——rosbag2的评论 (共 条)

分享到微博请遵守国家法律