# tf2.BufferCore::lookupTransform: 找不到从frame_a到frame_b的变换，错误：传递给lookupTransform参数target_frame的'frame_b'不存在

- **ID:** `ros2/tf2-buffer-core-missing-transform-timeout`
- **领域:** ros2
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 92%

## 根因

目标坐标系'frame_b'尚未发布到tf2树中，通常是因为对应的变换广播节点（如robot_state_publisher或static_transform_publisher）未运行、未发布，或坐标系名称拼写错误。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Humble | active | — | — |
| Iron | active | — | — |
| Galactic | active | — | — |

## 解决方案

1. ```
   Verify all frames are published: run 'ros2 run tf2_tools view_frames' or 'ros2 tf2_echo frame_a frame_b'. Check the output for missing frames. If frame_b is missing, add a static transform publisher: ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 frame_a frame_b
   ```
2. ```
   Ensure robot_state_publisher or your custom broadcaster node is running and publishing transforms. Check with 'ros2 topic echo /tf_static' and 'ros2 topic echo /tf'. If no messages, verify the node's URDF or configuration.
   ```
3. ```
   Add a timeout and retry loop in your code: try: transform = tf_buffer.lookup_transform('frame_a', 'frame_b', rclpy.time.Time(), timeout=rclpy.duration.Duration(seconds=1.0)) except tf2.LookupException: # handle missing transform
   ```

## 无效尝试

- **** — use_sim_time only synchronizes clock, not transforms. The simulation must explicitly publish transforms via robot_state_publisher or similar nodes. (80% 失败率)
- **** — Buffer size only affects how long transforms are stored, not whether they are published. If the frame is never broadcast, no buffer size will help. (95% 失败率)
