运行时获取ros消息类型
Get ros message type at runtime
我希望通过 rosparam
加载配置文件,其中包含要订阅的通用回调的类型。现在这就是我所拥有的,但无法弄清楚如何让它与订阅者一起工作。
import rospy
from std_msgs.msg import *
def generic_cb(data):
print(data.data)
if __name__ == '__main__':
rospy.init_node('generic_node')
topic_name = rospy.get_param('topic_name')
topic_type = rospy.get_param('topic_type')
rospy.Subscriber(topic_name, topic_type, generic_cb)
rospy.spin()
在 Python 中,您可以使用 globals
查找和 return 来自字符串的消息类型
import rospy
from std_msgs.msg import *
def generic_cb(data):
print(data.data)
if __name__ == '__main__':
rospy.init_node('generic_node')
topic_name = rospy.get_param('topic_name')
topic_type = rospy.get_param('topic_type')
ros_msg_type = globals()[topic_type]
rospy.Subscriber(topic_name, ros_msg_type, generic_cb)
rospy.spin()
查看动态计算主题类型的rostopic
API,您可以在事先不知道的情况下获取主题的消息类型:
import rostopic
import rospy
rospy.init_node('test_node')
TopicType, topic_str, _ = rostopic.get_topic_class('/some/topic')
def callback(msg):
print(msg)
rospy.Subscriber(topic_str, TopicType, callback)
rospy.spin()
我希望通过 rosparam
加载配置文件,其中包含要订阅的通用回调的类型。现在这就是我所拥有的,但无法弄清楚如何让它与订阅者一起工作。
import rospy
from std_msgs.msg import *
def generic_cb(data):
print(data.data)
if __name__ == '__main__':
rospy.init_node('generic_node')
topic_name = rospy.get_param('topic_name')
topic_type = rospy.get_param('topic_type')
rospy.Subscriber(topic_name, topic_type, generic_cb)
rospy.spin()
在 Python 中,您可以使用 globals
查找和 return 来自字符串的消息类型
import rospy
from std_msgs.msg import *
def generic_cb(data):
print(data.data)
if __name__ == '__main__':
rospy.init_node('generic_node')
topic_name = rospy.get_param('topic_name')
topic_type = rospy.get_param('topic_type')
ros_msg_type = globals()[topic_type]
rospy.Subscriber(topic_name, ros_msg_type, generic_cb)
rospy.spin()
查看动态计算主题类型的rostopic
API,您可以在事先不知道的情况下获取主题的消息类型:
import rostopic
import rospy
rospy.init_node('test_node')
TopicType, topic_str, _ = rostopic.get_topic_class('/some/topic')
def callback(msg):
print(msg)
rospy.Subscriber(topic_str, TopicType, callback)
rospy.spin()