В каком формате мне нужно опубликовать геометрию сообщения ROS / Point32 - PullRequest
0 голосов
/ 27 июня 2018

У меня есть веб-приложение JavaScript, которое публикует / подписывается на ROS с помощью rosbridge_suite / web sockets.

Я могу успешно публиковать / подписываться на темы с помощью std_msgs / String, std_msgs / Int32 и т. Д., Поэтому я знаю, что с моим соединением все в порядке. У меня проблемы с умением форматировать данные для публикации в теме, которая принимает геометрию / Point32.

Вот пример:

const topic = new ROSLIB.Topic({
  ros, // defined elsewhere
  name: '/my_topic',
  messageType: 'geometry_msgs/Point32'
});


topic.publish({ data: { x: 1.0, y: 1.0, z: 1.0 } });

Затем я запускаю rostopic echo /my_topic, но не могу его показать. Опять же, все мои другие темы работают, и они структурированы одинаково. Я и мои коллеги закончили тем, что изменили тип messageType на строку и проанализировали значения, но я действительно считаю, что это возможно. Есть идеи?

Вот что я пробовал:

publish({ data: { x: 1.0, y: 1.0, z: 1.0 } })
publish({ x: 1.0, y: 1.0, z: 1.0 })
publish(JSON.stringify({ x: 1.0, y: 1.0, z: 1.0 } }))
publish({ data: JSON.stringify({ x: 1.0, y: 1.0, z: 1.0 } }) })
publish({ data: 'x: 1.0, y: 1.0' })

const coords = ROSLIB.Message({
  x: 1.0,
  y: 1.0,
  z: 1.0
});

publish({ data: coords });
publish(coords);

...

Вы поняли идею.

Я использую ROS Kinetic.

1 Ответ

0 голосов
/ 29 июня 2018

Точка32 составляется следующим образом:

float32 x
float32 y
float32 z

В учебнике BasicRosFunctionality для roslibjs описывается, как определять сообщения для публикации:

Он принимает литерал объекта, который соответствует определению сообщения в системе ROS. Вложенные объекты в порядке.

Это означает, что вам нужно создать объект, точно соответствующий определению сообщения . Поскольку в сообщении нет поля с именем data, ваш пример

topic.publish({ data: { x: 1.0, y: 1.0, z: 1.0 } });

просто не совпадает и не будет работать. Чтобы запустить ваш код, просто удалите поле data, соответствующее определению сообщения:

topic.publish({ x: 0.1, y: 0.2, z: 0.3 });
...