发布ROS消息几何/ Point32需要什么格式

时间:2018-06-27 20:16:03

标签: javascript websocket ros

我有一个使用rosbridge_suite / web套接字发布/订阅ROS的JavaScript Web应用程序。

我可以使用std_msgs / String,std_msgs / Int32等成功发布/订阅主题,因此我知道我的连接很好。我遇到的问题是知道如何格式化要发布到接受geometry / 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 :(得分:1)

Point32的组成如下:

float32 x
float32 y
float32 z

BasicRosFunctionality tutorial of 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 });