{
  "id": "ros2/tf2-static-transform-broadcaster-duplicate",
  "signature": "tf2::TransformException: Frame 'base_link' already exists in static transform tree",
  "signature_zh": "tf2::TransformException：帧'base_link'已存在于静态变换树中",
  "regex": "Frame '.*' already exists in static transform tree",
  "domain": "ros2",
  "category": "runtime_error",
  "subcategory": null,
  "root_cause": "Two nodes are broadcasting the same static transform (e.g., base_link to odom) with different timestamps, causing a conflict in the static transform buffer.",
  "root_cause_type": "generic",
  "root_cause_zh": "两个节点以不同的时间戳广播相同的静态变换（例如base_link到odom），导致静态变换缓冲区冲突。",
  "versions": [
    {
      "version": "ros2-humble",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "ros2-iron",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "ros2-rolling",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "",
      "why_fails": "Static transforms are cached; delay doesn't resolve the duplicate conflict once both broadcast.",
      "fail_rate": 0.8,
      "condition": "",
      "sources": []
    },
    {
      "action": "",
      "why_fails": "Renaming frames breaks transform chains and other nodes expecting the correct frame names.",
      "fail_rate": 0.7,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "Ensure only one node broadcasts the static transform; remove the duplicate broadcaster from the launch file. Example: in launch.py, comment out the second static_transform_publisher node.",
      "success_rate": 0.95,
      "how": "Ensure only one node broadcasts the static transform; remove the duplicate broadcaster from the launch file. Example: in launch.py, comment out the second static_transform_publisher node.",
      "condition": "",
      "sources": []
    },
    {
      "action": "If two broadcasters are necessary, use different frame names (e.g., base_link_static and base_link_dynamic) and update downstream nodes accordingly.",
      "success_rate": 0.85,
      "how": "If two broadcasters are necessary, use different frame names (e.g., base_link_static and base_link_dynamic) and update downstream nodes accordingly.",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [
    "确保只有一个节点广播静态变换；从启动文件中移除重复的广播器。例如：在launch.py中注释掉第二个static_transform_publisher节点。",
    "如果需要两个广播器，使用不同的帧名称（例如base_link_static和base_link_dynamic），并相应更新下游节点。"
  ],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": "https://docs.ros.org/en/rolling/Tutorials/Intermediate/Tf2/Adding-A-Frame.html",
  "official_doc_section": null,
  "error_code": null,
  "verification_tier": "ai_generated",
  "confidence": 0.88,
  "fix_success_rate": 0.9,
  "resolvable": "true",
  "first_seen": "2023-11-05",
  "last_confirmed": "2024-06-01",
  "last_updated": "2024-06-01",
  "evidence_count": 1,
  "tags": [],
  "locale": "en",
  "aliases": []
}