我是ROS2的新手,我参照古月居的教程写了一个Publisher发布摄像头的图像信息,并在本机另一个终端调用Subscriber订阅这个话题。这个demo在我的笔记本上能跑通,但是在工控机上就跑不通,话题可以发布出去,但是订阅者的回调函数无法触发。有没有可能是订阅者的端口没有开放呢?
以上是我遇到的问题,希望能有前辈为我答疑解惑,感激不尽!以下是我的代码:
class ImagePublisher(Node):
def __init__(self, name):
super().__init__(name)
self.publisher_ = self.create_publisher(Image, "image_raw", 10)
self.timer = self.create_timer(0.1, self.timer_callback)
# 在工控机中我使用URL来捕获摄像头,可以捕获成功
self.cap = cv2.VideoCapture(0)
self.cv_bridge = CvBridge()
def timer_callback(self):
ret, frame = self.cap.read()
if ret == True:
self.publisher_.publish(self.cv_bridge.cv2_to_imgmsg(frame, 'bgr8'))
self.get_logger().info('Publishing video frame...')
def main(args = None):
rclpy.init(args=args)
node = ImagePublisher("cam_pub")
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
class ImageSubscriber(Node):
def __init__(self, name):
super().__init__(name)
# 代码执行卡在这里
self.sub = self.create_subscription(Image, 'image_raw', self.listener_callback, 10)
self.cv_bridge = CvBridge()
def object_detect(self, image):
cv2.imshow("object", image)
cv2.waitKey(10)
def listener_callback(self, data):
self.get_logger().info('Receiving video frame')
image = self.cv_bridge.imgmsg_to_cv2(data, 'bgr8')
self.object_detect(image)
def main(args = None):
rclpy.init(args=args)
node = ImageSubscriber("cam_sub")
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
第三方账号登入
QQ 微博 微信