ROS中接收消息并保存数据,rosbag和rqt_plot的使用

本文介绍了如何在ROS中使用rosbag工具方便地记录和保存消息数据,以及如何利用rqt_plot进行实时曲线绘制。通过rosbag记录turtlesim小乌龟的运动数据,演示了数据的回放、三倍速播放和选择性保存。同时,讲解了如何将.bag文件转换为.txt格式。此外,还展示了在rqt_plot中输入消息名称以查看速度曲线,并说明了曲线缩放的操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS进行导航时,需要查看速度曲线等消息,可以编写listener文件接收保存消息,然后进行格式转换,利用其它工具如MATLAB绘图,但是这样很麻烦,rosbag这个工具就可以很方便的记录和保存数据,并利用rqt进行实时绘图。
参考的博客:
ROS总结——录制和回放数据
ROS学习篇(七)rostopic消息记录、回放、转.txt
ROS相关:使用rospy 编写ros程序并使用rosbag存储数据 //这个暂时没有用到

1.rosbag使用

以turtlesim小乌龟为例:
启动turtlesim

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

创建rosbag文件并保存数据

mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a

$rosbag record -a表示保存所有消息数据,运行record命令后,在键盘控制界面控制小乌龟移动一段时间,然后结束record命令(crtl+c),可以在bag文件夹看

### 使用 `rqt_plot` 绘制 IMU 数据ROS 中,`rqt_plot` 是一种非常方便的工具,用于可视化动态参数的变化情况。对于 IMU 数据而言,它通常包含了加速度计、陀螺仪以及可能的方向数据等多维信息。以下是关于如何使用 `rqt_plot` 来绘制 IMU 数据的具体方法。 #### 启动 `roscore` 为了能够运行任何 ROS 节点或工具,必须先启动 `roscore`[^1]。 ```bash roscore ``` #### 发布 IMU 数据 确保有一个节点正在发布 IMU 数据到某个话题上。常见的 IMU 数据消息类型为 `sensor_msgs/Imu`。如果尚未有 IMU 数据流,则可以模拟一个简单的 IMU 数据发布器来测试功能[^2]。 以下是一个简单的 Python 脚本示例,用于发布假想的 IMU 数据: ```python #!/usr/bin/env python import rospy from sensor_msgs.msg import Imu from geometry_msgs.msg import Quaternion, Vector3 import math def imu_publisher(): rospy.init_node('imu_publisher', anonymous=True) pub = rospy.Publisher('/imu/data', Imu, queue_size=10) rate = rospy.Rate(10) while not rospy.is_shutdown(): imu_msg = Imu() imu_msg.header.stamp = rospy.Time.now() # 假设角速度 (rad/s) 线性加速度 (m/s^2) imu_msg.angular_velocity = Vector3(x=math.sin(rospy.get_time()), y=math.cos(rospy.get_time()), z=0.0) imu_msg.linear_acceleration = Vector3(x=9.8 * math.sin(rospy.get_time() / 2), y=9.8 * math.cos(rospy.get_time() / 2), z=-9.8) pub.publish(imu_msg) rate.sleep() if __name__ == '__main__': try: imu_publisher() except rospy.ROSInterruptException: pass ``` 保存上述脚本赋予可执行权限后运行该脚本即可生成 `/imu/data` 主题下的 IMU 数据流。 #### 运行 `rqt_plot` 打开一个新的终端窗口,输入以下命令以启动 `rqt_plot` 工具: ```bash rqt_plot ``` 一旦界面加载完成,在顶部菜单栏中点击 **Plot** -> **Add Signal...** ,然后选择要绘图的数据字段。例如,假设 IMU 的话题名称为 `/imu/data`,可以选择如下信号路径之一进行监控: - 加速度分量:`/imu/data/linear_acceleration/x`, `/imu/data/linear_acceleration/y`, `/imu/data/linear_acceleration/z` - 角速度分量:`/imu/data/angular_velocity/x`, `/imu/data/angular_velocity/y`, `/imu/data/angular_velocity/z` 通过这种方式,可以在图形界面上实时观察各个维度上的变化趋势。 #### 高级选项 - 多重绘图支持 如果需要更复杂的多重绘图需求,还可以考虑安装第三方插件如 `rqt_multiplot` 插件[^3]。此插件允许在一个视窗内显示多个二维图表,从而更好地对比不同传感器之间的关系或者长时间序列的行为模式。 --- ### 注意事项 尽管 `rqt_plot` 提供了一个简单易用的方式来快速查看数值型时间序列数据的表现形式,但它不适合处理高频率更新或是复杂结构化的大型数据集。在这种情况下,建议采用其他专门设计用来处理科学计算与可视化的软件包,比如 Matplotlib 或 PlotJuggler 等替代方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值