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

零依赖使用mcap记录ros消息

背景

使用mcap配合foxglove做可视化,需要渲染urdf模型使用JointStates驱动。
由于foxglove stuido闭源前最后一个版本还未上线foxglove.JointStates格式。
只能退而求其次转化为sensors_msg/msg/JointState进行保存。
希望用最少的依赖(不安装完整ros2)完成sensors_msg/msg/JointState消息记录。

尝试

期间尝试过mcap-ros2-support-fast配合small-mcap方案,保存不定长度关节角总遇到cdr反序列化问题。
偶然间发现了mcap官方示例,通过声明消息定义规避完整ROS2依赖。
仅需安装pip install mcap-ros2-support即可完成写入。

代码

#!/usr/bin/env python3
"""Minimal example: Save one JointState message to MCAP."""from mcap_ros2.writer import Writer
import time# Schema definition
SCHEMA = """std_msgs/Header header
string[] name
float64[] position
float64[] velocity
float64[] effort================================================================================
MSG: std_msgs/Header
uint32 seq
builtin_interfaces/Time stamp
string frame_id================================================================================
MSG: builtin_interfaces/Time
int32 sec
uint32 nanosec"""with Writer("simple_joint_state.mcap") as writer:# Add schemajointstate_schema = writer.register_msgdef("sensor_msgs/msg/JointState", SCHEMA)   # Create messagetimestamp = time.time_ns()msg = {"header": {"seq": 0,"stamp": {"sec": timestamp // 1_000_000_000, "nanosec": timestamp % 1_000_000_000},"frame_id": "world"},"name": ["joint1", "joint2", "joint3"],"position": [1.0, 2.0, 3.0],"velocity": [0.1, 0.2, 0.3],"effort": [0.0, 0.0, 0.0]}# Write messagewriter.write_message(topic="/joint_states", schema=jointstate_schema, message=msg, log_time=timestamp, publish_time=timestamp, sequence=0)

参考

robotic-tools/mcap-ros2-support-fast at main · mrkbac/robotic-tools
robotic-tools/small-mcap at main · mrkbac/robotic-tools
Working with ROS 2 Messages — mcap documentation

http://www.jsqmd.com/news/857846/

相关文章:

  • 珠海采购/质量/项目岗考证避坑:众智商学院6证合报,一站式搞定CPPM/PMP/SCMP/六西格玛/中级经济师/CCAA - 众智商学院课程中心
  • 10分钟终极指南:用Cortex-Debug打造VSCode最强STM32嵌入式开发环境
  • R3nzSkin国服特供版完整指南:英雄联盟免费换肤实用教程
  • Midjourney构图效率提升300%:从新手到大师必须掌握的5个底层参数组合技巧
  • 3个核心优势:为什么Robo 3T仍然是MongoDB开发者的首选工具
  • PL2303老芯片终极解决方案:Windows 10/11驱动兼容性深度解析
  • 义乌汽车贴膜哪家靠谱?义乌奥博贴膜,本地车主公认首选老店 - GrowthUME
  • 太原采购/质量/项目岗考证避坑:众智商学院6证合报,一站式搞定CPPM/PMP/SCMP/六西格玛/中级经济师/CCAA - 众智商学院课程中心
  • [全网首发]百万短剧CMS系统_支持全网网盘转存拉新
  • HS2-HF_Patch终极指南:如何一键解锁Honey Select 2完整汉化与去码功能
  • 内容型网站如何利用Taotoken多模型能力优化SEO文章的生成质量
  • 戴尔笔记本风扇控制终极指南:告别过热与噪音困扰的完整解决方案
  • 数据库三大日志深度解析:Redo Log、Binlog、Undo Log 如何守护你的数据
  • 从零到发布:72小时打造爆款蒸汽波专辑封面,含Discord私密训练集+5个未公开--sref参数
  • CircuitJS1 Desktop Mod:基于NW.js的离线电路仿真技术架构解析
  • 如何快速实现无人机合规飞行:基于ESP32的完整远程识别解决方案
  • 惠州采购/质量/项目岗考证避坑:众智商学院6证合报,一站式搞定CPPM/PMP/SCMP/六西格玛/中级经济师/CCAA - 众智商学院课程中心
  • MySQL Binlog 格式对比
  • 从零开始搭建一个基于Taotoken多模型支持的对话应用
  • AICoverGen实战指南:5步掌握AI翻唱制作的核心技术
  • ARM SVE向量减法指令详解与应用优化
  • Camunda流程版本管理避坑指南:从Version Tag查询到迁移验证,这些细节决定成败
  • Qt样式表(QSS)实战:手把手教你解决QRadioButton和QCheckBox布局错位的那些坑
  • 重新定义怀旧体验:揭秘Bilibili-Old项目的架构哲学与实战价值
  • Super IO:Blender批量导入导出的终极解决方案,告别繁琐文件操作!
  • Midjourney洛可可风格提示词工程(2024权威白皮书版):含12组经AIGC艺术展验证的高通过率prompt模板
  • Linux驱动开发实战:为I.MX6ULL编写一个DS18B20的字符设备驱动(从设备树到应用测试)
  • 5分钟掌握DistroAV:告别复杂布线,用网络视频传输重塑你的OBS直播工作流
  • UE5 VSCode头文件跳转失效的根因与解决方案
  • DDrawCompat完整指南:3步实现Windows 11完美运行经典游戏的实用解决方案