从LZ4压缩ROS Bag提取RGB帧遇不支持压缩类型错误求助
问题原因与解决办法
问题根源
原生rosbag Python模块不支持LZ4压缩格式,打开bag文件时会直接触发ROSBagException错误,导致后续读取消息的循环逻辑根本无法执行。
解决办法
方法1:提前解压Bag文件
用ROS自带的命令行工具将LZ4压缩的Bag转成未压缩格式:
rosbag decompress ./bag_files/20230707_152832.bag
执行后会生成一个后缀为.orig.bag的未压缩文件,直接用这个文件运行你的原代码即可正常读取消息。
方法2:添加LZ4压缩支持模块
如果不想提前解压,可以安装并导入ROS的LZ4支持库:
- 先安装对应ROS版本的依赖包:
替换sudo apt-get install ros-<你的ROS版本>-rosbag-lz4<你的ROS版本>为实际版本,比如noetic、melodic。 - 修改Python代码,导入LZ4支持模块:
导入import rosbag import rosbaglz4 # 导入后rosbag即可识别LZ4压缩 bag_path = "./bag_files/20230707_152832.bag" with rosbag.Bag(bag_path, 'r') as bag: for topic, msg, t in bag.read_messages(topics=['/device_0/sensor_1/Color_0/image/data']): # 此处编写你的RGB帧处理逻辑 passrosbaglz4后,原生rosbag就能解析LZ4压缩的Bag文件,代码会正常进入消息读取循环。
方法3:确认Python环境匹配
确保运行代码的Python解释器是ROS自带的版本(比如Noetic用Python3,Melodic用Python2),第三方压缩支持库与ROS版本强绑定,用系统默认Python可能无法找到对应模块。
内容的提问来源于stack exchange,提问作者S.EB
相关产品推荐
相关产品推荐

