簡體   English   中英

為什么 Rospy 不能在 ros2 python 環境下運行?

[英]Why Rospy does not work ros2 python environment?

在python虛擬環境下,無法導入rospy。 為什么? 我需要它來發布和訂閱 image_raw。

使用ros2 ,您必須使用rclpy而不是rospy rospy不再存在ros2 ,因此您也無法導入它。 rclpy是建立在 ros2' rcl之上的新客戶端庫。 請參閱此處了解更多信息。

一般來說, ros2有大量的演示和教程,請參閱此處獲取簡單的訂閱者/發布者教程。

這也是一個如何訂閱和發布圖像主題的快速示例:

#! /usr/bin/env python3

import rclpy
from rclpy.node import Node

from sensor_msgs.msg import Image
    
class SimplePubSub(Node):
    def __init__(self):
        super().__init__('simple_pub_sub')
        self.publisher = self.create_publisher(Image, '/image_processed', 10)
        self.subscription = self.create_subscription(
            Image, '/image_raw', self.img_callback, 10)

    def img_callback(self, msg):
        self.get_logger().info('processing image....')

        # msg = ......

        self.publisher.publish(msg)


def main(args=None):
    rclpy.init(args=args)
    simple_pub_sub = SimplePubSub()
    rclpy.spin(simple_pub_sub)
    simple_pub_sub.destroy_node()
    rclpy.shutdown()
#! /usr/bin/env python3

import rclpy
from rclpy.node import Node 
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2 
    
class SimplePubSub(Node):
    def __init__(self):
        super().__init__('simple_pub_sub')

        topic_name= 'video_frames'

        self.publisher_ = self.create_publisher(Image, topic_name , 10)
        self.timer = self.create_timer(0.1, self.timer_callback)

        self.cap = cv2.VideoCapture(0)
        self.br = CvBridge()

        self.subscription = self.create_subscription(Image, topic_name, self.img_callback, 10)
        self.subscription 
        self.br = CvBridge()


    def timer_callback(self):
        ret, frame = self.cap.read()     
        if ret == True:
            self.publisher_.publish(self.br.cv2_to_imgmsg(frame))
        self.get_logger().info('Publishing video frame')


    def img_callback(self, data):
        self.get_logger().info('Receiving video frame')
        current_frame = self.br.imgmsg_to_cv2(data)
        cv2.imshow("camera", current_frame)   
        cv2.waitKey(1)


def main(args=None):
    rclpy.init(args=args)
    simple_pub_sub = SimplePubSub()
    rclpy.spin(simple_pub_sub)
    simple_pub_sub.destroy_node()
    rclpy.shutdown()

  
if __name__ == '__main__':
  main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM