从ROS2的bag包中提取出imu、image数据,或者将imu、image数据打包成一个ROS2的bag包
主要参考代码:
链接:ROS2_CONVERT
主要有下面的功能
- 订阅一个ros2的图片话题,并将接收到的消息转换为png图片存储起来。
- 将一个ros2的bag包(比如
example.dp3)中的图片话题提取出来,保存为图片名为时间戳的png图片 - 将一个ros2包中的imu话题提取出来,保存为
imu.csv文件 - 把
imu.csv中包含的imu数据转换为一个ros2的包 - 把图片数据按一个或者多个话题写入ros2的bag包
- 同时将imu数据和图片数据转换成ros2的包
不管是写入还是读出,imu和图片的存储格式都遵循下面这样的格式
图片:
图片名为时间戳。当你要将图片写进bag包的时候,保存这些图片的文件夹名字一定要为bag包中想指定的话题名称,比如要指定的话题名字为"cam0",那么这些图片就要保存在cam0文件夹下面。因为在slam或者双目中是需要两个图片话题,这样就要将左右相机的图片分别保存进两个文件夹中。

IMU:
命名为imu.csv,按照time,ax,ay,az,gx,gy,gz的格式保存就行。

从ros2的bag包中提取的数据也会以这样的格式保存。
依赖项
需要安装ROS2和OpenCV
编译
mkdir -p WS_space/src
cd WS_space
git clone http://github.com/freesix/covert_ros2.git src/
source /opt/ros/humble/setup.bash
colcon build
source install/setup.bash
运行
订阅一个ROS2的话题,将收到的图片消息转为png图片保存
ros2 launch ros2_bag_to_image topic_to_image.launch.py \
input/topic:=/cam0 compressed:=True
参数说明
| 参数 | 默认值 | 描述 |
|---|---|---|
| input/topic | /image_raw | 需要订阅的ROS2话题 |
| output/path | /tmp/ | 保存png图片的路径 |
| campressed | 表明话题图片是压缩类型,对应话题类型为sensor_msgs/msg/CompressedImage |
将bag包中图片提取出来为png图片保存
$ ros2 launch ros2_bag_to_image bag_to_image.launch.py \
input/path:=/PATH_TO/input_bag/ \
input/topics:="['camera1/image_rawcompressed', 'camera2/image_raw']"
参数说明
| 参数 | 默认值 | 描述 |
|---|---|---|
| input/path | bag包的路径 | |
| input/bag_format | cdr | bag包的格式 |
| input/bag_storage_id | sqlite3 | bag包中数据编码格式 |
| input/topics | 话题列表,要提取那些图片话题 | |
| output/path | 保存提取出的png图片路径 |
将bag包中的IMU数据提取出来保存到imu.csv文件
ros2 launch ros2_bag_to_imu topic_to_imu.launch.py \
input/path:=/imu output/path:=/out input/topics:="topic1"
参数说明
| 参数 | 默认值 | 描述 |
|---|---|---|
| input/path | bag包的路径 | |
| input/bag_format | cdr | bag包的格式 |
| input/bag_storage_id | sqlite3 | bag包中数据编码格式 |
| input/topics | bag包中的imu话题名 | |
| output/path | 保存提取出的IMU数据路径 |
图片保存转换为bag包
切记存储图片的文件夹名称一定要为转换的bag包中话题名
ros2 launch data_to_bag img_to_bag.launch.py \
input/path:=/img output/path:=/out input/img_topics:="['topic1', 'topic2']"
IMU数据转换为bag包
切记保存IMU数据的文件名要为imu.csv
ros2 launch data_to_bag imu_to_bag.launch.py \
input/path:=/imu output/path:=/out input/imu_topic:="/imu0"
图片和IMU数据同时写入bag包中
ros2 launch data_to_bag data_to_bag.launch.py \
input/path:=/imu output/path:=/out input/imu_topic:="/imu0/" \
input/img_topics:="['topic1', ..., 'topicN']"
512






