我有一个使用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。
答案 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 });