找回密码
 立即注册
首页 业界区 安全 ROS开发工具——rosbag功能介绍及应用

ROS开发工具——rosbag功能介绍及应用

龙正平 2025-7-29 15:02:04
引言

rosbag是ROS系统的核心组件之一,其主要作用是记录数据包,重新发布来自一个或多个数据包的消息,汇总数据包的内容,检查数据包的消息定义,根据Python表达式过滤数据包的消息,对数据包进行压缩和解压缩,以及重建数据包的索引。在机器人开发过程中,当程序运行出现奇怪的bug后想要重现或者想要测试新算法时,可以调用rosbag,将程序运行时的实时数据保存并离线使用,就像是给你的机器人系统装上了"黑匣子",能够记录、重现、分析任何时刻的系统状态,对调试、测试、优化都极其有用。
官方文档指路:

http://wiki.ros.org/rosbag/Commandline
安装及基本用法

(1)安装
  1. sudo apt update
  2. sudo apt install ros-noetic-rosbag python3-rosbag
复制代码
(2)基本用法
我们在命令行这样输入:
  1. rosbag -h
复制代码
就可以查看哪些子命令可用于该 rosbag 命令,如下图所示:
1.png

介绍几种比较常用的子命令
(1)record-----记录包含指定话题内容的数据包文件

  • 记录所有话题数据
  1. rosbag record -a -O xxx.bag    # 记录所有活跃的话题
  2. rosbag record -a --duration=10 -O xxx.bag    # 记录指定时长(10秒)
复制代码

  • 选择性记录
  1. rosbag record /joint_states /cmd_vel /imu/data -O xxx.bag    # 只记录关心的话题
  2. rosbag record -a -x "/camera/.*" -O xxx.bag    # 排除不需要的话题
复制代码
(2)play-----回放一个或多个数据包文件的内容
  1. rosbag play xxx.bag    # 正常速度回放
  2. rosbag play xxx.bag --rate=0.1    # 慢动作回放(便于调试观察)
  3. rosbag play xxx.bag --rate=2.0    # 快进回放(加速测试)
复制代码
(3)info-----汇总一个数据包文件的内容
  1. rosbag info robot_data.bag
复制代码
举个例子,输出大概类似下面这种形式
  1. path:        2025-07-28-20-37-30.bag
  2. version:     2.0
  3. duration:    27.2s
  4. start:       Jul 28 2025 20:37:30.93 (1753706250.93)
  5. end:         Jul 28 2025 20:37:58.10 (1753706278.10)
  6. size:        265.8 KB
  7. messages:    3627
  8. compression: none [1/1 chunks]
  9. types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
  10.              rosgraph_msgs/Log   [acffd30cd6b6de30f120938c17c593fb]
  11.              turtlesim/Color     [353891e354491c51aabe32df673fb446]
  12.              turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]
  13. topics:      /rosout                    3 msgs    : rosgraph_msgs/Log  
  14.              /turtle1/cmd_vel         263 msgs    : geometry_msgs/Twist
  15.              /turtle1/color_sensor   1680 msgs    : turtlesim/Color   
  16.              /turtle1/pose           1681 msgs    : turtlesim/Pose
复制代码
使用示例

这里我们用ROS自带的乌龟节点(turtlesim)进行实验。
(1)首先启动roscore
  1. roscore    # 终端1:启动roscore
复制代码
(2)接着启动turtlesim和键盘控制
  1. rosrun turtlesim turtlesim_node    # 终端2:启动turtlesim
  2. rosrun turtlesim turtle_teleop_key    # 终端3:启动键盘控制
复制代码
(3)在新终端启动rosbag的record命令
  1. rosbag record -a    #终端4:记录数据
复制代码
这样rosbag就可以开始记录turtlesim的各种实时信息并写入.bag文件中。在运行之前,可以先创建一个专门用于保存.bag信息的文件夹,便于管理。
(4)控制小乌龟运动 在键盘控制终端中,用方向键让小乌龟画出一个三角形或其他轨迹,然后按Ctrl+C停止记录,如下图所示
2.png

(5)回放验证
  1. rosbag play xxx.bag    # 回放记录的运动
复制代码
可以看到小乌龟又重复之前的轨迹完成运动
3.png

可以用-info子命令看下rosbag记录的数据的情况
  1. rosbag info 2025-07-29-15-38-02.bag
复制代码
打印信息如下所示
  1. path:        2025-07-29-15-38-02.bag
  2. version:     2.0
  3. duration:    12.9s
  4. start:       Jul 29 2025 15:38:02.91 (1753774682.91)
  5. end:         Jul 29 2025 15:38:15.81 (1753774695.81)
  6. size:        127.3 KB
  7. messages:    1675
  8. compression: none [1/1 chunks]
  9. types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
  10.              rosgraph_msgs/Log   [acffd30cd6b6de30f120938c17c593fb]
  11.              turtlesim/Color     [353891e354491c51aabe32df673fb446]
  12.              turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]
  13. topics:      /rosout                   3 msgs    : rosgraph_msgs/Log  
  14.              /turtle1/cmd_vel         94 msgs    : geometry_msgs/Twist
  15.              /turtle1/color_sensor   789 msgs    : turtlesim/Color   
  16.              /turtle1/pose           789 msgs    : turtlesim/Pose
复制代码
可以看到,rosbag一共记录12.9秒大小为127.3KB的1675条数据,其中包括控制命令话题/turtle1/cmd_vel,位置反馈话题/turtle1/pose,颜色传感器话题/turtle1/color_sensor以及系统日志/rosout
注意事项

在运行上述小乌龟例程使用rosbag记录时,可能会出现[WARN] [1753685084.171731454]: /use_sim_time set to true and no clock published. Still waiting for valid time...
的警告,这是因为ROS系统被配置为使用仿真时间,但没有时钟发布者,系统在等待有效时间信号。将/use_sim_time 参数设置为 false即可。
  1. rosparam set /use_sim_time false    # 设置为使用系统实际时间
复制代码
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册