# tf2.BufferCore::lookupTransform: Lookup would require extrapolation into the future

- **ID:** `ros2/tf2-buffer-core-lookup-transform-time-travel`
- **Domain:** ros2
- **Category:** runtime_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

The requested transform time is later than the latest available frame timestamp, often due to clock skew, sim_time misconfiguration, or publishing delay.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| Humble | active | — | — |
| Iron | active | — | — |
| Jazzy | active | — | — |
| Rolling | active | — | — |

## Workarounds

1. **Set use_sim_time=True on all nodes and ensure /clock is published correctly. Run 'ros2 bag play --clock' to simulate time.** (85% success)
   ```
   Set use_sim_time=True on all nodes and ensure /clock is published correctly. Run 'ros2 bag play --clock' to simulate time.
   ```
2. **Use tf2_ros::Buffer::canTransform() with a timeout before lookupTransform to wait for data.** (75% success)
   ```
   Use tf2_ros::Buffer::canTransform() with a timeout before lookupTransform to wait for data.
   ```
3. **Check and synchronize system clocks across machines using NTP or chrony.** (70% success)
   ```
   Check and synchronize system clocks across machines using NTP or chrony.
   ```

## Dead Ends

- **Increasing the transform timeout in lookupTransform() call** — Timeout increase doesn't fix clock misalignment; the transform still doesn't exist at the requested time. (60% fail)
- **Manually setting ROS time using /clock publisher to wall clock** — If use_sim_time is true, wall clock updates are ignored; the buffer only uses simulated time. (70% fail)
- **Restarting all nodes** — Transient clock skew or missing data persists if the root cause (e.g., late publisher) isn't addressed. (50% fail)
