Python ROS1 bag

实验平台 ubuntu18.04

实验目的 掌握python ros1 bag 包的离线读取

实现对图像数据的读取显示

指令播放bag 数据

rosbag play *.bag

跳过消息的订阅与数据的播放,直接使用python 读取离线bag 包数据。

python 读取bag包 流程

import os
import sys
import rospy
import rosbag
bagfilepath = "./*.bag" 
bag = rosbag.Bag(bagfilepath, "r")

读取topic数据

bag_data = bag.read_messages("你自定义的消息名称")

函数解析数据

for i,(topic, msg, t) in enumerate(bag_data):
    call_back(msg)

消息就会直接传到call_back函数里,函数的定义如下即可

def call_back(msg):
  #你的处理过程
  #数据就在msg里

下面是一个图像解析的例子

首先,准备一个带有图像数据的bag包

读取bag 数据

#coding:utf-8
import rosbag
import rospy
import cv2
from cv_bridge import CvBridge
from sensor_msgs.msg import Image
bag_file = './all.bag'
bag = rosbag.Bag(bag_file, "r")

定义回调函数,当然并不是回调机制触发的,只是离线使用

def call_back_image(msg):
    cv_image = bridge.compressed_imgmsg_to_cv2(msg, "bgr8")
    cv2.imshow("Image window", cv_image) 
    cv2.waitKey(1)

数据读取后回调解析数据并显示

bridge = CvBridge()
bag_data = bag.read_messages('你的消息名称')
for topic, msg, t in bag_data:
   call_back_image(msg)

本次实验使用的是经过压缩的Image 格式图像需要通过CvBridge 进行转换,转换成opencv 的数据格式,即可显示

实验结果如下所示:

Python ROS1 bag

Python   bag
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章