geometry_msgs / Pose-数据访问

时间:2018-08-30 13:15:46

标签: python ros

我是ROS的新手,确实遇到了一个简单的问题。我有一个关于rostopic的数据,发布为geometry_msgs / Pose。假设我想将位置数据(例如x)作为数字并将其存储到变量中。我正在使用python。有人可以建议正确的语法以完全访问此特定数据吗?还要感谢任何其他信息,特别是在我可以找到访问所有这些不同类型消息格式的语法的地方。

更新:我遇到的问题是,如果将整个数据另存为变量,则可以使用”。表示法访问它。考虑到数据为geometry_msgs / Pos,我最初编写的回调函数为

def getcallback(self,data):
    var = data.position
    self.var = data

后来,我尝试使用

进行访问
self.var.x

没有索引说Point没有属性x。

但是在挣扎了一段时间之后,我编辑了回调函数

def getcallback(self,data):
    var = data
    self.var = data

现在,我可以使用来访问变量

self.var.position.x

我不确定一个人为什么工作,而另一个人不工作,我想知道是否有人可以解释。

编辑:急于解决,我认为这里的问题尚不清楚。我知道发布和订阅节点和rostopics。我用一些更新将问题重写了,以使问题更清楚。

1 个答案:

答案 0 :(得分:0)

将数据存储在某些variable_x中的简单方法如下:

  1. 创建文件listener.py
  2. 使其可执行:chmod 770 listener.py
  3. 将此代码粘贴到其中:

    #!/usr/bin/env python

    import rospy
    from geometry_msgs.msg import Pose

    def callback(data):
        variable_x = data.position.x
        rospy.loginfo(rospy.get_caller_id() + 'I heard %f', variable_x)

    def listener():
        rospy.init_node('listener', anonymous=True)
        rospy.Subscriber('chatter', Pose, callback)
        # spin() simply keeps python from exiting until this node is stopped
        rospy.spin()

    if __name__ == '__main__':
        listener()
  1. 运行应用程序:./listener.py
  2. 通过输入bash对其进行测试:

    rostopic pub /chatter geometry_msgs/Pose "position:
      x: 3.1415
      y: 0.0
      z: 0.0
    orientation:
      x: 0.0
      y: 0.0
      z: 0.0
      w: 0.0"

要回答您的其他问题: 您可以从docs.ros.org获取有关消息定义的信息。 由于您的问题确实很基础,因此请首先遍历整个tutorial section ROS。 在您的情况下,我只是改编了listener example