You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决roslibjs发布turtle1/teleport_absolute时的类型推断错误

解决roslibjs发送海龟TeleportAbsolute消息的错误

问题根源分析

你遇到的错误虽然指向/tf2_web_republisher/goal,但核心问题出在以下两点:

  1. 消息类型配置错误:海龟仿真器的绝对瞬移消息类型不是turtle1/teleport_absolute,而是标准的 turtlesim/TeleportAbsolute。
  2. 连接时机与资源复用问题:每次调用publish()都重新执行connect()并创建Topic实例,异步连接未完成就发布消息,导致roslibjs无法正确识别话题类型。

修正后的代码示例

// 全局维护ROS连接和话题实例,避免重复创建
let ros;
let teleportTopic;

function connect() {
  ros = new ROSLIB.Ros({
    url: 'ws://localhost:9090' // 替换为你的rosbridge websocket地址
  });

  ros.on('connection', () => {
    console.log('已连接到ROS');
    // 连接成功后初始化瞬移话题
    teleportTopic = new ROSLIB.Topic({
      ros: ros,
      name: "turtle1/teleport_absolute",
      messageType: "turtlesim/TeleportAbsolute" // 修正消息类型
    });
  });

  ros.on('error', (err) => console.log('ROS连接错误:', err));
  ros.on('close', () => console.log('ROS连接已关闭'));
}

function publish() {
  // 检查连接和话题是否就绪
  if (!ros || !teleportTopic) {
    console.log('ROS连接或话题未初始化');
    return;
  }

  // 确保linear变量已定义且有有效值
  const data = new ROSLIB.Message({
    x: linear.x,
    y: linear.y,
    theta: 8.0
  });
  teleportTopic.publish(data);
}

额外注意事项

  • 确保turtlesim_node和rosbridge_server已启动:
    rosrun turtlesim turtlesim_node
    roslaunch rosbridge_server rosbridge_websocket.launch
    
  • 确认linear.x、linear.y变量已被正确赋值,避免传递undefined或无效数值。
  • 初始调用connect()后,等待控制台输出"已连接到ROS",再调用publish()发送消息。

内容的提问来源于stack exchange,提问作者snorre søvold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:10:36