ROS1录制的bag包转换为ROS2格式

近期在重新开展工作,准备把自己的技术栈升级一下,从之前使用的ROS1 melodic转换为ROS2 jazzy,其中涉及到一些数据格式的转换。

因为,我们之前使用的数据都是ROS1录制的,但是在后续使用过程中我们使用ros2 bag play就不能识别.bag后缀格式的数据了。因此通过网上搜索和大模型来回问询,得到方法,使用下述命令进行转换:

bash 复制代码
# 假设你当前还在 /media/xiaochen/xch_disk2/FAST-LIVO2_datasets 目录下

# 使用新的目标类型重新转换,并指定一个新的输出文件夹,避免和之前的结果混淆
rosbags-convert --src CBD_Building_01.bag --dst CBD_Building_02--dst-typestore ros2_jazzy

在转换结果中,我们查看数据信息可以看到:

bash 复制代码
ros2 bag info CBD_Building_02

Files:             CBD_Building_02.db3
Bag size:          4.9 GiB
Storage id:        sqlite3
ROS Distro:        rosbags
Duration:          118.610003187s
Start:             Aug 25 2022 11:37:11.416023035 (1661398631.416023035)
End:               Aug 25 2022 11:39:10.026026222 (1661398750.026026222)
Messages:          26362
Topic information: Topic: /left_camera/image | Type: sensor_msgs/msg/Image | Count: 1187 | Serialization Format: cdr
                   Topic: /livox/imu | Type: sensor_msgs/msg/Imu | Count: 23988 | Serialization Format: cdr
                   Topic: /livox/lidar | Type: livox_ros_driver/msg/CustomMsg | Count: 1187 | Serialization Format: cdr
Service:           0
Service information: 

数据中存在/left_camera/image,/livox/imu,/livox/lidar三个topic,然后,我们播包

bash 复制代码
ros2 bag play CBD_Building_02

出现了这个警告Publisher for topic '/livox/lidar' not found

开始大模型提示我没有激活livox_ros_driver2的功能包,所以我激活了一遍:

bash 复制代码
source /home/xiaochen/Downloads/ws_livox/install/setup.bash

之后,执行

bash 复制代码
ros2 bag info CBD_Building_02

还是提示同样的警告。

解决方案:

最后,只要通过人工编辑文件的方式把问题解决了:

bash 复制代码
# 切换到转换到ros2的功能包中
cd /media/xiaochen/xch_disk2/FAST-LIVO2_datasets/CBD_Building_02
# 编辑元数据文件
gedit metadata.yaml

把其中的livox_ros_driver/msg/CustomMsg人工修改为livox_ros_driver2/msg/CustomMsg

随后,再下载一个sqlite3 的命令行工具

bash 复制代码
sudo apt update
sudo apt install sqlite3

然后用它来修改数据库,执行这条命令:

bash 复制代码
sqlite3 CBD_Building_01.db3 "UPDATE topics SET type = 'livox_ros_driver2/msg/CustomMsg' WHERE name = '/livox/lidar';"

验证一下,确保修改成功了

bash 复制代码
sqlite3 CBD_Building_01.db3 "SELECT name, type FROM topics WHERE name = '/livox/lidar';"

现在两个文件都改好了,就可以重新播放了:

bash 复制代码
# 先回到上级目录,再播放
cd ..
ros2 bag play CBD_Building_01

之后就没有警告Publisher for topic '/livox/lidar' not found提示了,而且代码可以正常运行。

相关推荐
Dovis(誓平步青云)几秒前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
爱吃烧烤的技术渣3 分钟前
别再手写 CRUD 了:我把 Element Plus 的工作量压缩成一份列 schema
前端·vue.js
MetWeave6 分钟前
风的三十年:一个机场的风在变小吗:10,958 天的账(《风不是一个数》系列第 6 篇)
前端·数据可视化
青烟小生9 分钟前
前端实时协同编辑与 CRDT 冲突解决实战:从 OT 到 Yjs 底层原理(完整版)
前端
陈随易11 分钟前
神级 Skill,让 AI 用 HTML 代替 Markdown 回复
前端·后端·程序员
eidnxndrdkdns20 分钟前
PE 自校验的三个坑:恒失败、基址变化、以及被漏在外面的检测器
前端
90后的晨仔24 分钟前
解决 Android 构建报错:Unable to delete file .../file-map.txt
android·前端
Yuhano28 分钟前
W4. RAG 让 Agent 拥有"外部记忆"
前端·aigc
用户308169987648532 分钟前
gzip 和 br 压同一份 JSON:7.6MB 压到 175KB,差 3.8 倍
前端
掘金者阿豪41 分钟前
电商视觉要被 Agent 重做了:一个平台跑通主图、详情页、实拍、复刻和视频
前端