当前位置: 首页 > article >正文

ROS自学笔记三十:话题消息输出并转换为Excel形式

用钢铁意志,成就不平凡人生

博主这一期遇到一个问题,要将ROS中的/joint_states话题消息输出并转换为Excel可读取的格式(如CSV),下面是博主的解决方法:

步骤1:记录/joint_states话题数据

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格式。以下是一个示例脚本:

#!/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脚本

  1. 保存脚本

    将上述Python脚本保存为bag_to_csv.py

  2. 赋予执行权限(如果需要):

    chmod +x bag_to_csv.py
    
  3. 运行脚本

    ./bag_to_csv.py
    

    运行后,脚本将在当前目录下生成一个名为joint_states.csv的文件。

步骤4:在Excel中打开CSV文件

  1. 打开Microsoft Excel。
  2. 点击文件 > 打开,然后选择生成的joint_states.csv文件。
  3. Excel将自动将CSV文件中的数据分隔到各个单元格中,您可以进一步进行数据分析和可视化。

 


http://www.kler.cn/a/460247.html

相关文章:

  • springboot 跨域配置
  • 【Java设计模式-1】单例模式,Java世界的“独苗”
  • Datawhale AI冬令营(第二期)动手学AI Agent--Task3:学Agent工作流搭建,创作进阶Agent
  • 单区域OSPF配置实验
  • 多线程访问FFmpegFrameGrabber.start方法阻塞问题
  • 吾杯网络安全技能大赛——Misc方向WP
  • python钉钉机器人
  • 【探商宝】企业查询多维度解析---创新信息篇
  • [硬件] DELL BIOS 相关注意事项
  • 【漏洞复现】金和OA C6 FileDownLoad.aspx 任意文件读取漏洞复现
  • ImageSharp:高性能跨平台.NET开源图形库
  • Java垃圾回收机制与垃圾收集器
  • 期末速成C++【继承与派生 多态与虚函数】
  • TCP/IP 协议演进中的瓶颈,权衡和突破
  • VSCode快捷键Ctrl+/是注释;Ctrl+\是拆分编辑器;Ctrl+w是关闭编辑器
  • Jenkins 中的清理工作空间工作原理
  • 明达助力锻压设备工厂数字化改造
  • 0-指针网络(NIPS15)
  • 7-58 输出不重复的数组元素
  • 租赁系统的数字化转型与高效管理新模式分析
  • 谷云科技数据集成社区焕新登场:功能、资源、会员权益全面升级
  • 【Element-UI 级联选择器 一级多选 二级单选】
  • LeetCode - 初级算法 数组(两个数组的交集 II)
  • Three.js教程005:
  • C/C++ 数据结构与算法【哈夫曼树】 哈夫曼树详细解析【日常学习,考研必备】带图+详细代码
  • 傲雷亮相2024中国时尚体育季(珠海站),展现户外移动照明风采