晚上好,我需要创建一个出版商,在从我以前敏锐的书包中读取pointcloud2之后发送它们。这是为了模拟实时执行。
在rqt_graph中,所有的东西看起来都是正确连接的,但是pub和sub似乎根本不通信。
这是我的出版商:
#!/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通信起作用了,但不是使用点云。我是ROS的新手,救命!
发布于 2021-05-07 10:09:14
在讲话者端,您将多次调用rospy.init_node。节点初始化应该只执行一次。使用Python "Class“可以这样解决问题:
#!/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()发布于 2021-05-07 21:44:50
它通过这样做来工作!
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() https://stackoverflow.com/questions/67419693
复制相似问题