# tf2::TransformException: Frame 'base_link' already exists in static transform tree

- **ID:** `ros2/tf2-static-transform-broadcaster-duplicate`
- **Domain:** ros2
- **Category:** runtime_error
- **Verification:** ai_generated
- **Fix Rate:** 90%

## 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.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| ros2-humble | active | — | — |
| ros2-iron | active | — | — |
| ros2-rolling | active | — | — |

## Workarounds

1. **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.** (95% success)
   ```
   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.
   ```
2. **If two broadcasters are necessary, use different frame names (e.g., base_link_static and base_link_dynamic) and update downstream nodes accordingly.** (85% success)
   ```
   If two broadcasters are necessary, use different frame names (e.g., base_link_static and base_link_dynamic) and update downstream nodes accordingly.
   ```

## Dead Ends

- **** — Static transforms are cached; delay doesn't resolve the duplicate conflict once both broadcast. (80% fail)
- **** — Renaming frames breaks transform chains and other nodes expecting the correct frame names. (70% fail)
