ROS Answers: Open Source Q&A Forum - RSS feedhttps://answers.ros.org/questions/Open source question and answer forum written in Python and DjangoenROS Answers is licensed under Creative Commons Attribution 3.0Thu, 02 Sep 2021 06:04:10 -0500Does rospy have a get_subscribed_topics() function?https://answers.ros.org/question/11876/does-rospy-have-a-get_subscribed_topics-function/rospy has rospy.get_published_topics() but doesn't seem to have the analogous function for subscribed topics. Am I missing something?Wed, 09 Nov 2011 10:04:31 -0600https://answers.ros.org/question/11876/does-rospy-have-a-get_subscribed_topics-function/Answer by heuristicus for <p>rospy has rospy.get_published_topics() but doesn't seem to have the analogous function for subscribed topics. Am I missing something?</p>
https://answers.ros.org/question/11876/does-rospy-have-a-get_subscribed_topics-function/?answer=385663#post-id-385663An alternative way of doing this without having to look at the graph is to use
from rosgraph.masterapi import Master
master = Master("/my_node")
all_topics = [topic_tuple[0] for topic_tuple in master.getTopicTypes()]
published_topics = [topic_tuple[0] for topic_tuple in master.getPublishedTopics("/")]
subscribed_topics = list(set(all_topics) - set(published_topics))Thu, 02 Sep 2021 06:04:10 -0500https://answers.ros.org/question/11876/does-rospy-have-a-get_subscribed_topics-function/?answer=385663#post-id-385663Answer by amittleider for <p>rospy has rospy.get_published_topics() but doesn't seem to have the analogous function for subscribed topics. Am I missing something?</p>
https://answers.ros.org/question/11876/does-rospy-have-a-get_subscribed_topics-function/?answer=52405#post-id-52405This code should help accomplish what you want. It will simply print out the entire ROSGraph nodes and edges. You can infer subscribers from here.
#!/usr/bin/env python import roslib;
roslib.load_manifest('ssnode') import
rospy import roslib
import roslib.message
import rosgraph
import rostopic
from rostopic import ROSTopicHz
from rosgraph.impl import graph
def mygraph():
g = graph.Graph()
try:
while 1:
g.update()
if not g.nn_nodes and not g.srvs:
print("empty")
else:
print('\n')
if g.nn_nodes:
print('Nodes:')
for n in g.nn_nodes:
prefix = n + '|'
print(' ' + n + ' :')
print(' Inbound:')
for k in g.nn_edges.edges_by_end.iterkeys():
if k.startswith(prefix):
for c in g.nn_edges.edges_by_end[k]:
print(' ' + c.start + ' label = ' + c.label)
print(' Outbound:')
for k in g.nn_edges.edges_by_start.iterkeys():
if k.startswith(prefix):
for c in g.nn_edges.edges_by_start[k]:
print(' ' + c.end + ' label = ' + c.label)
if g.srvs:
print('Services:')
for s in g.srvs:
print(' ' + s)
except KeyboardInterrupt:
pass
if __name__ == '__main__':
try:
mygraph()
except rospy.ROSInterruptException: pass
Tue, 15 Jan 2013 14:29:26 -0600https://answers.ros.org/question/11876/does-rospy-have-a-get_subscribed_topics-function/?answer=52405#post-id-52405