首页>>人工智能->把ros2录制的bag包转换为ros1格式的bag包

把ros2录制的bag包转换为ros1格式的bag包

时间:2023-11-29 本站 点击:1

1 安装ros2和ros1之间通信的库包

安装ros-eloquent-ros1-bridge,这个库包主要是用于ros2和ros1之间的通信。

sudo apt update sudo apt install ros-eloquent-ros1-bridge

2 把录制的ros2的bag包转换ros1格式的bag包

先说明一下录制

1、ros2和ros1录制的命令

ros2录制数据包命令:ros2 bag record /image /scan

ros1录制数据包命令:rosbag record /image /scan

2、ros2和ros1录制的文件格式

ros2录制的bag包文件,录制完后会生成一个目录,在目录下会生成多个文件,如下:

ros1 录制的bag文件,只有一个文件:例如 2021-05-19-19-10-18.bag


下面介绍如何把录制的ros2的bag包转换ros1格式的bag包,大致流程就是:

播放ros2的包

ros1监听到ros2播放的topic,然后再录制topic即可!

2.1 启动ros2到ros1的桥

1、首先打开一个终端命令行

2、在该终端下添加ros2和ros1的环境变量

source /opt/ros/eloquent/setup.bash source /opt/ros/melodic/setup.bash

(base)shl@zhihui-mint:~$source/opt/ros/eloquent/setup.bashROS_DISTROwassetto'melodic'before.Pleasemakesurethattheenvironmentdoesnotmixpathsfromdifferentdistributions.(base)shl@zhihui-mint:~$source/opt/ros/melodic/setup.bashROS_DISTROwassetto'eloquent'before.Pleasemakesurethattheenvironmentdoesnotmixpathsfromdifferentdistributions.(base)shl@zhihui-mint:~$

3、然后紧接着运行如下命令,启动ros2到ros1的桥

ros2 run ros1_bridge dynamic_bridge

2.2 使用ros2播放ros2的bag包

1、再打开一个新的终端

2、添加ros2的环境变量

source /opt/ros/eloquent/setup.bash

3、播放ros2的bag包

ros2 bag play rosbag2_2021_05_19-11_28_34/

注意:

要先开启ros1录制包监听,然后在开启ros2播放包,如果顺序相反,就会认为造成开头一段数据没有录上!

2.3 使用ros1录制包

1、再开启一个终端

2、然后添加ros1的环境变量

source /opt/ros/melodic/setup.bash

3、使用ros1开始录制数据

rosbag record /scan /image

当你看到ros2播放完bag包之后,ros1就可以Ctrl+C停止bag的录制了!!!

2.4 转换之后的结果

1、原始的ros2录制的bag包信息

(base)shl@zhihui-mint:~/Desktop/calibrate_data$ros2baginforosbag2_2021_05_19-11_28_34/Files:rosbag2_2021_05_19-11_28_34/rosbag2_2021_05_19-11_28_34_0.db3Bagsize:1.1GiBStorageid:sqlite3Duration:42.616sStart:May19202111:28:34.289(1621394914.289)EndMay19202111:29:16.906(1621394956.906)Messages:857Topicinformation:Topic:/image|Type:sensor_msgs/msg/Image|Count:427|SerializationFormat:cdrTopic:/scan|Type:sensor_msgs/msg/LaserScan|Count:430|SerializationFormat:cdr(base)shl@zhihui-mint:~/Desktop/calibrate_data$

2、转换到ros1之后的bag包信息

(base)shl@zhihui-mint:~/Desktop/calibrate_data$rosbaginfo2021-05-19-19-59-37.bagpath:2021-05-19-19-59-37.bagversion:2.0duration:42.5sstart:May19202119:59:41.91(1621425581.91)end:May19202120:00:24.38(1621425624.38)size:1.1GBmessages:847compression:none[419/419chunks]types:sensor_msgs/Image[060021388200f6f0f447d0fcd9c64743]sensor_msgs/LaserScan[90c7ef2dc6895d81024acba2ac42f369]topics:/image418msgs:sensor_msgs/Image/scan429msgs:sensor_msgs/LaserScan(base)shl@zhihui-mint:~/Desktop/calibrate_data$

对比转换前后的bag包的信息对比:

图像的topic数据丢失了:9帧

2D激光雷达的数据丢失了:1帧

关于这是数据丢帧,目前我还不知道如何解决,我同时说在使用ros2进行播放包的时候,可以加上-r参数,这样会好些,单依旧还是会丢帧,我认为最好的方法就是就是把ros2录制的bag包中的数据一帧一帧的读取出来,然后再手动保存成ros1的bag包,但是我并不知道该如何写这个code([捂脸])

2.5 其他注意事项

1、虽然是用ros2播放的ros2的bag包,但是因为已经和ros1建立起了桥,因此使用ros1的rostopic也是可以监听到ros2播放的topic的

2、如果要使用ros1的rostopic echo /scan打印数据,必须要保证ros1录制了该topic,否则打印没有数据!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/AI/1099.html