文章目录
- ROS 如何在同一个节点 node 中实现 订阅 和 发布 ?
-
- 1. python 代码
- 2. 启动其他节点之后,再运行这个节点
- 3. 结果如下:
- 4. 有用请点赞,谢谢!
-
- 1. 点赞,积分+1
- 2. 评论,积分+1
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. 结果如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn10dBR1T4FlaNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLyATMzQzMxMTM5ETMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)