ros2的db3或mcap和ros1的bag无损互相转换

需求

要将ros2录制的db3文件,转为ros1的bag文件。

太长不开,直接看方案3

方案1

网上找了一圈,说的最多的方案是利用ros1_bridge转录的方案。

(1) source ros2 & ros1, and then ros2 run ros1_bridge dynamic_bridge;
(2) ros2 bag play xxxx.db3
(3) rosbag record /openzen/data /rslidar_points

转录制方案有好几个缺点

  • 需要同时安装ros1和ros2,依赖较多。
  • 转录的时候,容易掉帧。实测在我的笔记本上,转录点云数据掉了30%以上。
  • 慢,原始db3文件时长多少,转录为bag就得多久时间。

方案2

ros2 bag play xxx.db3,然后写一个节点接收数据,存到本地。
然后ros1去读取存在本地的数据,写为bag文件。
太ugly了

方案3

方案1和2的根本原因在于官方没有提供ros2 db3的读写接口。
ros最强大的地方在于开源工具多。
经过一番搜索,我找到了一个现成的包。

这个工具有如下特点

  • 可以无缝实现bag和db3的互相转换
  • 提供了db3文件的读写接口,非常方便。
  • 转换速度很快,我半小时的数据,只需要20s转好。
  • 不用依赖ros2、ros1

这个工具就是

rosbags

update 2023-03-24

更新对ros2 mcap格式数据支持。
注意rosbags版本要大于等于0.9.15
已经安装过rosbags的话,请更新 pip install --upgrade rosbags

关键是这个包还不用依赖ros2和ros1,在python3下可以直接使用
废话不多说,
其文档在https://ternaris.gitlab.io/rosbags/index.html
代码托管在gitlab上,https://gitlab.com/ternaris/rosbags
安装

pip install rosbags

将ros2的db3转为bag

rosbags-convert rosbag2_2023_01_31-14_40_45

即可得到rosbag2_2023_01_31-14_40_45.bag

将bag文件转为ros2的db3

rosbags-convert rosbag2_2023_01_31-14_40_45.bag

从db3中读取msg

from rosbags.rosbag2 import Reader
from rosbags.serde import deserialize_cdr

# create reader instance and open for reading
with Reader('/home/xxx/data/rosbag2_2023_01_04-17_24_41') as reader:
    connections = [x for x in reader.connections if x.topic == '/Imu']
    for connection, timestamp, rawdata in reader.messages(connections=connections):
         msg = deserialize_cdr(rawdata, connection.msgtype)
         print(msg.header.frame_id)
### 回答1: Keil MDK Pack 是 Keil 公司为其集成开发环境(MDK-ARM)提供的一种软件包格式。MDK-Pack 文件将一组软件组件打包,这些组件包括设备支持文件(Device Support Pack,DSP)、软件库(Software Component)、中间件(Middleware)其他软件工具。 Keil MDK Pack 提供了简化嵌入式软件开发流程的工具资源。通过将相关软件组件打包成一个文件,开发者可以在 MDK-ARM 环境中快速导入使用这些组件。MDK-Pack 文件具有统一的格式,可以直接在 MDK-ARM 软件中心进行下载安装。 使用 Keil MDK Pack,开发者可以快速集成设备支持文件、软件库中间件到他们的项目中。设备支持文件提供了特定芯片开发板的相关信息配置文件,软件库提供了丰富的功能模块算法库,中间件则提供了通用的功能组件,如文件系统、网络协议栈等。通过使用 MDK-Pack,开发者可以减少集成配置的工作量,加快项目的开发进度。 Keil MDK Pack 还提供了一些其他的软件工具,如独立的调试器仿真器,以及用于性能分析优化的工具。这些工具可以帮助开发者更好地调试优化他们的嵌入式软件。 总结来说,Keil MDK Pack 是一种用于 Keil MDK-ARM 开发环境的软件包格式,通过打包软件组件,提供了快速集成使用的工具资源,方便开发者在嵌入式软件开发中快速导入配置相关组件,加快了项目的开发进度。 ### 回答2: Keil MDK Pack是Keil公司开发的一种软件开发工具。它是一款集成开发环境(IDE),用于嵌入式系统的软件开发。Keil MDK Pack提供了一系列的软件包,用于支持各种不同的处理器架构嵌入式系统。 Keil MDK Pack的软件包包含了一些常用的编译器、调试器工具链。它还提供了各种各样的软件组件库,包括设备驱动、中间件应用程序框架等。这些软件包可以帮助开发人员更快地开发嵌入式系统,并提供了丰富的功能组件,以满足不同项目的需求。 通过使用Keil MDK Pack,开发人员可以轻松地构建嵌入式系统的软件部分。它提供了直观的用户界面,使开发人员能够快速配置生成项目代码。它还支持各种不同的嵌入式处理器架构,包括ARM、Cortex-M8051等。这使得开发人员可以根据项目的需求选择最适合的硬件平台。 总之,Keil MDK Pack是一种强大的嵌入式软件开发工具,提供了广泛的软件包组件,使开发人员能够更高效地开发嵌入式系统。它是嵌入式软件开发领域中不可缺的工具之一,为开发人员提供了快速、可靠全面的开发环境。 ### 回答3: Keil MDK Pack是Keil公司针对其开发环境MDK(Microcontroller Development Kit)所提供的软件包。 Keil MDK Pack是为嵌入式系统开发提供了一个集成的解决方案。它包含了许多必要的工具资源,可以帮助开发人员更方便地进行嵌入式软件开发。 Keil MDK Pack中包含了许多常用的软件组件驱动程序,以及支持多种芯片的设备驱动程序。这些软件组件驱动程序可以通过集成开发环境(IDE)进行配置调试,从而简化开发过程。除此之外,Keil MDK Pack还提供了大量的例程示例代码,帮助开发人员更容易地理解使用各种功能。 使用Keil MDK Pack,开发人员可以快速构建嵌入式应用程序。它提供了丰富的软件硬件支持,包括各种外围设备传感器的驱动程序。此外,Keil MDK Pack还提供了强大的调试工具,如仿真器调试器,以帮助开发人员进行测试调试。 总之,Keil MDK Pack是Keil公司为嵌入式系统开发提供的一个综合工具包。它包含了许多必要的软件组件驱动程序,可以帮助开发人员更方便地进行嵌入式软件开发。通过使用Keil MDK Pack,开发人员可以快速构建嵌入式应用程序,并且可以方便地进行测试调试。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值