【问题标题】:What format do I need to publish a ROS message geometry/Point32发布ROS消息geometry/Point32需要什么格式
【发布时间】:2018-06-27 20:16:03
【问题描述】:

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

我可以使用 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。

【问题讨论】:

    标签: javascript websocket ros


    【解决方案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 });
    

    【讨论】:

    • 我希望这也能正常工作,但是,OP 已经尝试过了(“这是我尝试过的”块中的第二行)。
    • OP 已经接近解决方案,不幸的是,在他尝试的第二个语句中,括号 } 太多了。
    • 谢谢@Fruchtzwerg 我确实设置了很多 linting,所以我的项目可能会警告我,但我会再试一次。我可能只是在这里打错了。
    • 我发布的代码应该可以解决问题,在我的情况下,消息按预期发布。
    • 固定括号@kauffee000 解决了问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多