geometry_msgs / Pose - доступ к данным - PullRequest
0 голосов
/ 30 августа 2018

Я новичок в ROS и застрял на самом деле с простой проблемой. У меня есть данные о ростопике, которые публикуются как geometry_msgs / Pose. Допустим, я хочу взять данные о положении (скажем, х) как число и сохранить их в переменной. Я использую 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

Я не уверен, почему один работал, а не другой, и хотел бы знать, может ли кто-нибудь объяснить.

Редактировать: находясь в спешке, я думаю, что вопрос здесь совершенно неясен. Мне известны узлы публикации и подписки и ростопы. Я переписал вопрос с некоторым обновлением, чтобы прояснить ситуацию.

1 Ответ

0 голосов
/ 30 августа 2018

Простой подход для хранения данных в некоторых 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 . Поскольку ваш вопрос действительно простой, сначала просмотрите весь учебный раздел ROS. В вашем случае я просто адаптировал пример слушателя .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...