ROS 如何在同一个节点 node 中实现 订阅 和 发布 ?

官网的例子都是在一个节点中实现订阅,或者发布的。

1. python 代码

#!/usr/bin/env python
#!coding=utf-8

# 时间:20191118
# 功能:创建一个节点,订阅一个话题A,在回调函数中 对接收到的数据进行处理(旋转)之后发布到另一个话题B。
 
import rospy
import numpy as np
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
import cv2
# from PIL import Image as PIL
 
def callback(data):
 
    global bridge
    img_pub = rospy.Publisher('image_raw', Image, queue_size=1)  # 发布的话题:'image_raw'
    cv_img = bridge.imgmsg_to_cv2(data, desired_encoding="passthrough")
    cv_img = cv_img - 1
    cv_img90 = np.rot90(cv_img, -1)  #  处理图片
 
    data90 = bridge.cv2_to_imgmsg(cv_img90, encoding="bgr8")
 
    img_pub.publish(data90)  # 发布图片
 
    rospy.loginfo(cv_img90[0][0])
 

def displayWebcam():
    rospy.init_node('webcam_display', anonymous=True)  # 创建节点的名称:'webcam_display'
    global bridge
    bridge = CvBridge()
    rospy.Subscriber('image_raw0', Image, callback)  #  订阅的话题: 'image_raw0' 
    rospy.spin()
 
if __name__ == '__main__':
    displayWebcam()

2. 启动其他节点之后,再运行这个节点

python2 thiscode.py
rqt_graph

3. 结果如下:

在这里插入图片描述

4. 有用请点赞,谢谢!

1. 点赞,积分+1

2. 评论,积分+1

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐