用钢铁意志,成就不平凡人生
博主这一期遇到一个问题,要将ROS中的/joint_states
话题消息输出并转换为Excel可读取的格式(如CSV),下面是博主的解决方法:
步骤1:记录/joint_states
话题数据
bash
rosbag record -O joint_states.bag /joint_states
-
说明:
-
-O joint_states.bag
指定输出的bag文件名为joint_states.bag
。 -
/joint_states
是您要记录的话题名称。
-
注意 :运行此命令后,rosbag
将开始记录/joint_states
话题的数据。完成后,可以通过按Ctrl+C
停止记录。
步骤2:编写Python脚本将bag文件转换为CSV
接下来,编写一个Python脚本,读取bag文件中的/joint_states
消息,并将其转换为CSV格式。以下是一个示例脚本:
python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rosbag
import csv
from sensor_msgs.msg import JointState
# 打开bag文件
bag = rosbag.Bag('joint_states.bag')
# 创建并打开CSV文件
with open('joint_states.csv', 'w') as csv_file:
csv_writer = csv.writer(csv_file)
# 写入CSV表头
csv_writer.writerow(['timestamp', 'joint_name', 'position', 'velocity', 'effort'])
# 遍历bag文件中的消息
for topic, msg, t in bag.read_messages(topics=['/joint_states']):
timestamp = t.to_sec()
for name, position, velocity, effort in zip(msg.name, msg.position, msg.velocity, msg.effort):
csv_writer.writerow([timestamp, name, position, velocity, effort])
# 关闭bag文件
bag.close()
print("已将joint_states转换为joint_states.csv")
-
脚本说明:
-
导入必要的库:
-
rosbag
用于读取bag文件。 -
csv
用于写入CSV文件。 -
sensor_msgs.msg.JointState
用于解析/joint_states
消息。
-
-
读取bag文件:
- 打开名为
joint_states.bag
的bag文件。
- 打开名为
-
创建CSV文件并写入表头:
- 表头包括时间戳、关节名称、位置、速度和力矩。
-
遍历
/joint_states
消息:- 对于每条消息,提取时间戳和每个关节的相关数据,并写入CSV文件。
-
关闭文件:
- 关闭bag文件和CSV文件。
-
输出完成提示:
- 脚本运行结束后,打印提示信息。
-
步骤3:运行Python脚本
-
保存脚本:
将上述Python脚本保存为
bag_to_csv.py
。 -
赋予执行权限(如果需要):
pythonchmod +x bag_to_csv.py
-
运行脚本
python./bag_to_csv.py
运行后,脚本将在当前目录下生成一个名为
joint_states.csv
的文件。
步骤4:在Excel中打开CSV文件
- 打开Microsoft Excel。
- 点击
文件
>打开
,然后选择生成的joint_states.csv
文件。 - Excel将自动将CSV文件中的数据分隔到各个单元格中,您可以进一步进行数据分析和可视化。