usb_cam 노드에서 Publish하는 이미지를 받아오는 방법을 정리합니다.
필요한 모듈들을 불러옵니다.
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
이미지를 plot하기 위한 모듈들을 불러옵니다.
import matplotlib.pyplot as plt
from IPython.display import display, clear_output
초기화를 진행합니다.
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')
Callback 함수를 만들고 이미지를 update하는 기능을 추가합니다.
def callback_image(topic):
image = bridge.imgmsg_to_cv2(topic, 'rgb8')
img_obj.set_data(image)
clear_output(wait=True)
display(fig)
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)
이제 rclpy.spin을 호출해서 rclpy 를 실행합니다.
rclpy.spin(node)