Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 发布者/订阅者_Python_Ros_Point Clouds - Fatal编程技术网

Python 发布者/订阅者

Python 发布者/订阅者,python,ros,point-clouds,Python,Ros,Point Clouds,晚上好,我需要创建一个发布者,在从我以前的acuisite包中阅读了pointcloud2之后,它会发送给我。这是为了模拟实时执行 在rqt_图中,所有东西似乎都连接正确,但酒吧和酒吧似乎根本不通信 这是我的出版商: #!/usr/bin/env python import rospy from sensor_msgs.msg import PointCloud2 import std_msgs.msg import sensor_msgs.point_cloud2 as pcl2 impor

晚上好,我需要创建一个发布者,在从我以前的acuisite包中阅读了pointcloud2之后,它会发送给我。这是为了模拟实时执行

在rqt_图中,所有东西似乎都连接正确,但酒吧和酒吧似乎根本不通信

这是我的出版商:

#!/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)
这是我的订户:

#!/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()
有人能帮我吗?尝试使用

from std_msgs.msg import String

通信起作用了,但点云没有。我是罗斯的新手,救命

在通话方,您正在多次呼叫
rospy.init_node
。节点初始化应该只执行一次。使用Python“类”,可以通过以下方式解决问题:

#!/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()

它通过这样做工作

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()       

为您的bag文件的每条消息调用talker将不起作用,因为节点的创建只应执行一次。在roswiki上查看示例:谢谢,你说得对。我已经做了建议的更改,但仍然无法收到任何内容,也许我需要编辑主题?这是来自bag
{'/d435/depth/color/points':TopicTuple(msg_type='sensor'u msgs/PointCloud2',message_count=2888,connections=1,frequency=30.004750075828),“/t265/odom/sample”:TopicTuple(msg_type='nav'u msgs/Odometry',message_count=19227,connections=1,frequency=57456.21917808219)}的信息
另外,似乎在从包中发送第一条消息后,脚本退出,但尝试在另一个脚本中打印消息时,它们都会出现!似乎它根本不发送消息,我添加了这段代码,只打印了“错误”<代码>尝试:self.pub.publish(msg)除外:print('Error')