sombruxo

Untitled

Dec 19th, 2025
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | Source Code | 0 0
  1. import rclpy
  2. from rclpy.node import Node
  3. from rclpy.qos import QoSProfile, ReliabilityPolicy, HistoryPolicy, DurabilityPolicy
  4. from sensor_msgs.msg import CompressedImage
  5. import cv2
  6. import numpy as np
  7.  
  8.  
  9. class CameraSubscriber(Node):
  10.     def __init__(self):
  11.         super().__init__('camera_subscriber')
  12.        
  13.         # QoS completo equivalente al publisher
  14.         qos_profile = QoSProfile(
  15.             reliability=ReliabilityPolicy.BEST_EFFORT,
  16.             history=HistoryPolicy.KEEP_LAST,
  17.             depth=1,
  18.             durability=DurabilityPolicy.VOLATILE
  19.         )
  20.        
  21.         self.subscription = self.create_subscription(
  22.             CompressedImage,
  23.             'camera/image/compressed',
  24.             self.image_callback,
  25.             qos_profile
  26.         )
  27.        
  28.         self.frame_count = 0
  29.         self.get_logger().info('Subscriber Python iniciado - Esperando imágenes...')
  30.  
  31.     def image_callback(self, msg):
  32.         self.frame_count += 1
  33.        
  34.         # Decodificar imagen
  35.         np_arr = np.frombuffer(msg.data, np.uint8)
  36.         frame = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
  37.        
  38.         if frame is not None:
  39.             # Mostrar info
  40.             self.get_logger().info(f'Frame {self.frame_count} recibido - Tamaño: {frame.shape}')
  41.            
  42.             # Mostrar imagen
  43.             cv2.imshow('Imagen Recibida', frame)
  44.             cv2.waitKey(1)
  45.  
  46.  
  47. def main(args=None):
  48.     rclpy.init(args=args)
  49.     node = CameraSubscriber()
  50.    
  51.     try:
  52.         rclpy.spin(node)
  53.     except KeyboardInterrupt:
  54.         node.get_logger().info('Cerrando subscriber...')
  55.     finally:
  56.         cv2.destroyAllWindows()
  57.         node.destroy_node()
  58.         rclpy.shutdown()
  59.  
  60.  
  61. if __name__ == '__main__':
  62.     main()
Advertisement
Add Comment
Please, Sign In to add comment