【问题标题】:Display sub-fields of a ROS message显示 ROS 消息的子字段
【发布时间】:2016-05-15 15:18:26
【问题描述】:

对于给定的 ros 消息,有什么方法可以获取 ros-message 的子字段。我正在使用 python 脚本从 rosbag 文件中读取消息,

"for topic, msg, t in bag.read_messages(): "

现在给定主题和消息,我可以显示消息的子字段吗?

例如: nav/Odometry.msg 具有子字段:“header”、“child_frame_id”、“pose”和“twist”。 (Reference link)

是否有将子字段作为输出返回的命令? .. 如果我事先不知道子字段

谢谢

【问题讨论】:

  • 不,我想自动化这个过程。如,如果我不知道 "child_frame_id" ,pose 等是子字段,我该怎么办

标签: python introspection ros


【解决方案1】:

这是一个简单的 python 节点(基于this),它完全符合您的要求:

#!/usr/bin/env python
import rospy
from nav_msgs.msg import Odometry 

def callback(data):
    rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.header)
    rospy.loginfo(rospy.get_caller_id() + "child_frame_id %s", data.child_frame_id)
    rospy.loginfo(rospy.get_caller_id() + "pose %s", data.pose)
    rospy.loginfo(rospy.get_caller_id() + "twist %s", data.twist)

def listener():

    # In ROS, nodes are uniquely named. If two nodes with the same
    # node are launched, the previous one is kicked off. The
    # anonymous=True flag means that rospy will choose a unique
    # name for our 'listener' node so that multiple listeners can
    # run simultaneously.
    rospy.init_node('listener', anonymous=True)

    rospy.Subscriber("odom_topic", Odometry, callback)

    # spin() simply keeps python from exiting until this node is stopped
    rospy.spin()

if __name__ == '__main__':
    listener()

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2013-05-30
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多