如何在未安装ROS的情况下用Python读取.db3/.mcap格式的rosbag文件?
无需安装ROS读取rosbag文件的实用库
下面列出几个无需依赖完整ROS环境,就能读取并解析rosbag消息的适配库:
pyrosbag:纯Python实现的rosbag解析库,支持ROS1的.bag格式,无需安装ROS。可解析常见ROS消息类型(如sensor_msgs/Image、nav_msgs/Odometry等),也支持通过提供.msg文件路径解析自定义消息。- 安装命令:
pip install pyrosbag - 基础使用示例:
from pyrosbag import Bag with Bag('your_bag_file.bag') as bag: for topic, msg, t in bag.read_messages(topics=['/camera/image_raw']): # 直接访问消息字段 print(f"Image timestamp: {t}, width: {msg.width}")
- 安装命令:
rosbag_parser:轻量级解析工具,专注于将rosbag消息转换为字典或JSON格式,方便快速处理数据。支持大部分标准ROS消息类型,无需ROS环境。- 安装命令:
pip install rosbag-parser - 基础使用示例:
from rosbag_parser import Parser parser = Parser('your_bag_file.bag') messages = parser.get_messages('/odom') for msg in messages: print(f"Pose x coordinate: {msg['pose']['pose']['position']['x']}")
- 安装命令:
bagpy:可通过独立Python包安装,无需完整ROS环境。支持将rosbag数据导出为CSV、JSON格式,同时能解析消息结构;遇到自定义消息时,需手动提供对应的.msg定义文件。- 安装命令:
pip install bagpy - 基础使用示例:
from bagpy import bagreader b = bagreader('your_bag_file.bag') # 生成指定话题的CSV文件 csv_path = b.message_by_topic('/scan') # 直接读取消息对象 for topic, msg, t in b.reader.read_messages('/scan'): print(f"Scan data points count: {len(msg.ranges)}")
- 安装命令:
注意:如果处理自定义消息类型,上述库通常需要你提供对应的.msg文件路径,以确保消息结构解析准确;若遇到罕见消息类型解析问题,可结合库提供的原始字节接口,手动编写序列化/反序列化逻辑。
内容的提问来源于stack exchange,提问作者Ravi Kiran
相关产品推荐
相关产品推荐

