usb_cam 노드에서 Publish하는 이미지를 받아오는 방법을 정리합니다.

  1. 필요한 모듈들을 불러옵니다.

    import rclpy
    import sys
    from rclpy.node import Node
    from sensor_msgs.msg import Image
    import numpy as np
    import cv2
    from cv_bridge import CvBridge
    
  2. 이미지를 plot하기 위한 모듈들을 불러옵니다.

    import matplotlib.pyplot as plt
    from IPython.display import display, clear_output
    
  3. 초기화를 진행합니다.

    bridge = CvBridge() 
    fig, ax = plt.subplots()
    empty_image = np.zeros((200, 300, 3), dtype=np.uint8)
    img_obj = ax.imshow(empty_image)
    ax.set_title('USB CAM Image')
    
  4. Callback 함수를 만들고 이미지를 update하는 기능을 추가합니다.

    def callback_image(topic):
        image = bridge.imgmsg_to_cv2(topic, 'rgb8')
        img_obj.set_data(image)
        clear_output(wait=True)
        display(fig)
    
  5. rclpy를 초기화 하고 노드를 만듭니다. subscription도 같이 만들어줍니다.

    앞서 만든 callback 함수를 subscription에 넣어줍니다.

    rclpy.init(args=sys.argv)
    node = rclpy.create_node('sub_image')
    sub = node.create_subscription(Image, '/image_raw', callback_image, 10)
    
  6. 이제 rclpy.spin을 호출해서 rclpy 를 실행합니다.

    rclpy.spin(node)
    

    Untitled