首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发布者/订阅者ROS Python

发布者/订阅者ROS Python
EN

Stack Overflow用户
提问于 2021-05-06 21:59:57
回答 2查看 688关注 0票数 0

晚上好,我需要创建一个出版商,在从我以前敏锐的书包中读取pointcloud2之后发送它们。这是为了模拟实时执行。

在rqt_graph中,所有的东西看起来都是正确连接的,但是pub和sub似乎根本不通信。

这是我的出版商:

代码语言:javascript
复制
#!/usr/bin/env python
import rospy

from sensor_msgs.msg import PointCloud2
import std_msgs.msg
import sensor_msgs.point_cloud2 as pcl2
import rosbag

def talker(msg):
    pub = rospy.Publisher('chatter', PointCloud2)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(1) #hz
    rospy.loginfo(msg)
    pub.publish(msg)
    rate.sleep()
 
if __name__ == '__main__':
    bag = rosbag.Bag('bag2.bag')
    
    for msg in bag.read_messages(topics=['/d435/depth/color/points']):
        talker(msg)

这是我的订阅者:

代码语言:javascript
复制
#!/usr/bin/env python
import rospy
from sensor_msgs.msg import PointCloud2
import std_msgs.msg
import sensor_msgs.point_cloud2 as pcl2

def callback(data):
   #rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
    print("ptCloud received")

    ptc = Point

def listener():
   rospy.init_node('listener', anonymous=True)

   rospy.Subscriber("chatter", PointCloud2, callback)
   rospy.spin()

if __name__ == '__main__':
   listener()

有人能帮帮我吗?尝试使用字符串

代码语言:javascript
复制
from std_msgs.msg import String

通信起作用了,但不是使用点云。我是ROS的新手,救命!

EN

回答 2

Stack Overflow用户

发布于 2021-05-07 10:09:14

在讲话者端,您将多次调用rospy.init_node。节点初始化应该只执行一次。使用Python "Class“可以这样解决问题:

代码语言:javascript
复制
#!/usr/bin/env python
import rospy

from sensor_msgs.msg import PointCloud2
import std_msgs.msg
import sensor_msgs.point_cloud2 as pcl2
import rosbag

class Talker():
    def __init__(self, bag_file):
        self.pub = rospy.Publisher('chatter', PointCloud2)
        self.rate = rospy.Rate(1) #hz
        self.bag_file = bag_file

    def Talk(self):
        for msg in self.bag_file.read_messages(topics=['/d435/depth/color/points']):
            self.pub.publish(msg)
            self.rate.sleep()

if __name__ == '__main__':
    rospy.init_node('talker', anonymous=True)
    bag = rosbag.Bag('bag2.bag')
    talker = Talker(bag)
    talker.Talk()
票数 0
EN

Stack Overflow用户

发布于 2021-05-07 21:44:50

它通过这样做来工作!

代码语言:javascript
复制
def Talk(self):
    for topic, msg, t in self.bag_file.read_messages(topics=['/d435/depth/color/points']):
        
        self.pub.publish(msg)  
        self.rate.sleep()       
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67419693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档