ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
I uses following magic to get publisher. This waits until the number of subscribers assigned to publisher would be same as number of subscribers registered to ros master.
def get_publisher(self, topic_path, msg_type, **kwargs):
pub = rospy.Publisher(topic_path, msg_type, **kwargs)
num_subs = len(_get_subscribers(topic_path))
for i in range(10):
num_cons = pub.get_num_connections()
if num_cons == num_subs:
return pub
time.sleep(0.1)
raise RuntimeError("failed to get publisher")
def _get_subscribers(self, topic_path):
ros_master = rosgraph.Master('/rostopic')
topic_path = rosgraph.names.script_resolve_name('rostopic', topic_path)
state = ros_master.getSystemState()
subs = []
for sub in state[1]:
if sub[0] == topic_path:
subs.extend(sub[1])
return subs