首页 > 解决方案 > geometry_msgs/Pose - 数据访问

问题描述

我是 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。我已经用一些更新重写了这个问题,以帮助澄清。

标签: pythonros

解决方案


将数据存储在 somevariable_x中的一种简单方法如下:

  1. 创建文件listener.py
  2. 使其可执行:chmod 770 listener.py
  3. 将此代码粘贴到其中:
    #!/usr/bin/env python

    导入 rospy
    从 geometry_msgs.msg 导入姿势

    def 回调(数据):
        variable_x = data.position.x
        rospy.loginfo(rospy.get_caller_id() + '我听说 %f', variable_x)

    定义监听器():
        rospy.init_node('listener', 匿名=True)
        rospy.Subscriber('chatter', 姿势, 回调)
        # spin() 只是阻止 python 退出,直到该节点停止
        rospy.spin()

    如果 __name__ == '__main__':
        监听器()
  1. 运行应用程序:./listener.py
  2. 通过输入 bash 来测试它:
    rostopic pub /chatter geometry_msgs/Pose “位置:
      x: 3.1415
      y: 0.0
      z: 0.0
    方向:
      x: 0.0
      y: 0.0
      z: 0.0
      w: 0.0"

要回答您的其他问题:您可以从docs.ros.org获取有关消息定义的信息。由于您的问题非常基础,请先浏览 ROS 的整个教程部分。在您的情况下,我刚刚调整了侦听器示例


推荐阅读